Changeset adaee12 for libcfa/src/iostream.hfa
- Timestamp:
- Apr 28, 2021, 1:06:13 PM (5 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- b7fd2db6
- Parents:
- e9c0b4c (diff), c7015e6b (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. - File:
-
- 1 edited
-
libcfa/src/iostream.hfa (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/iostream.hfa
re9c0b4c radaee12 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Apr 24 09:28:56202113 // Update Count : 39 312 // Last Modified On : Tue Apr 27 17:59:21 2021 13 // Update Count : 398 14 14 // 15 15 … … 49 49 void ends( ostype & ); // end of output statement 50 50 int fmt( ostype &, const char format[], ... ) __attribute__(( format(printf, 2, 3) )); 51 int flush( ostype & );52 51 }; // basic_ostream 53 52 54 53 trait ostream( ostype & | basic_ostream( ostype ) ) { 54 int flush( ostype & ); 55 55 bool fail( ostype & ); // operation failed? 56 56 void open( ostype &, const char name[], const char mode[] ); … … 97 97 ostype & ?|?( ostype &, unsigned long long int ); 98 98 void ?|?( ostype &, unsigned long long int ); 99 #if defined( __SIZEOF_INT128__ )99 #if defined( __SIZEOF_INT128__ ) 100 100 ostype & ?|?( ostype &, int128 ); 101 101 void ?|?( ostype &, int128 ); 102 102 ostype & ?|?( ostype &, unsigned int128 ); 103 103 void ?|?( ostype &, unsigned int128 ); 104 #endif // __SIZEOF_INT128__104 #endif // __SIZEOF_INT128__ 105 105 106 106 ostype & ?|?( ostype &, float ); … … 121 121 void ?|?( ostype &, const char [] ); 122 122 // ostype & ?|?( ostype &, const char16_t * ); 123 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous123 #if ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) // char32_t == wchar_t => ambiguous 124 124 // ostype & ?|?( ostype &, const char32_t * ); 125 #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 )125 #endif // ! ( __ARM_ARCH_ISA_ARM == 1 && __ARM_32BIT_STATE == 1 ) 126 126 // ostype & ?|?( ostype &, const wchar_t * ); 127 127 ostype & ?|?( ostype &, const void * ); … … 164 164 struct _Ostream_Manip { 165 165 T val; // polymorphic base-type 166 int wd, pc; // width, precision 166 int wd, pc; // width, precision: signed for computations 167 167 char base; // numeric base / floating-point style 168 168 union { … … 192 192 _Ostream_Manip(T) hex( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'x', { .all : 0 } }; } \ 193 193 _Ostream_Manip(T) wd( unsigned int w, T val ) { return (_Ostream_Manip(T))@{ val, w, 0, CODE, { .all : 0 } }; } \ 194 _Ostream_Manip(T) wd( unsigned int w, unsigned charpc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, CODE, { .flags.pc : true } }; } \194 _Ostream_Manip(T) wd( unsigned int w, unsigned int pc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, CODE, { .flags.pc : true } }; } \ 195 195 _Ostream_Manip(T) & wd( unsigned int w, _Ostream_Manip(T) & fmt ) { fmt.wd = w; return fmt; } \ 196 _Ostream_Manip(T) & wd( unsigned int w, unsigned charpc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \196 _Ostream_Manip(T) & wd( unsigned int w, unsigned int pc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \ 197 197 _Ostream_Manip(T) & left( _Ostream_Manip(T) & fmt ) { fmt.flags.left = true; return fmt; } \ 198 198 _Ostream_Manip(T) & upcase( _Ostream_Manip(T) & fmt ) { if ( fmt.base == 'x' || fmt.base == 'b' ) fmt.base -= 32; /* upper case */ return fmt; } \ … … 231 231 _Ostream_Manip(T) eng( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'g', { .flags.eng : true } }; } \ 232 232 _Ostream_Manip(T) wd( unsigned int w, T val ) { return (_Ostream_Manip(T))@{ val, w, 0, 'g', { .all : 0 } }; } \ 233 _Ostream_Manip(T) wd( unsigned int w, unsigned charpc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'f', { .flags.pc : true } }; } \234 _Ostream_Manip(T) ws( unsigned int w, unsigned charpc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'g', { .flags.pc : true } }; } \233 _Ostream_Manip(T) wd( unsigned int w, unsigned int pc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'f', { .flags.pc : true } }; } \ 234 _Ostream_Manip(T) ws( unsigned int w, unsigned int pc, T val ) { return (_Ostream_Manip(T))@{ val, w, pc, 'g', { .flags.pc : true } }; } \ 235 235 _Ostream_Manip(T) & wd( unsigned int w, _Ostream_Manip(T) & fmt ) { if ( fmt.flags.eng ) fmt.base = 'f'; fmt.wd = w; return fmt; } \ 236 _Ostream_Manip(T) & wd( unsigned int w, unsigned charpc, _Ostream_Manip(T) & fmt ) { if ( fmt.flags.eng ) fmt.base = 'f'; fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \237 _Ostream_Manip(T) & ws( unsigned int w, unsigned charpc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \236 _Ostream_Manip(T) & wd( unsigned int w, unsigned int pc, _Ostream_Manip(T) & fmt ) { if ( fmt.flags.eng ) fmt.base = 'f'; fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \ 237 _Ostream_Manip(T) & ws( unsigned int w, unsigned int pc, _Ostream_Manip(T) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } \ 238 238 _Ostream_Manip(T) & left( _Ostream_Manip(T) & fmt ) { fmt.flags.left = true; return fmt; } \ 239 239 _Ostream_Manip(T) upcase( T val ) { return (_Ostream_Manip(T))@{ val, 1, 0, 'G', { .all : 0 } }; } \ … … 279 279 _Ostream_Manip(const char *) hex( const char s[] ) { return (_Ostream_Manip(const char *))@{ s, 1, 0, 'x', { .all : 0 } }; } 280 280 _Ostream_Manip(const char *) wd( unsigned int w, const char s[] ) { return (_Ostream_Manip(const char *))@{ s, w, 0, 's', { .all : 0 } }; } 281 _Ostream_Manip(const char *) wd( unsigned int w, unsigned charpc, const char s[] ) { return (_Ostream_Manip(const char *))@{ s, w, pc, 's', { .flags.pc : true } }; }281 _Ostream_Manip(const char *) wd( unsigned int w, unsigned int pc, const char s[] ) { return (_Ostream_Manip(const char *))@{ s, w, pc, 's', { .flags.pc : true } }; } 282 282 _Ostream_Manip(const char *) & wd( unsigned int w, _Ostream_Manip(const char *) & fmt ) { fmt.wd = w; return fmt; } 283 _Ostream_Manip(const char *) & wd( unsigned int w, unsigned charpc, _Ostream_Manip(const char *) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; }283 _Ostream_Manip(const char *) & wd( unsigned int w, unsigned int pc, _Ostream_Manip(const char *) & fmt ) { fmt.wd = w; fmt.pc = pc; fmt.flags.pc = true; return fmt; } 284 284 _Ostream_Manip(const char *) & left( _Ostream_Manip(const char *) & fmt ) { fmt.flags.left = true; return fmt; } 285 285 _Ostream_Manip(const char *) & nobase( _Ostream_Manip(const char *) & fmt ) { fmt.flags.nobsdp = true; return fmt; } … … 294 294 295 295 296 trait istream( istype & ) { 296 trait basic_istream( istype & ) { 297 bool getANL( istype & ); // get scan newline (on/off) 297 298 void nlOn( istype & ); // read newline 298 299 void nlOff( istype & ); // scan newline 299 bool getANL( istype & ); // get scan newline (on/off)300 300 301 301 void ends( istype & os ); // end of output statement 302 int fmt( istype &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) )); 303 istype & ungetc( istype &, char ); 304 int eof( istype & ); 305 }; // basic_istream 306 307 trait istream( istype & | basic_istream( istype ) ) { 302 308 bool fail( istype & ); 303 int eof( istype & );304 309 void open( istype & is, const char name[] ); 305 310 void close( istype & is ); 306 311 istype & read( istype &, char *, size_t ); 307 istype & ungetc( istype &, char ); 308 int fmt( istype &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) )); 309 void acquire( istype & ); 312 void acquire( istype & ); // concurrent access 310 313 }; // istream 311 314 … … 314 317 }; // readable 315 318 316 forall( istype & | istream( istype ) ) {319 forall( istype & | basic_istream( istype ) ) { 317 320 istype & ?|?( istype &, bool & ); 318 321 void ?|?( istype &, bool & ); … … 341 344 istype & ?|?( istype &, unsigned long long int & ); 342 345 void ?|?( istype &, unsigned long long int & ); 343 #if defined( __SIZEOF_INT128__ )346 #if defined( __SIZEOF_INT128__ ) 344 347 istype & ?|?( istype &, int128 & ); 345 348 void ?|?( istype &, int128 & ); 346 349 istype & ?|?( istype &, unsigned int128 & ); 347 350 void ?|?( istype &, unsigned int128 & ); 348 #endif // __SIZEOF_INT128__351 #endif // __SIZEOF_INT128__ 349 352 350 353 istype & ?|?( istype &, float & ); … … 372 375 istype & nlOn( istype & ); 373 376 istype & nlOff( istype & ); 377 } // distribution 378 379 forall( istype & | istream( istype ) ) { 374 380 istype & acquire( istype & ); 375 381 } // distribution … … 391 397 392 398 static inline { 399 _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr){ 0p, scanset, -1, { .all : 0 } }; } 393 400 _Istream_Cstr skip( unsigned int n ) { return (_Istream_Cstr){ 0p, 0p, n, { .all : 0 } }; } 394 _Istream_Cstr skip( const char scanset[] ) { return (_Istream_Cstr){ 0p, scanset, -1, { .all : 0 } }; }395 401 _Istream_Cstr incl( const char scanset[], char * s ) { return (_Istream_Cstr){ s, scanset, -1, { .flags.inex : false } }; } 396 402 _Istream_Cstr & incl( const char scanset[], _Istream_Cstr & fmt ) { fmt.scanset = scanset; fmt.flags.inex = false; return fmt; } … … 402 408 _Istream_Cstr & wdi( unsigned int w, _Istream_Cstr & fmt ) { fmt.wd = w; return fmt; } 403 409 } // distribution 404 forall( istype & | istream( istype ) ) {410 forall( istype & | basic_istream( istype ) ) { 405 411 istype & ?|?( istype & is, _Istream_Cstr f ); 406 412 void ?|?( istype & is, _Istream_Cstr f ); … … 415 421 _Istream_Char & ignore( _Istream_Char & fmt ) { fmt.ignore = true; return fmt; } 416 422 } // distribution 417 forall( istype & | istream( istype ) ) {423 forall( istype & | basic_istream( istype ) ) { 418 424 istype & ?|?( istype & is, _Istream_Char f ); 419 425 void ?|?( istype & is, _Istream_Char f ); … … 434 440 _Istream_Manip(T) & wdi( unsigned int w, _Istream_Manip(T) & fmt ) { fmt.wd = w; return fmt; } \ 435 441 } /* distribution */ \ 436 forall( istype & | istream( istype ) ) { \442 forall( istype & | basic_istream( istype ) ) { \ 437 443 istype & ?|?( istype & is, _Istream_Manip(T) f ); \ 438 444 void ?|?( istype & is, _Istream_Manip(T) f ); \
Note:
See TracChangeset
for help on using the changeset viewer.