/elec/propeller-clock

To get this branch, use:
bzr branch http://bzr.ed.am/elec/propeller-clock

« back to all changes in this revision

Viewing changes to src/utility/ios

  • Committer: Tim Marston
  • Date: 2012-03-10 01:25:02 UTC
  • Revision ID: tim@ed.am-20120310012502-v0jwfjghpp63un6n
removed time singleton, not cause it saved much space, but cause i don't want singletons in this project!

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*      Copyright (C) 2004 Garrett A. Kajmowicz
2
 
 
3
 
        This file is part of the uClibc++ Library.
4
 
 
5
 
        This library is free software; you can redistribute it and/or
6
 
        modify it under the terms of the GNU Lesser General Public
7
 
        License as published by the Free Software Foundation; either
8
 
        version 2.1 of the License, or (at your option) any later version.
9
 
 
10
 
        This library is distributed in the hope that it will be useful,
11
 
        but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
 
        Lesser General Public License for more details.
14
 
 
15
 
        You should have received a copy of the GNU Lesser General Public
16
 
        License along with this library; if not, write to the Free Software
17
 
        Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
 
*/
19
 
 
20
 
#include <basic_definitions>
21
 
#include <cstddef>
22
 
#include <locale>
23
 
#include <iosfwd>
24
 
 
25
 
#ifndef __HEADER_STD_IOS
26
 
#define __HEADER_STD_IOS 1
27
 
 
28
 
#pragma GCC visibility push(default)
29
 
 
30
 
namespace std{
31
 
        typedef signed long int streamoff;
32
 
 
33
 
        template <class stateT> class fpos;
34
 
 
35
 
        class _UCXXEXPORT ios_base {
36
 
        public:
37
 
                class failure;
38
 
#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__
39
 
                class failure : public exception {
40
 
                public:
41
 
                        explicit failure(const std::string& msg) { }
42
 
                        explicit failure() { }
43
 
                        virtual const char* what() const throw() {
44
 
                                return "std::ios_base failure exception";
45
 
                        }
46
 
                };
47
 
#endif
48
 
#ifdef __UCLIBCXX_SUPPORT_CDIR__
49
 
                class _UCXXLOCAL Init{
50
 
                public:
51
 
                        _UCXXEXPORT Init();
52
 
                        _UCXXEXPORT ~Init();
53
 
                private:
54
 
                        static int init_cnt;
55
 
                };
56
 
#endif
57
 
 
58
 
        public:
59
 
 
60
 
                typedef unsigned short int fmtflags;
61
 
 
62
 
                static const fmtflags skipws            = 0x0001;
63
 
 
64
 
                static const fmtflags left              = 0x0002;
65
 
                static const fmtflags right             = 0x0004;
66
 
                static const fmtflags internal          = 0x0008;
67
 
 
68
 
                static const fmtflags boolalpha         = 0x0010;
69
 
 
70
 
                static const fmtflags dec               = 0x0020;
71
 
                static const fmtflags oct               = 0x0040;
72
 
                static const fmtflags hex               = 0x0080;
73
 
 
74
 
                static const fmtflags scientific        = 0x0100;
75
 
                static const fmtflags fixed             = 0x0200;
76
 
 
77
 
                static const fmtflags showbase          = 0x0400;
78
 
                static const fmtflags showpoint         = 0x0800;
79
 
                static const fmtflags showpos           = 0x1000;
80
 
                static const fmtflags uppercase         = 0x2000;
81
 
 
82
 
                static const fmtflags adjustfield       = left | right | internal;
83
 
                static const fmtflags basefield         = dec | oct | hex;
84
 
                static const fmtflags floatfield        = fixed | scientific;
85
 
 
86
 
                static const fmtflags unitbuf           = 0x4000;
87
 
 
88
 
                typedef unsigned char iostate;
89
 
                static const iostate goodbit            = 0x00;
90
 
                static const iostate badbit             = 0x01;
91
 
                static const iostate eofbit             = 0x02;
92
 
                static const iostate failbit            = 0x04;
93
 
 
94
 
