Changeset 09687aa for src/libcfa/iostream
- Timestamp:
- Dec 7, 2017, 1:10:51 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 5e1adb5
- Parents:
- 92494fd
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/iostream
r92494fd r09687aa 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Oct 10 14:51:10 201713 // Update Count : 14 012 // Last Modified On : Wed Dec 6 23:03:30 2017 13 // Update Count : 144 14 14 // 15 15 … … 20 20 trait ostream( dtype ostype ) { 21 21 // private 22 _Bool sepPrt( ostype *); // return separator state (on/off)23 void sepReset( ostype *); // set separator state to default state24 void sepReset( ostype *, _Bool ); // set separator and default state25 const char * sepGetCur( ostype *); // get current separator string26 void sepSetCur( ostype *, const char * ); // set current separator string27 _Bool getNL( ostype *); // check newline28 void setNL( ostype *, _Bool ); // saw newline22 _Bool sepPrt( ostype & ); // return separator state (on/off) 23 void sepReset( ostype & ); // set separator state to default state 24 void sepReset( ostype &, _Bool ); // set separator and default state 25 const char * sepGetCur( ostype & ); // get current separator string 26 void sepSetCur( ostype &, const char * ); // set current separator string 27 _Bool getNL( ostype & ); // check newline 28 void setNL( ostype &, _Bool ); // saw newline 29 29 // public 30 void sepOn( ostype *); // turn separator state on31 void sepOff( ostype *); // turn separator state off32 _Bool sepDisable( ostype *); // set default state to off, and return previous state33 _Bool sepEnable( ostype *); // set default state to on, and return previous state30 void sepOn( ostype & ); // turn separator state on 31 void sepOff( ostype & ); // turn separator state off 32 _Bool sepDisable( ostype & ); // set default state to off, and return previous state 33 _Bool sepEnable( ostype & ); // set default state to on, and return previous state 34 34 35 const char * sepGet( ostype *); // get separator string36 void sepSet( ostype *, const char * ); // set separator to string (15 character maximum)37 const char * sepGetTuple( ostype *); // get tuple separator string38 void sepSetTuple( ostype *, const char * ); // set tuple separator to string (15 character maximum)35 const char * sepGet( ostype & ); // get separator string 36 void sepSet( ostype &, const char * ); // set separator to string (15 character maximum) 37 const char * sepGetTuple( ostype & ); // get tuple separator string 38 void sepSetTuple( ostype &, const char * ); // set tuple separator to string (15 character maximum) 39 39 40 int fail( ostype *);41 int flush( ostype *);42 void open( ostype *os, const char * name, const char * mode );43 void close( ostype *os );44 ostype * write( ostype *, const char *, unsigned long int );45 int fmt( ostype *, const char fmt[], ... );40 int fail( ostype & ); 41 int flush( ostype & ); 42 void open( ostype & os, const char * name, const char * mode ); 43 void close( ostype & os ); 44 ostype & write( ostype &, const char *, unsigned long int ); 45 int fmt( ostype &, const char fmt[], ... ); 46 46 }; // ostream 47 47 48 48 // trait writeable( otype T ) { 49 // forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );49 // forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, T ); 50 50 // }; // writeable 51 51 52 52 trait writeable( otype T, dtype ostype | ostream( ostype ) ) { 53 ostype * ?|?( ostype *, T );53 ostype & ?|?( ostype &, T ); 54 54 }; // writeable 55 55 56 56 // implement writable for intrinsic types 57 57 58 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );59 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, signed char );60 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned char );58 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, char ); 59 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, signed char ); 60 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned char ); 61 61 62 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );63 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );64 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );65 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );66 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long int );67 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long long int );68 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );69 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );62 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, short int ); 63 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned short int ); 64 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, int ); 65 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned int ); 66 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long int ); 67 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long long int ); 68 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long int ); 69 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, unsigned long long int ); 70 70 71 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required72 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );73 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );71 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float ); // FIX ME: should not be required 72 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double ); 73 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double ); 74 74 75 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );76 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );77 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );75 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, float _Complex ); 76 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, double _Complex ); 77 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, long double _Complex ); 78 78 79 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );80 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char16_t * );79 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char * ); 80 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char16_t * ); 81 81 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous 82 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char32_t * );82 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const char32_t * ); 83 83 #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) 84 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const wchar_t * );85 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );84 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const wchar_t * ); 85 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, const void * ); 86 86 87 87 // tuples 88 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype * ?|?( ostype *, Params ); } )89 ostype * ?|?( ostype *os, T arg, Params rest );88 forall( dtype ostype, otype T, ttype Params | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) 89 ostype & ?|?( ostype & os, T arg, Params rest ); 90 90 91 91 // manipulators 92 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype *) );93 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype *);94 forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype *);95 forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype *);96 forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype *);97 forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype *);98 forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype *);99 forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype *);92 forall( dtype ostype | ostream( ostype ) ) ostype & ?|?( ostype &, ostype & (*)( ostype & ) ); 93 forall( dtype ostype | ostream( ostype ) ) ostype & endl( ostype & ); 94 forall( dtype ostype | ostream( ostype ) ) ostype & sep( ostype & ); 95 forall( dtype ostype | ostream( ostype ) ) ostype & sepTuple( ostype & ); 96 forall( dtype ostype | ostream( ostype ) ) ostype & sepOn( ostype & ); 97 forall( dtype ostype | ostream( ostype ) ) ostype & sepOff( ostype & ); 98 forall( dtype ostype | ostream( ostype ) ) ostype & sepDisable( ostype & ); 99 forall( dtype ostype | ostream( ostype ) ) ostype & sepEnable( ostype & ); 100 100 101 101 // writes the range [begin, end) to the given stream 102 102 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) ) 103 void write( iterator_type begin, iterator_type end, ostype *os );103 void write( iterator_type begin, iterator_type end, ostype & os ); 104 104 105 105 forall( dtype ostype, otype elt_type | writeable( elt_type, ostype ), otype iterator_type | iterator( iterator_type, elt_type ) ) 106 void write_reverse( iterator_type begin, iterator_type end, ostype *os );106 void write_reverse( iterator_type begin, iterator_type end, ostype & os ); 107 107 108 108 //--------------------------------------- 109 109 110 110 trait istream( dtype istype ) { 111 int fail( istype *);112 int eof( istype *);113 void open( istype * is, const char * name, const char * mode );114 void close( istype *is );115 istype * read( istype *, char *, unsigned long int );116 istype * ungetc( istype *, char );117 int fmt( istype *, const char fmt[], ... );111 int fail( istype & ); 112 int eof( istype & ); 113 void open( istype & is, const char * name ); 114 void close( istype & is ); 115 istype & read( istype &, char *, unsigned long int ); 116 istype & ungetc( istype &, char ); 117 int fmt( istype &, const char fmt[], ... ); 118 118 }; // istream 119 119 120 120 trait readable( otype T ) { 121 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );121 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, T ); 122 122 }; // readable 123 123 124 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char & );125 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, signed char & );126 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned char & );124 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, char & ); 125 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, signed char & ); 126 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned char & ); 127 127 128 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int & );129 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int & );130 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int & );131 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int & );132 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int & );133 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int & );134 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int & );135 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int & );128 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, short int & ); 129 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned short int & ); 130 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, int & ); 131 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned int & ); 132 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long int & ); 133 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long long int & ); 134 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long int & ); 135 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, unsigned long long int & ); 136 136 137 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float & );138 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double & );139 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double & );137 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float & ); 138 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double & ); 139 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double & ); 140 140 141 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex & );142 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex & );143 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex & );141 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, float _Complex & ); 142 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, double _Complex & ); 143 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, long double _Complex & ); 144 144 145 145 struct _Istream_cstrUC { char * s; }; 146 146 _Istream_cstrUC cstr( char * ); 147 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );147 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_cstrUC ); 148 148 149 149 struct _Istream_cstrC { char * s; int size; }; 150 150 _Istream_cstrC cstr( char *, int size ); 151 forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );151 forall( dtype istype | istream( istype ) ) istype & ?|?( istype &, _Istream_cstrC ); 152 152 153 153 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.