Changeset 90c3b1c for src/libcfa/iostream.c
- Timestamp:
- Mar 2, 2016, 4:59:19 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- bdad1679
- Parents:
- ac1ed49
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/iostream.c
rac1ed49 r90c3b1c 7 7 // iostream.c -- 8 8 // 9 // Author : Richard C. Bilson9 // Author : Peter A. Buhr 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 17 14:19:56201613 // Update Count : 7612 // Last Modified On : Wed Mar 2 16:20:57 2016 13 // Update Count : 207 14 14 // 15 15 … … 21 21 #include <float.h> // DBL_DIG, LDBL_DIG 22 22 #include <complex.h> // creal, cimag 23 #include <ctype.h> // isspace, ispunct 23 24 } 24 25 25 26 forall( dtype ostype | ostream( ostype ) ) 26 27 ostype * ?|?( ostype *os, char c ) { 27 return write( os, &c, 1 ); 28 prtfmt( os, "%c", c ); 29 return os; 30 } // ?|? 31 32 forall( dtype ostype | ostream( ostype ) ) 33 ostype * ?|?( ostype *os, short int si ) { 34 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 35 prtfmt( os, "%hd", si ); 36 return os; 37 } // ?|? 38 39 forall( dtype ostype | ostream( ostype ) ) 40 ostype * ?|?( ostype *os, unsigned short int usi ) { 41 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 42 prtfmt( os, "%hu", usi ); 43 return os; 28 44 } // ?|? 29 45 30 46 forall( dtype ostype | ostream( ostype ) ) 31 47 ostype * ?|?( ostype *os, int i ) { 32 char buffer[32]; 33 return write( os, buffer, sprintf( buffer, "%d", i ) ); 34 } // ?|? 35 36 forall( dtype ostype | ostream( ostype ) ) 37 ostype * ?|?( ostype *os, unsigned int i ) { 38 char buffer[32]; 39 return write( os, buffer, sprintf( buffer, "%u", i ) ); 40 } // ?|? 41 42 forall( dtype ostype | ostream( ostype ) ) 43 ostype * ?|?( ostype *os, long int i ) { 44 char buffer[32]; 45 return write( os, buffer, sprintf( buffer, "%ld", i ) ); 46 } // ?|? 47 48 forall( dtype ostype | ostream( ostype ) ) 49 ostype * ?|?( ostype *os, long long int i ) { 50 char buffer[32]; 51 return write( os, buffer, sprintf( buffer, "%lld", i ) ); 52 } // ?|? 53 54 forall( dtype ostype | ostream( ostype ) ) 55 ostype * ?|?( ostype *os, unsigned long int i ) { 56 char buffer[32]; 57 return write( os, buffer, sprintf( buffer, "%lu", i ) ); 58 } // ?|? 59 60 forall( dtype ostype | ostream( ostype ) ) 61 ostype * ?|?( ostype *os, unsigned long long int i ) { 62 char buffer[32]; 63 return write( os, buffer, sprintf( buffer, "%llu", i ) ); 48 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 49 prtfmt( os, "%d", i ); 50 return os; 51 } // ?|? 52 53 forall( dtype ostype | ostream( ostype ) ) 54 ostype * ?|?( ostype *os, unsigned int ui ) { 55 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 56 prtfmt( os, "%u", ui ); 57 return os; 58 } // ?|? 59 60 forall( dtype ostype | ostream( ostype ) ) 61 ostype * ?|?( ostype *os, long int li ) { 62 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 63 prtfmt( os, "%ld", li ); 64 return os; 65 } // ?|? 66 67 forall( dtype ostype | ostream( ostype ) ) 68 ostype * ?|?( ostype *os, unsigned long int uli ) { 69 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 70 prtfmt( os, "%lu", uli ); 71 return os; 72 } // ?|? 73 74 forall( dtype ostype | ostream( ostype ) ) 75 ostype * ?|?( ostype *os, long long int lli ) { 76 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 77 prtfmt( os, "%lld", lli ); 78 return os; 79 } // ?|? 80 81 forall( dtype ostype | ostream( ostype ) ) 82 ostype * ?|?( ostype *os, unsigned long long int ulli ) { 83 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 84 prtfmt( os, "%llu", ulli ); 85 return os; 64 86 } // ?|? 65 87 66 88 forall( dtype ostype | ostream( ostype ) ) 67 89 ostype * ?|?( ostype *os, float f ) { 68 char buffer[32]; 69 return write( os, buffer, sprintf( buffer, "%g", f ) ); 90 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 91 prtfmt( os, "%g", f ); 92 return os; 70 93 } // ?|? 71 94 72 95 forall( dtype ostype | ostream( ostype ) ) 73 96 ostype * ?|?( ostype *os, double d ) { 74 char buffer[32]; 75 return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) ); 76 } // ?|? 77 78 forall( dtype ostype | ostream( ostype ) ) 79 ostype * ?|?( ostype *os, long double d ) { 80 char buffer[32]; 81 return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) ); 82 } // ?|? 83 84 forall( dtype ostype | ostream( ostype ) ) 85 ostype * ?|?( ostype *os, float _Complex c ) { 86 return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i'; 87 } // ?|? 88 89 forall( dtype ostype | ostream( ostype ) ) 90 ostype * ?|?( ostype *os, double _Complex c ) { 91 return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i'; 92 } // ?|? 93 94 forall( dtype ostype | ostream( ostype ) ) 95 ostype * ?|?( ostype *os, long double _Complex c ) { 96 return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i'; 97 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 98 prtfmt( os, "%.*lg", DBL_DIG, d ); 99 return os; 100 } // ?|? 101 102 forall( dtype ostype | ostream( ostype ) ) 103 ostype * ?|?( ostype *os, long double ld ) { 104 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 105 prtfmt( os, "%.*Lg", LDBL_DIG, ld ); 106 return os; 107 } // ?|? 108 109 forall( dtype ostype | ostream( ostype ) ) 110 ostype * ?|?( ostype *os, float _Complex fc ) { 111 os | crealf( fc ); 112 if ( cimagf( fc ) >= 0 ) os | '+'; 113 os | "" | cimagf( fc ) | 'i'; 114 return os; 115 } // ?|? 116 117 forall( dtype ostype | ostream( ostype ) ) 118 ostype * ?|?( ostype *os, double _Complex dc ) { 119 os | creal( dc ); 120 if ( cimag( dc ) >= 0 ) os | '+'; 121 os | "" | cimag( dc ) | 'i'; 122 return os; 123 } // ?|? 124 125 forall( dtype ostype | ostream( ostype ) ) 126 ostype * ?|?( ostype *os, long double _Complex ldc ) { 127 os | creall( ldc ); 128 if ( cimagl( ldc ) >= 0 ) os | '+'; 129 os | "" | cimagl( ldc ) | 'i'; 130 return os; 131 } // ?|? 132 133 forall( dtype ostype | ostream( ostype ) ) 134 ostype * ?|?( ostype *os, const char *cp ) { 135 int len = strlen( cp ); 136 // null string => no separator 137 if ( len == 0 ) { sepOff( os ); return os; } 138 // first character NOT spacing or special punctuation => add left separator 139 if ( sepPrt( os ) && isspace( cp[0] ) == 0 && cp[0] != '.' && cp[0] != ',' ) { 140 prtfmt( os, "%s", sepGet( os ) ); 141 } // if 142 // last character is spacing or special punctuation => turn off separator for next item 143 unsigned int posn = len - 1; 144 if ( isspace( cp[posn] ) || cp[posn] == ':' || cp[posn] == '$' ) { 145 sepOff( os ); 146 } else { 147 sepOn( os ); 148 } // if 149 return write( os, cp, len ); 97 150 } // ?|? 98 151 99 152 forall( dtype ostype | ostream( ostype ) ) 100 153 ostype * ?|?( ostype *os, const void *p ) { 101 char buffer[32]; 102 return write( os, buffer, sprintf( buffer, "%p", p ) ); 103 } // ?|? 104 105 forall( dtype ostype | ostream( ostype ) ) 106 ostype * ?|?( ostype *os, const char *cp ) { 107 return write( os, cp, strlen( cp ) ); 108 } // ?|? 109 110 111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) { 113 return manip( os ); 114 } 154 if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os ); 155 prtfmt( os, "%p", p ); 156 return os; 157 } // ?|? 158 159 160 forall( dtype ostype | ostream( ostype ) ) 161 ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) { 162 return manip( os ); 163 } // ?|? 115 164 116 165 forall( dtype ostype | ostream( ostype ) ) 117 166 ostype * endl( ostype * os ) { 118 os | "\n";167 os | '\n'; 119 168 flush( os ); 169 sepOff( os ); 120 170 return os; 121 171 } // endl 122 172 173 forall( dtype ostype | ostream( ostype ) ) 174 ostype * sepOn( ostype * os ) { 175 sepOn( os ); 176 return os; 177 } // sepOn 178 179 forall( dtype ostype | ostream( ostype ) ) 180 ostype * sepOff( ostype * os ) { 181 sepOff( os ); 182 return os; 183 } // sepOff 184 123 185 //--------------------------------------- 124 186 125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 126 dtype os_type | ostream( os_type ) ) 127 void write( iterator_type begin, iterator_type end, os_type *os ) { 128 void print( elt_type i ) { os | i | ' '; } 187 forall( type elttype | writeable( elttype ), type iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 188 void write( iteratortype begin, iteratortype end, ostype *os ) { 189 void print( elttype i ) { os | i; } 129 190 for_each( begin, end, print ); 130 191 } // ?|? 131 192 132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 133 dtype os_type | ostream( os_type ) ) 134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) { 135 void print( elt_type i ) { os | i | ' '; } 193 forall( type elttype | writeable( elttype ), type iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) ) 194 void write_reverse( iteratortype begin, iteratortype end, ostype *os ) { 195 void print( elttype i ) { os | i; } 136 196 for_each_reverse( begin, end, print ); 137 197 } // ?|? … … 140 200 141 201 forall( dtype istype | istream( istype ) ) 142 istype * ?|?( istype *is, char *cp ) { 143 return read( is, cp, 1 ); 144 } // ?|? 145 146 forall( dtype istype | istream( istype ) ) 147 istype * ?|?( istype *is, int *ip ) { 148 return get( is, ip ); 149 } // ?|? 202 istype * ?|?( istype * is, char * c ) { 203 scanfmt( is, "%c", c ); 204 return is; 205 } // ?|? 206 207 forall( dtype istype | istream( istype ) ) 208 istype * ?|?( istype * is, short int * si ) { 209 scanfmt( is, "%hd", si ); 210 return is; 211 } // ?|? 212 213 forall( dtype istype | istream( istype ) ) 214 istype * ?|?( istype * is, unsigned short int * usi ) { 215 scanfmt( is, "%hu", usi ); 216 return is; 217 } // ?|? 218 219 forall( dtype istype | istream( istype ) ) 220 istype * ?|?( istype * is, int * i ) { 221 scanfmt( is, "%d", i ); 222 return is; 223 } // ?|? 224 225 forall( dtype istype | istream( istype ) ) 226 istype * ?|?( istype * is, unsigned int * ui ) { 227 scanfmt( is, "%u", ui ); 228 return is; 229 } // ?|? 230 231 forall( dtype istype | istream( istype ) ) 232 istype * ?|?( istype * is, long int * li ) { 233 scanfmt( is, "%ld", li ); 234 return is; 235 } // ?|? 236 237 forall( dtype istype | istream( istype ) ) 238 istype * ?|?( istype * is, unsigned long int * ulli ) { 239 scanfmt( is, "%lu", ulli ); 240 return is; 241 } // ?|? 242 243 forall( dtype istype | istream( istype ) ) 244 istype * ?|?( istype * is, long long int * lli ) { 245 scanfmt( is, "%lld", lli ); 246 return is; 247 } // ?|? 248 249 forall( dtype istype | istream( istype ) ) 250 istype * ?|?( istype * is, unsigned long long int * ulli ) { 251 scanfmt( is, "%llu", ulli ); 252 return is; 253 } // ?|? 254 255 256 forall( dtype istype | istream( istype ) ) 257 istype * ?|?( istype * is, float * f ) { 258 scanfmt( is, "%f", f ); 259 return is; 260 } // ?|? 261 262 forall( dtype istype | istream( istype ) ) 263 istype * ?|?( istype * is, double * d ) { 264 scanfmt( is, "%lf", d ); 265 return is; 266 } // ?|? 267 268 forall( dtype istype | istream( istype ) ) 269 istype * ?|?( istype * is, long double * ld ) { 270 scanfmt( is, "%Lf", ld ); 271 return is; 272 } // ?|? 273 274 275 forall( dtype istype | istream( istype ) ) 276 istype * ?|?( istype * is, float _Complex * fc ) { 277 float re, im; 278 scanfmt( is, "%g%gi", &re, &im ); 279 *fc = re + im * _Complex_I; 280 return is; 281 } // ?|? 282 283 forall( dtype istype | istream( istype ) ) 284 istype * ?|?( istype * is, double _Complex * dc ) { 285 double re, im; 286 scanfmt( is, "%lf%lfi", &re, &im ); 287 *dc = re + im * _Complex_I; 288 return is; 289 } // ?|? 290 291 forall( dtype istype | istream( istype ) ) 292 istype * ?|?( istype * is, long double _Complex * ldc ) { 293 long double re, im; 294 scanfmt( is, "%Lf%Lfi", &re, &im ); 295 *ldc = re + im * _Complex_I; 296 return is; 297 } // ?|? 298 299 _Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; } 300 forall( dtype istype | istream( istype ) ) 301 istype * ?|?( istype * is, _Istream_str1 str ) { 302 scanfmt( is, "%s", str.s ); 303 return is; 304 } // str 305 306 _Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; } 307 forall( dtype istype | istream( istype ) ) 308 istype * ?|?( istype * is, _Istream_str2 str ) { 309 char buf[16]; 310 sprintf( buf, "%%%ds", str.size ); 311 scanfmt( is, buf, str.s ); 312 return is; 313 } // str 150 314 151 315 // Local Variables: //
Note: See TracChangeset
for help on using the changeset viewer.