                typedef unsigned char openmode;
95
 
                static const openmode app               = 0x01;
96
 
                static const openmode ate               = 0x02;
97
 
                static const openmode binary            = 0x04;
98
 
                static const openmode in                = 0x08;
99
 
                static const openmode out               = 0x10;
100
 
                static const openmode trunc             = 0x20;
101
 
 
102
 
                typedef unsigned char seekdir;
103
 
                static const seekdir beg                = 0x01;
104
 
                static const seekdir cur                = 0x02;
105
 
                static const seekdir end                = 0x04;
106
 
 
107
 
                _UCXXEXPORT fmtflags flags() const{
108
 
                        return mformat;
109
 
                }
110
 
                _UCXXEXPORT fmtflags flags(fmtflags fmtfl);
111
 
 
112
 
                fmtflags setf(fmtflags fmtfl);
113
 
                fmtflags setf(fmtflags fmtfl, fmtflags mask );
114
 
 
115
 
                _UCXXEXPORT void unsetf(fmtflags mask){
116
 
                        mformat&= ~mask;
117
 
                }
118
 
 
119
 
                _UCXXEXPORT streamsize precision() const{
120
 
                        return mprecision;
121
 
                }
122
 
 
123
 
                _UCXXEXPORT streamsize precision(streamsize prec);
124
 
 
125
 
                _UCXXEXPORT streamsize width() const{
126
 
                        return mwidth;
127
 
                }
128
 
 
129
 
                _UCXXEXPORT streamsize width(streamsize wide);
130
 
 
131
 
                _UCXXEXPORT locale imbue(const locale& loc);
132
 
 
133
 
                _UCXXEXPORT locale getloc() const{
134
 
                        return mLocale;
135
 
                }
136
 
 
137
 
//              FIXME - These need to be implemented
138
 
//              static int xalloc();
139
 
//              long&  iword(int index);
140
 
//              void*& pword(int index);
141
 
 
142
 
                _UCXXEXPORT ~ios_base() { }
143
 
 
144
 
                enum event { erase_event, imbue_event, copyfmt_event };
145
 
 
146
 
                typedef void (*event_callback)(event, ios_base&, int index);
147
 
//              void register_callback(event_call_back fn, int index);
148
 
 
149
 
                //We are going to wrap stdio so we don't need implementation of the following:
150
 
                inline static bool sync_with_stdio(bool = true) { return true; }
151
 
 
152
 
        protected:
153
 
                _UCXXEXPORT ios_base() : mLocale(), mformat(dec | skipws ), mstate(goodbit), 
154
 
                        mmode(), mdir(), mprecision(6), mwidth(0)
155
 
#ifdef __UCLIBCXX_SUPPORT_CDIR__
156
 
                        ,mInit()
157
 
#endif
158
 
                {
159
 
 
160
 
                }
161
 
                locale mLocale;
162
 
                fmtflags mformat;
163
 
                iostate mstate;
164
 
                openmode mmode;
165
 
                seekdir mdir;
166
 
                streamsize mprecision;
167
 
                streamsize mwidth;
168
 
#ifdef __UCLIBCXX_SUPPORT_CDIR__
169
 
                Init mInit;
170
 
#endif
171
 
        };
172
 
 
173
 
 
174
 
        //ios_base manipulators
175
 
 
176
 
 
177
 
        inline ios_base& boolalpha  (ios_base& str){
178
 
                str.setf(ios_base::boolalpha);
179
 
                return str;
180
 
        }
181
 
        inline ios_base& noboolalpha(ios_base& str){
182
 
                str.unsetf(ios_base::boolalpha);
183
 
                return str;
184
 
        }
185
 
        inline ios_base& showbase   (ios_base& str){
186
 
                str.setf(ios_base::showbase);
187
 
                return str;
188
 
        }
189
 
        inline ios_base& noshowbase (ios_base& str){
190
 
                str.unsetf(ios_base::showbase);
191
 
                return str;
192
 
        }
193
 
