Ignore:
Timestamp:
Aug 31, 2023, 11:31:15 PM (2 years ago)
Author:
JiadaL <j82liang@…>
Branches:
master
Children:
950c58e
Parents:
92355883 (diff), 686912c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Resolve conflict

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/iostream.hfa

    r92355883 r2a301ff  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jun 15 22:34:31 2023
    13 // Update Count     : 411
     12// Last Modified On : Thu Aug 31 10:55:35 2023
     13// Update Count     : 544
    1414//
    1515
     
    1717
    1818#include "iterator.hfa"
    19 
     19#include "Exception.hfa"
    2020
    2121// *********************************** ostream ***********************************
    22 
    2322
    2423forall( ostype & )
     
    3029        const char * sepGetCur$( ostype & );                            // get current separator string
    3130        void sepSetCur$( ostype &, const char [] );                     // set current separator string
    32         bool getNL$( ostype & );                                                        // check newline
    33         void setNL$( ostype &, bool );                                          // saw newline
     31        bool getNL$( ostype & );                                                        // get newline
     32        bool setNL$( ostype &, bool );                                          // set newline
    3433        bool getANL$( ostype & );                                                       // get auto newline (on/off)
     34        bool setANL$( ostype &, bool );                                         // set auto newline (on/off), and return previous state
    3535        bool getPrt$( ostype & );                                                       // get fmt called in output cascade
    36         void setPrt$( ostype &, bool );                                         // set fmt called in output cascade
     36        bool setPrt$( ostype &, bool );                                         // set fmt called in output cascade
    3737        // public
    38         void sepOn( ostype & );                                                         // turn separator state on
    39         void sepOff( ostype & );                                                        // turn separator state off
    40         bool sepDisable( ostype & );                                            // set default state to off, and return previous state
    41         bool sepEnable( ostype & );                                                     // set default state to on, and return previous state
    4238        void nlOn( ostype & );                                                          // turn auto-newline state on
    4339        void nlOff( ostype & );                                                         // turn auto-newline state off
    4440
     41        void sep( ostype & );                                                           // turn separator state on
     42        void nosep( ostype & );                                                         // turn separator state off
     43        bool sepOn( ostype & );                                                         // set default state to on, and return previous state
     44        bool sepOff( ostype & );                                                        // set default state to off, and return previous state
    4545        const char * sepGet( ostype & );                                        // get separator string
    4646        void sepSet( ostype &, const char [] );                         // set separator to string (15 character maximum)
     
    7474// implement writable for intrinsic types
    7575
     76#define OSTYPE_VOID( T ) void ?|?( ostype &, T )
     77#define OSTYPE_VOID_IMPL( T ) \
     78        void ?|?( ostype & os, T t ) { \
     79                (ostype &)(os | t); ends( os ); \
     80        } // ?|?
     81
    7682forall( ostype & | basic_ostream( ostype ) ) {
    7783        ostype & ?|?( ostype &, bool );
    78         void ?|?( ostype &, bool );
     84        OSTYPE_VOID( bool );
    7985
    8086        ostype & ?|?( ostype &, char );
    81         void ?|?( ostype &, char );
     87        OSTYPE_VOID( char );
    8288        ostype & ?|?( ostype &, signed char );
    83         void ?|?( ostype &, signed char );
     89        OSTYPE_VOID( signed char );
    8490        ostype & ?|?( ostype &, unsigned char );
    85         void ?|?( ostype &, unsigned char );
     91        OSTYPE_VOID( unsigned char );
    8692
    8793        ostype & ?|?( ostype &, short int );
    88         void ?|?( ostype &, short int );
     94        OSTYPE_VOID( short int );
    8995        ostype & ?|?( ostype &, unsigned short int );
    90         void ?|?( ostype &, unsigned short int );
     96        OSTYPE_VOID( unsigned short int );
    9197        ostype & ?|?( ostype &, int );
    92         void ?|?( ostype &, int );
     98        OSTYPE_VOID( int );
    9399        ostype & ?|?( ostype &, unsigned int );
    94         void ?|?( ostype &, unsigned int );
     100        OSTYPE_VOID( unsigned int );
    95101        ostype & ?|?( ostype &, long int );
    96         void ?|?( ostype &, long int );
     102        OSTYPE_VOID( long int );
    97103        ostype & ?|?( ostype &, long long int );
    98         void ?|?( ostype &, long long int );
     104        OSTYPE_VOID( long long int );
    99105        ostype & ?|?( ostype &, unsigned long int );
    100         void ?|?( ostype &, unsigned long int );
     106        OSTYPE_VOID( unsigned long int );
    101107        ostype & ?|?( ostype &, unsigned long long int );
    102         void ?|?( ostype &, unsigned long long int );
     108        OSTYPE_VOID( unsigned long long int );
    103109        #if defined( __SIZEOF_INT128__ )
    104110        ostype & ?|?( ostype &, int128 );
    105         void ?|?( ostype &, int128 );
     111        OSTYPE_VOID( int128 );
    106112        ostype & ?|?( ostype &, unsigned int128 );
    107         void ?|?( ostype &, unsigned int128 );
     113        OSTYPE_VOID( unsigned int128 );
    108114        #endif // __SIZEOF_INT128__
    109115
    110116        ostype & ?|?( ostype &, float );
    111         void ?|?( ostype &, float );
     117        OSTYPE_VOID( float );
    112118        ostype & ?|?( ostype &, double );
    113         void ?|?( ostype &, double );
     119        OSTYPE_VOID( double );
    114120        ostype & ?|?( ostype &, long double );
    115         void ?|?( ostype &, long double );
     121        OSTYPE_VOID( long double );
    116122
    117123        ostype & ?|?( ostype &, float _Complex );
    118         void ?|?( ostype &, float _Complex );
     124        OSTYPE_VOID( float _Complex );
    119125        ostype & ?|?( ostype &, double _Complex );
    120         void ?|?( ostype &, double _Complex );
     126        OSTYPE_VOID( double _Complex );
    121127        ostype & ?|?( ostype &, long double _Complex );
    122         void ?|?( ostype &, long double _Complex );
     128        OSTYPE_VOID( long double _Complex );
    123129
    124130        ostype & ?|?( ostype &, const char [] );
    125         void ?|?( ostype &, const char [] );
    126         // ostype & ?|?( ostype &, const char16_t * );
     131        OSTYPE_VOID( const char [] );
     132        // ostype & ?|?( ostype &, const char16_t [] );
    127133        #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous
    128         // ostype & ?|?( ostype &, const char32_t * );
     134        // ostype & ?|?( ostype &, const char32_t [] );
    129135        #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )
    130         // ostype & ?|?( ostype &, const wchar_t * );
     136        // ostype & ?|?( ostype &, const wchar_t [] );
    131137        ostype & ?|?( ostype &, const void * );
    132         void ?|?( ostype &, const void * );
     138        OSTYPE_VOID( const void * );
     139
     140        // FIX-ME: does not work so using macros
     141        // forall( T | { ostype & ?|?( ostype &, T ); } )
     142        // void ?|?( ostype & os, T );
    133143
    134144        // manipulators
    135145        ostype & ?|?( ostype &, ostype & (*)( ostype & ) );
    136         void ?|?( ostype &, ostype & (*)( ostype & ) );
     146        OSTYPE_VOID( ostype & (*)( ostype & ) );
     147
    137148        ostype & nl( ostype & );
    138149        ostype & nonl( ostype & );
     150        ostype & nlOn( ostype & );
     151        ostype & nlOff( ostype & );
     152
     153        ostype & sepVal( ostype & );
     154        ostype & sepTupleVal( ostype & );
    139155        ostype & sep( ostype & );
    140         ostype & sepTuple( ostype & );
     156        ostype & nosep( ostype & );
    141157        ostype & sepOn( ostype & );
    142158        ostype & sepOff( ostype & );
    143         ostype & sepDisable( ostype & );
    144         ostype & sepEnable( ostype & );
    145         ostype & nlOn( ostype & );
    146         ostype & nlOff( ostype & );
    147159} // distribution
    148160
     
    188200// initialized explicitly shall be initialized implicitly the same as objects that have static storage duration.***
    189201
    190 #define IntegralFMTDecl( T, CODE ) \
     202#define INTEGRAL_FMT_DECL( T, CODE ) \
    191203static inline { \
    192204        _Ostream_Manip(T) bin( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'b', { .all : 0 } }; } \
     
    206218forall( ostype & | basic_ostream( ostype ) ) { \
    207219        ostype & ?|?( ostype & os, _Ostream_Manip(T) f ); \
    208         void ?|?( ostype & os, _Ostream_Manip(T) f ); \
     220        OSTYPE_VOID( _Ostream_Manip(T) ); \
    209221} // ?|?
    210222
    211 IntegralFMTDecl( signed char, 'd' )
    212 IntegralFMTDecl( unsigned char, 'u' )
    213 IntegralFMTDecl( signed short int, 'd' )
    214 IntegralFMTDecl( unsigned short int, 'u' )
    215 IntegralFMTDecl( signed int, 'd' )
    216 IntegralFMTDecl( unsigned int, 'u' )
    217 IntegralFMTDecl( signed long int, 'd' )
    218 IntegralFMTDecl( unsigned long int, 'u' )
    219 IntegralFMTDecl( signed long long int, 'd' )
    220 IntegralFMTDecl( unsigned long long int, 'u' )
     223INTEGRAL_FMT_DECL( signed char, 'd' )
     224INTEGRAL_FMT_DECL( unsigned char, 'u' )
     225INTEGRAL_FMT_DECL( signed short int, 'd' )
     226INTEGRAL_FMT_DECL( unsigned short int, 'u' )
     227INTEGRAL_FMT_DECL( signed int, 'd' )
     228INTEGRAL_FMT_DECL( unsigned int, 'u' )
     229INTEGRAL_FMT_DECL( signed long int, 'd' )
     230INTEGRAL_FMT_DECL( unsigned long int, 'u' )
     231INTEGRAL_FMT_DECL( signed long long int, 'd' )
     232INTEGRAL_FMT_DECL( unsigned long long int, 'u' )
    221233#if defined( __SIZEOF_INT128__ )
    222 IntegralFMTDecl( int128, 'd' )
    223 IntegralFMTDecl( unsigned int128, 'u' )
     234INTEGRAL_FMT_DECL( int128, 'd' )
     235INTEGRAL_FMT_DECL( unsigned int128, 'u' )
    224236#endif // __SIZEOF_INT128__
    225237
     
    227239
    228240// Default suffix for values with no fraction is "."
    229 #define FloatingPointFMTDecl( T ) \
     241#define FLOATING_POINT_FMT_DECL( T ) \
    230242static inline { \
    231243        _Ostream_Manip(T) hex( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'a', { .all : 0 } }; } \
     
    251263forall( ostype & | basic_ostream( ostype ) ) { \
    252264        ostype & ?|?( ostype & os, _Ostream_Manip(T) f ); \
    253         void ?|?( ostype & os, _Ostream_Manip(T) f ); \
     265        OSTYPE_VOID( _Ostream_Manip(T) ); \
    254266} // ?|?
    255267
    256 FloatingPointFMTDecl( double )
    257 FloatingPointFMTDecl( long double )
     268FLOATING_POINT_FMT_DECL( double )
     269FLOATING_POINT_FMT_DECL( long double )
    258270
    259271// *********************************** character ***********************************
     
    271283forall( ostype & | basic_ostream( ostype ) ) {
    272284        ostype & ?|?( ostype & os, _Ostream_Manip(char) f );
    273         void ?|?( ostype & os, _Ostream_Manip(char) f );
     285        OSTYPE_VOID( _Ostream_Manip(char) ); \
    274286} // ?|?
    275287
     
    289301forall( ostype & | basic_ostream( ostype ) ) {
    290302        ostype & ?|?( ostype & os, _Ostream_Manip(const char *) f );
    291         void ?|?( ostype & os, _Ostream_Manip(const char *) f );
     303        OSTYPE_VOID( _Ostream_Manip(const char *) ); \
    292304} // ?|?
    293305
    294 
    295306// *********************************** istream ***********************************
    296307
     308#define ISTYPE_VOID( T ) void ?|?( istype &, T )
     309#define ISTYPE_VOID_IMPL( T ) \
     310        void ?|?( istype & is, T t ) { \
     311                (istype &)(is | t); ends( is ); \
     312        } // ?|?
    297313
    298314forall( istype & )
     
    300316        // private
    301317        bool getANL$( istype & );                                                       // get scan newline (on/off)
     318        bool setANL$( istype &, bool );                                         // set scan newline (on/off)
    302319        // public
    303320        void nlOn( istype & );                                                          // read newline
     
    325342forall( istype & | basic_istream( istype ) ) {
    326343        istype & ?|?( istype &, bool & );
    327         void ?|?( istype &, bool & );
     344        ISTYPE_VOID( bool & );
    328345
    329346        istype & ?|?( istype &, char & );
    330         void ?|?( istype &, char & );
     347        ISTYPE_VOID( char & );
    331348        istype & ?|?( istype &, signed char & );
    332         void ?|?( istype &, signed char & );
     349        ISTYPE_VOID( signed char & );
    333350        istype & ?|?( istype &, unsigned char & );
    334         void ?|?( istype &, unsigned char & );
     351        ISTYPE_VOID( unsigned char & );
    335352
    336353        istype & ?|?( istype &, short int & );
    337         void ?|?( istype &, short int & );
     354        ISTYPE_VOID( short int & );
    338355        istype & ?|?( istype &, unsigned short int & );
    339         void ?|?( istype &, unsigned short int & );
     356        ISTYPE_VOID( unsigned short int & );
    340357        istype & ?|?( istype &, int & );
    341         void ?|?( istype &, int & );
     358        ISTYPE_VOID( int & );
    342359        istype & ?|?( istype &, unsigned int & );
    343         void ?|?( istype &, unsigned int & );
     360        ISTYPE_VOID( unsigned int & );
    344361        istype & ?|?( istype &, long int & );
    345         void ?|?( istype &, long int & );
     362        ISTYPE_VOID( long int & );
    346363        istype & ?|?( istype &, unsigned long int & );
    347         void ?|?( istype &, unsigned long int & );
     364        ISTYPE_VOID( unsigned long int & );
    348365        istype & ?|?( istype &, long long int & );
    349         void ?|?( istype &, long long int & );
     366        ISTYPE_VOID( long long int & );
    350367        istype & ?|?( istype &, unsigned long long int & );
    351         void ?|?( istype &, unsigned long long int & );
     368        ISTYPE_VOID( unsigned long long int & );
    352369        #if defined( __SIZEOF_INT128__ )
    353370        istype & ?|?( istype &, int128 & );
    354         void ?|?( istype &, int128 & );
     371        ISTYPE_VOID( int128 & );
    355372        istype & ?|?( istype &, unsigned int128 & );
    356         void ?|?( istype &, unsigned int128 & );
     373        ISTYPE_VOID( unsigned int128 & );
    357374        #endif // __SIZEOF_INT128__
    358375
    359376        istype & ?|?( istype &, float & );
    360         void ?|?( istype &, float & );
     377        ISTYPE_VOID( float & );
    361378        istype & ?|?( istype &, double & );
    362         void ?|?( istype &, double & );
     379        ISTYPE_VOID( double & );
    363380        istype & ?|?( istype &, long double & );
    364         void ?|?( istype &, long double & );
     381        ISTYPE_VOID( long double & );
    365382
    366383        istype & ?|?( istype &, float _Complex & );
    367         void ?|?( istype &, float _Complex & );
     384        ISTYPE_VOID( float _Complex & );
    368385        istype & ?|?( istype &, double _Complex & );
    369         void ?|?( istype &, double _Complex & );
     386        ISTYPE_VOID( double _Complex & );
    370387        istype & ?|?( istype &, long double _Complex & );
    371         void ?|?( istype &, long double _Complex & );
     388        ISTYPE_VOID( long double _Complex & );
    372389
    373390//      istype & ?|?( istype &, const char [] );
    374         istype & ?|?( istype &, char [] );
    375         void ?|?( istype &, char [] );
     391//      istype & ?|?( istype &, char [] );
     392//      ISTYPE_VOID( char [] );
    376393
    377394        // manipulators
    378395        istype & ?|?( istype &, istype & (*)( istype & ) );
    379         void ?|?( istype &, istype & (*)( istype & ) );
     396        ISTYPE_VOID( istype & (*)( istype & ) );
    380397        istype & nl( istype & is );
    381398        istype & nlOn( istype & );
     
    383400} // distribution
    384401
     402// *********************************** exceptions ***********************************
     403
     404ExceptionDecl( cstring_length );
     405
    385406// *********************************** manipulators ***********************************
    386407
    387 struct _Istream_Cstr {
    388         char * s;
    389         const char * scanset;
     408struct _Istream_str_base {
     409        union {
     410                const char * scanset;
     411                char delimit[2];
     412        };
    390413        int wd;                                                                                         // width
    391414        union {
     
    394417                        unsigned char ignore:1;                                         // do not change input argument
    395418                        unsigned char inex:1;                                           // include/exclude characters in scanset
     419                        unsigned char delimit:1;                                        // delimit character
     420                        unsigned char rwd:1;                                            // read width
    396421                } flags;
    397422        };
     423}; // _Istream_str_base
     424
     425struct _Istream_Cstr {
     426        char * s;
     427        inline _Istream_str_base;
    398428}; // _Istream_Cstr
    399429
    400430static inline {
    401         _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr){ 0p, scanset, -1, { .all : 0 } }; }
    402         _Istream_Cstr skip( unsigned int n ) { return (_Istream_Cstr){ 0p, 0p, n, { .all : 0 } }; }
    403         _Istream_Cstr incl( const char scanset[], char * s ) { return (_Istream_Cstr){ s, scanset, -1, { .flags.inex : false } }; }
     431        // width must include room for null terminator
     432        _Istream_Cstr wdi( unsigned int wd, char s[] ) { return (_Istream_Cstr)@{ s, { {0p}, wd, {.all : 0} } }; }
     433        // read width does not include null terminator
     434        _Istream_Cstr wdi( unsigned int wd, unsigned int rwd, char s[] ) {
     435                if ( wd <= rwd ) throw (cstring_length){ &cstring_length_vt };
     436                return (_Istream_Cstr)@{ s, { {0p}, rwd, {.flags.rwd : true} } };
     437        }
     438        _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr)@{ 0p, { {scanset}, -1, {.all : 0} } }; }
     439        _Istream_Cstr skip( unsigned int wd ) { return (_Istream_Cstr)@{ 0p, { {0p}, wd, {.all : 0} } }; }
     440        _Istream_Cstr & getline( _Istream_Cstr & fmt, const char delimit = '\n' ) {
     441                fmt.delimit[0] = delimit; fmt.delimit[1] = '\0'; fmt.flags.delimit = true; fmt.flags.inex = true; return fmt; }
    404442        _Istream_Cstr & incl( const char scanset[], _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = false; return fmt; }
    405         _Istream_Cstr excl( const char scanset[], char * s ) { return (_Istream_Cstr){ s, scanset, -1, { .flags.inex : true } }; }
    406443        _Istream_Cstr & excl( const char scanset[], _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = true; return fmt; }
    407         _Istream_Cstr ignore( char s[] ) { return (_Istream_Cstr)@{ s, 0p, -1, { .flags.ignore : true } }; }
     444        _Istream_Cstr ignore( char s[] ) { return (_Istream_Cstr)@{ s, { {0p}, -1, {.flags.ignore : true} } }; }
    408445        _Istream_Cstr & ignore( _Istream_Cstr & fmt ) { fmt.flags.ignore = true; return fmt; }
    409         _Istream_Cstr wdi( unsigned int w, char s[] ) { return (_Istream_Cstr)@{ s, 0p, w, { .all : 0 } }; }
    410         _Istream_Cstr & wdi( unsigned int w, _Istream_Cstr & fmt ) { fmt.wd = w; return fmt; }
    411446} // distribution
    412447forall( istype & | basic_istream( istype ) ) {
    413448        istype & ?|?( istype & is, _Istream_Cstr f );
    414         void ?|?( istype & is, _Istream_Cstr f );
     449        ISTYPE_VOID( _Istream_Cstr );
    415450}
    416451
     
    425460forall( istype & | basic_istream( istype ) ) {
    426461        istype & ?|?( istype & is, _Istream_Char f );
    427         void ?|?( istype & is, _Istream_Char f );
     462        ISTYPE_VOID( _Istream_Char );
    428463}
    429464
     
    435470}; // _Istream_Manip
    436471
    437 #define InputFMTDecl( T ) \
     472#define INPUT_FMT_DECL( T ) \
    438473static inline { \
    439474        _Istream_Manip(T) ignore( const T & val ) { return (_Istream_Manip(T))@{ (T &)val, -1, true }; } \
    440475        _Istream_Manip(T) & ignore( _Istream_Manip(T) & fmt ) { fmt.ignore = true; return fmt; } \
    441         _Istream_Manip(T) wdi( unsigned int w, T & val ) { return (_Istream_Manip(T))@{ val, w, false }; } \
    442         _Istream_Manip(T) & wdi( unsigned int w, _Istream_Manip(T) & fmt ) { fmt.wd = w; return fmt; } \
     476        _Istream_Manip(T) wdi( unsigned int wd, T & val ) { return (_Istream_Manip(T))@{ val, wd, false }; } \
     477        _Istream_Manip(T) & wdi( unsigned int wd, _Istream_Manip(T) & fmt ) { fmt.wd = wd; return fmt; } \
    443478} /* distribution */ \
    444479forall( istype & | basic_istream( istype ) ) { \
    445480        istype & ?|?( istype & is, _Istream_Manip(T) f ); \
    446         void ?|?( istype & is, _Istream_Manip(T) f ); \
     481        ISTYPE_VOID( _Istream_Manip(T) ); \
    447482} // ?|?
    448483
    449 InputFMTDecl( signed char )
    450 InputFMTDecl( unsigned char )
    451 InputFMTDecl( signed short int )
    452 InputFMTDecl( unsigned short int )
    453 InputFMTDecl( signed int )
    454 InputFMTDecl( unsigned int )
    455 InputFMTDecl( signed long int )
    456 InputFMTDecl( unsigned long int )
    457 InputFMTDecl( signed long long int )
    458 InputFMTDecl( unsigned long long int )
    459 
    460 InputFMTDecl( float )
    461 InputFMTDecl( double )
    462 InputFMTDecl( long double )
    463 
    464 InputFMTDecl( float _Complex )
    465 InputFMTDecl( double _Complex )
    466 InputFMTDecl( long double _Complex )
    467 
     484INPUT_FMT_DECL( signed char )
     485INPUT_FMT_DECL( unsigned char )
     486INPUT_FMT_DECL( signed short int )
     487INPUT_FMT_DECL( unsigned short int )
     488INPUT_FMT_DECL( signed int )
     489INPUT_FMT_DECL( unsigned int )
     490INPUT_FMT_DECL( signed long int )
     491INPUT_FMT_DECL( unsigned long int )
     492INPUT_FMT_DECL( signed long long int )
     493INPUT_FMT_DECL( unsigned long long int )
     494
     495INPUT_FMT_DECL( float )
     496INPUT_FMT_DECL( double )
     497INPUT_FMT_DECL( long double )
     498
     499INPUT_FMT_DECL( float _Complex )
     500INPUT_FMT_DECL( double _Complex )
     501INPUT_FMT_DECL( long double _Complex )
    468502
    469503// *********************************** time ***********************************
    470 
    471504
    472505#include <time_t.hfa>                                                                   // Duration (constructors) / Time (constructors)
     
    474507forall( ostype & | ostream( ostype ) ) {
    475508        ostype & ?|?( ostype & os, Duration dur );
    476         void ?|?( ostype & os, Duration dur );
     509        OSTYPE_VOID( Duration );
    477510        ostype & ?|?( ostype & os, Time time );
    478         void ?|?( ostype & os, Time time );
     511        OSTYPE_VOID( Time );
    479512} // distribution
    480513
Note: See TracChangeset for help on using the changeset viewer.