        inline ios_base& showpoint  (ios_base& str){
194
 
                str.setf(ios_base::showpoint);
195
 
                return str;
196
 
        }
197
 
        inline ios_base& noshowpoint(ios_base& str){
198
 
                str.unsetf(ios_base::showpoint);
199
 
                return str;
200
 
        }
201
 
        inline ios_base& showpos    (ios_base& str){
202
 
                str.setf(ios_base::showpos);
203
 
                return str;
204
 
        }
205
 
        inline ios_base& noshowpos  (ios_base& str){
206
 
                str.unsetf(ios_base::showpos);
207
 
                return str;
208
 
        }
209
 
        inline ios_base& skipws     (ios_base& str){
210
 
                str.setf(ios_base::skipws);
211
 
                return str;
212
 
        }
213
 
        inline ios_base& noskipws   (ios_base& str){
214
 
                str.unsetf(ios_base::skipws);
215
 
                return str;
216
 
        }
217
 
        inline ios_base& uppercase  (ios_base& str){
218
 
                str.setf(ios_base::uppercase);
219
 
                return str;
220
 
        }
221
 
        inline ios_base& nouppercase(ios_base& str){
222
 
                str.unsetf(ios_base::uppercase);
223
 
                return str;
224
 
        }
225
 
 
226
 
        inline ios_base& unitbuf    (ios_base& str){
227
 
                str.setf(ios_base::unitbuf);
228
 
                return str;
229
 
        }
230
 
        inline ios_base& nounitbuf  (ios_base& str){
231
 
                str.unsetf(ios_base::unitbuf);
232
 
                return str;
233
 
        }
234
 
        inline ios_base& internal   (ios_base& str){
235
 
                str.setf(ios_base::internal, ios_base::adjustfield);
236
 
                return str;
237
 
        }
238
 
        inline ios_base& left       (ios_base& str){
239
 
                str.setf(ios_base::left, ios_base::adjustfield);
240
 
                return str;
241
 
        }
242
 
        inline ios_base& right      (ios_base& str){
243
 
                str.setf(ios_base::right, ios_base::adjustfield);
244
 
                return str;
245
 
        }
246
 
 
247
 
        inline ios_base& dec        (ios_base& str){
248
 
                str.setf(ios_base::dec, ios_base::basefield);
249
 
                return str;
250
 
        }
251
 
        inline ios_base& hex        (ios_base& str){
252
 
                str.setf(ios_base::hex, ios_base::basefield);
253
 
                return str;
254
 
        }
255
 
        inline ios_base& oct        (ios_base& str){
256
 
                str.setf(ios_base::oct, ios_base::basefield);
257
 
                return str;
258
 
        }
259
 
 
260
 
        inline ios_base& fixed      (ios_base& str){
261
 
                str.setf(ios_base::fixed, ios_base::floatfield);
262
 
                return str;
263
 
        }
264
 
        inline ios_base& scientific (ios_base& str){
265
 
                str.setf(ios_base::scientific, ios_base::floatfield);
266
 
                return str;
267
 
        }
268
 
 
269
 
 
270
 
        //basic_ios class definition
271
 
 
272
 
 
273
 
        template <class charT, class traits > class _UCXXEXPORT basic_ios
274
 
                : public ios_base
275
 
        {
276
 
        public:
277
 
        // Types:
278
 
                typedef charT char_type;
279
 
                typedef typename traits::int_type int_type;
280
 
                typedef typename traits::pos_type pos_type;
281
 
                typedef typename traits::off_type off_type;
282
 
                typedef traits traits_type;
283
 
 
284
 
                _UCXXEXPORT operator void*() const{
285
 
                        if(fail() ){
286
 
                                return 0;
287
 
                        }
288
 
                        return (void *)(1);     //Must return a non-NULL pointer (though it can be *any* pointer)
289
 
                }
290
 
 
291
 
                _UCXXEXPORT bool operator!() const{
292
 
                        return fail();
293
 
                }
294
 
                _UCXXEXPORT iostate rdstate() const{
295
 
                        return mstate;
296
 
                }
297
 
                _UCXXEXPORT void clear(iostate state = goodbit){
298
 
                        if(rdbuf()!=0){
299
 
                                mstate = state;
300
 
                        }else{
301
 
                                mstate = state|ios_base::badbit;
302
 
                        }
303
 
                }
304
 
                _UCXXEXPORT void setstate(iostate state) {
305
 
                        clear(rdstate()  | state);
306
 
#ifdef __UCLIBCXX_EXCEPTION_SUPPORT__
307
 
                        if(rdstate() & throw_mask){
308
 
                                throw failure();
309
 
                        }
310
 
#endif
311
 
                }
312
 
 
313
 
                _UCXXEXPORT bool good() const{
314
 
                        return (rdstate() == 0);
315
 
                }
316
 
                _UCXXEXPORT bool eof()  const{
317
 
                        if(rdstate() & eofbit){
318
 
                                return true;
319
 
                        }
320
 
                        return false;
321
 
                }
322
 
                _UCXXEXPORT bool fail() const{
323
 
                        if( mstate & (failbit | badbit) ){
324
 
                                return true;
325
 
                        }
326
 
                        return false;
327
 
                }
328
 
 
329
 
                _UCXXEXPORT bool bad()  const{
330
 
                        if(mstate & badbit){
331
 
                                return true;
332
 
                        }
333
 
                        return false;
334
 
                }
335
 
 
336
 
                _UCXXEXPORT iostate exceptions() const{
337
 
                        return throw_mask;
338
 
                }
339
 
                _UCXXEXPORT void exceptions(iostate except){
340
 
                        throw_mask = except;
341
 
                }
342
 
 
343
 
                explicit _UCXXEXPORT basic_ios(basic_streambuf<charT,traits>* sb) : fill_char(' '), mtied(0), mstreambuf(0){
344
 
                        init(sb);
345
 
                }
346
 
 
347
 
                basic_ios() : mtied(0), mstreambuf(0){ }
348
 
 
349
 
                virtual _UCXXEXPORT ~basic_ios(){
350
 
                }
351
 
 
352
 
                _UCXXEXPORT basic_ostream<charT,traits>* tie() const{
353
 
                        return mtied;
354
 
                }
355
 
                _UCXXEXPORT basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr){
356
 
                        basic_ostream<charT,traits>* retval= mtied;
357
 
                        mtied = tiestr;
358
 
                        return retval;                  
359
 
                }
360
 
                _UCXXEXPORT basic_streambuf<charT,traits>* rdbuf() const{
361
 
                        return mstreambuf;
362
 
                }
363
 
                _UCXXEXPORT basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb){
364
 
                        basic_streambuf<charT,traits>* retval = mstreambuf;
365
 
                        mstreambuf = sb;
366
 
                        return retval;
367
 
                }
368
 
                _UCXXEXPORT basic_ios& copyfmt(const basic_ios& rhs);
369
 
                _UCXXEXPORT char_type fill() const{
370
 
                        return fill_char;
371
 
                }
372
 
                _UCXXEXPORT char_type fill(char_type ch){
373
 
                        char_type temp = fill_char;
374
 
                        fill_char = ch;
375
 
                        return temp;
376
 
                }
377
 
 
378
 
                _UCXXEXPORT locale imbue(const locale& loc){
379
 
                        return ios_base::imbue(loc);
380
 
                }
381
 
                _UCXXEXPORT char narrow(char_type c, char dfault) const;
382
 
                _UCXXEXPORT char_type widen(char c) const;
383
 
 
384
 
        protected:
385
 
                char_type fill_char;
386
 
                basic_ostream<charT,traits>* mtied;
387
 
                basic_streambuf<charT,traits>* mstreambuf;
388
 
                iostate throw_mask;
389
 
                _UCXXEXPORT basic_ios(const basic_ios<charT,traits> &){ }
390
 
                _UCXXEXPORT basic_ios<charT,traits> & operator=(const basic_ios<charT,traits> &){ return *this; }
391
 
                _UCXXEXPORT void init(basic_streambuf<charT,traits>* sb){
392
 
                        ios_base::mformat = skipws|dec;
393
 
                        mstreambuf = sb;
394
 
                        mstate = goodbit;
395
 
                        throw_mask = goodbit;
396
 
                }
397
 
        };
398
 
 
399
 
#ifdef __UCLIBCXX_EXPAND_IOS_CHAR__
400
 
#ifndef __UCLIBCXX_COMPILE_IOS__
401
 
        
402
 
        template <> _UCXXEXPORT void basic_ios<char, char_traits<char> >::clear(iostate state);
403
 
        template <> _UCXXEXPORT void basic_ios<char, char_traits<char> >::setstate(iostate state);
404
 
 
405
 
#endif
406
 
#endif
407
 
 
408
 
 
409
 
        template <class charT, class traits>
410
 
                inline char basic_ios<charT, traits>::narrow(char_type c, char dfault) const
411
 
        {
412
 
                return dfault;
413
 
        }
414
 
 
415
 
        template <>
416
 
                inline char basic_ios<char, char_traits<char> >::narrow(char_type c, char) const
417
 
        {
418
 
                return c;
419
 
        }
420
 
 
421
 
#ifdef __UCLIBCXX_HAS_WCHAR__
422
 
 
423
 
        template <>
424
 
                inline char basic_ios<wchar_t, char_traits<wchar_t> >::narrow(char_type c, char dfault) const
425
 
        {
426
 
                char retval = wctob (c);
427
 
                if(retval == EOF){
428
 
                        retval = dfault;
429
 
                }
430
 
                return retval;
431
 
        }
432
 
 
433
 
#endif  //__UCLIBCXX_HAS_WCHAR__
434
 
 
435
 
        template <class charT, class traits> 
436
 
                inline typename basic_ios<charT, traits>::char_type
437
 
                basic_ios<charT, traits>::widen(char c) const
438
 
        {
439
 
                return c;
440
 
        }
441
 
 
442
 
        template <> 
443
 
                inline basic_ios<char, char_traits<char> >::char_type
444
 
                basic_ios<char, char_traits<char> >::widen(char c) const
445
 
        {
446
 
                return c;
447
 
        }
448
 
 
449
 
#ifdef __UCLIBCXX_HAS_WCHAR__
450
 
 
451
 
        template <> 
452
 
                inline basic_ios<wchar_t, char_traits<wchar_t> >::char_type
453
 
                basic_ios<wchar_t, char_traits<wchar_t> >::widen(char c) const
454
 
        {
455
 
                return btowc(c);
456
 
        }
457
 
 
458
 
#endif //__UCLIBCXX_HAS_WCHAR__
459
 
 
460
 
 
461
 
        template <class stateT> class _UCXXEXPORT fpos{
462
 
        public:
463
 
                _UCXXEXPORT fpos(stateT s){
464
 
                        st = s;
465
 
                }
466
 
                _UCXXEXPORT stateT state() const{
467
 
                        return st;
468
 
                }
469
 
                _UCXXEXPORT void state(stateT s){
470
 
                        st = s;
471
 
                }
472
 
                _UCXXEXPORT bool operator==(const fpos &rhs){
473
 
                        return st == rhs.st;
474
 
                }
475
 
                _UCXXEXPORT bool operator!=(const fpos &rhs){
476
 
                        return st == rhs.st;
477
 
                }
478
 
                _UCXXEXPORT fpos & operator+(const streamoff & o){
479
 
                        st += o;
480
 
                        return *this;
481
 
                }
482
 
                _UCXXEXPORT fpos & operator-(const streamoff & o){
483
 
                        st -= o;
484
 
                        return *this;
485
 
                }
486
 
                _UCXXEXPORT streamoff operator-(const fpos & rhs){
487
 
                        return st - rhs.st;
488
 
                }
489
 
 
490
 
                
491
 
        private:
492
 
                stateT st;
493
 
        };
494
 
 
495
 
 
496
 
}
497
 
 
498
 
#pragma GCC visibility pop
499
 
 
500
 
#endif
501