Changes in / [7b84d3e:2ad5e1d5]
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/string.cfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Oct 18 21:52:09202313 // Update Count : 20 812 // Last Modified On : Sat Sep 2 12:05:57 2023 13 // Update Count : 206 14 14 // 15 15 … … 138 138 139 139 void ?|?( ifstream & in, _Istream_Sstr f ) { 140 (ifstream &)(in | f); 140 (ifstream &)(in | f); ends( in ); 141 141 } 142 142 -
libcfa/src/collections/string_res.cfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Fri Sep 03 11:00:00 2021 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Oct 18 21:54:54202313 // Update Count : 1 512 // Last Modified On : Mon Aug 14 18:06:01 2023 13 // Update Count : 12 14 14 // 15 15 … … 253 253 254 254 void ?|?( ifstream & in, string_res & this ) { 255 (ifstream &)(in | this); 255 (ifstream &)(in | this); ends( in ); 256 256 } 257 257 … … 297 297 298 298 void ?|?( ifstream & in, _Istream_Rstr f ) { 299 (ifstream &)(in | f); 299 (ifstream &)(in | f); ends( in ); 300 300 } 301 301 -
libcfa/src/fstream.cfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Oct 18 22:05:54202313 // Update Count : 54 912 // Last Modified On : Fri Aug 18 10:41:17 2023 13 // Update Count : 541 14 14 // 15 15 … … 230 230 void nlOff( ifstream & os ) { os.nlOnOff$ = false; } 231 231 232 void ends( ifstream & is ) {} 233 232 234 bool eof( ifstream & is ) { return feof( (FILE *)(is.file$) ) != 0; } 233 235 … … 309 311 } // if 310 312 va_end( args ); 311 // if ( len == 0 ) throw ExceptionInst( missing_data );312 313 return len; 313 314 } // fmt -
libcfa/src/fstream.hfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Oct 18 20:30:12202313 // Update Count : 2 6112 // Last Modified On : Fri Aug 18 10:41:15 2023 13 // Update Count : 258 14 14 // 15 15 … … 117 117 void nlOn( ifstream & ); 118 118 void nlOff( ifstream & ); 119 void ends( ifstream & ); 119 120 int fmt( ifstream &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) )); 120 ifstream & ungetc( ifstream & is, char c );121 bool eof( ifstream & is );122 121 123 122 bool fail( ifstream & is ); 124 123 void clear( ifstream & ); 124 bool eof( ifstream & is ); 125 125 void open( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r" 126 126 void open( ifstream & is, const char name[] ); 127 127 void close( ifstream & is ); 128 128 129 ifstream & read( ifstream & is, char data[], size_t size ); 130 ifstream & ungetc( ifstream & is, char c ); 129 131 130 132 void ?{}( ifstream & is ); -
libcfa/src/iostream.cfa
r7b84d3e r2ad5e1d5 1 1 2 // 2 3 // Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo … … 10 11 // Created On : Wed May 27 17:56:53 2015 11 12 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Oct 19 21:10:10202313 // Update Count : 1 80113 // Last Modified On : Sun Oct 8 12:10:21 2023 14 // Update Count : 1564 14 15 // 15 16 … … 784 785 return is; 785 786 } // ?|? 787 ISTYPE_VOID_IMPL( bool & ) 786 788 787 789 istype & ?|?( istype & is, char & c ) { … … 795 797 return is; 796 798 } // ?|? 799 ISTYPE_VOID_IMPL( char & ) 797 800 798 801 istype & ?|?( istype & is, signed char & sc ) { … … 800 803 return is; 801 804 } // ?|? 805 ISTYPE_VOID_IMPL( signed char & ) 802 806 803 807 istype & ?|?( istype & is, unsigned char & usc ) { … … 805 809 return is; 806 810 } // ?|? 811 ISTYPE_VOID_IMPL( unsigned char & ) 807 812 808 813 istype & ?|?( istype & is, short int & si ) { … … 810 815 return is; 811 816 } // ?|? 817 ISTYPE_VOID_IMPL( short int & ) 812 818 813 819 istype & ?|?( istype & is, unsigned short int & usi ) { … … 815 821 return is; 816 822 } // ?|? 823 ISTYPE_VOID_IMPL( unsigned short int & ) 817 824 818 825 istype & ?|?( istype & is, int & i ) { … … 820 827 return is; 821 828 } // ?|? 829 ISTYPE_VOID_IMPL( int & ) 822 830 823 831 istype & ?|?( istype & is, unsigned int & ui ) { … … 825 833 return is; 826 834 } // ?|? 835 ISTYPE_VOID_IMPL( unsigned int & ) 827 836 828 837 istype & ?|?( istype & is, long int & li ) { … … 830 839 return is; 831 840 } // ?|? 841 ISTYPE_VOID_IMPL( long int & ) 832 842 833 843 istype & ?|?( istype & is, unsigned long int & ulli ) { … … 835 845 return is; 836 846 } // ?|? 847 ISTYPE_VOID_IMPL( unsigned long int & ) 837 848 838 849 istype & ?|?( istype & is, long long int & lli ) { … … 840 851 return is; 841 852 } // ?|? 853 ISTYPE_VOID_IMPL( long long int & ) 842 854 843 855 istype & ?|?( istype & is, unsigned long long int & ulli ) { … … 845 857 return is; 846 858 } // ?|? 859 ISTYPE_VOID_IMPL( unsigned long long int & ) 847 860 848 861 #if defined( __SIZEOF_INT128__ ) … … 850 863 return (istype &)(is | (unsigned int128 &)llli); 851 864 } // ?|? 865 ISTYPE_VOID_IMPL( int128 & ) 852 866 853 867 istype & ?|?( istype & is, unsigned int128 & ullli ) { … … 866 880 return is; 867 881 } // ?|? 882 ISTYPE_VOID_IMPL( unsigned int128 & ) 868 883 #endif // __SIZEOF_INT128__ 869 884 … … 872 887 return is; 873 888 } // ?|? 889 ISTYPE_VOID_IMPL( float & ) 874 890 875 891 istype & ?|?( istype & is, double & d ) { … … 877 893 return is; 878 894 } // ?|? 895 ISTYPE_VOID_IMPL( double & ) 879 896 880 897 istype & ?|?( istype & is, long double & ld ) { … … 882 899 return is; 883 900 } // ?|? 901 ISTYPE_VOID_IMPL( long double & ) 884 902 885 903 istype & ?|?( istype & is, float _Complex & fc ) { … … 889 907 return is; 890 908 } // ?|? 909 ISTYPE_VOID_IMPL( float _Complex & ) 891 910 892 911 istype & ?|?( istype & is, double _Complex & dc ) { … … 896 915 return is; 897 916 } // ?|? 917 ISTYPE_VOID_IMPL( double _Complex & ) 898 918 899 919 istype & ?|?( istype & is, long double _Complex & ldc ) { … … 903 923 return is; 904 924 } // ?|? 925 ISTYPE_VOID_IMPL( long double _Complex & ) 905 926 906 927 istype & ?|?( istype & is, const char fmt[] ) { … … 908 929 return is; 909 930 } // ?|? 931 ISTYPE_VOID_IMPL( const char * ) 910 932 911 933 // manipulators … … 915 937 916 938 void ?|?( istype & is, istype & (* manip)( istype & ) ) { 917 manip( is ); 939 manip( is ); ends( is ); 918 940 } // ?|? 919 941 … … 944 966 char fmtstr[ sizeof("%*[]") + nscanset ]; 945 967 int pos = 0; 946 strcpy( &fmtstr[pos], "%*[" ); pos += 3; 968 fmtstr[pos] = '%'; pos += 1; 969 fmtstr[pos] = '*'; pos += 1; 970 fmtstr[pos] = '['; pos += 1; 947 971 strcpy( &fmtstr[pos], f.scanset ); pos += nscanset; 948 strcpy( &fmtstr[pos], "]" ); 949 fmt( is, fmtstr, "" ); // skip scanset 950 } else { 951 char ch; 952 // fprintf( stderr, "skip " ); 953 for ( f.wd ) { // skip N characters 954 if ( eof( is ) ) break; 955 fmt( is, "%c", &ch ); 956 // fprintf( stderr, "`%c' ", ch ); 957 } // for 958 } // if 972 fmtstr[pos] = ']'; pos += 1; 973 fmtstr[pos] = '\0'; 974 fmt( is, fmtstr, (void*)0 ); // last arg is dummy: suppress gcc warning 975 } 976 else for ( f.wd ) fmt( is, "%*c" ); 959 977 return is; 960 978 } 979 ISTYPE_VOID_IMPL( _Istream_Cskip ) 961 980 962 981 istype & ?|?( istype & is, _Istream_Cstr f ) { 963 const char * scanset; 964 size_t nscanset = 0; 982 const char * scanset = f.scanset; 965 983 if ( f.flags.delimiter ) scanset = f.delimiter; // getline ? 966 else scanset = f.scanset; 967 if ( scanset ) nscanset = strlen( scanset ); 968 969 char fmtstr[nscanset + 32]; // storage for scanset and format codes 984 985 size_t len = 0; 986 if ( scanset ) len = strlen( scanset ); 987 char fmtstr[len + 16]; 988 int start = 1; 970 989 fmtstr[0] = '%'; 971 972 int pos = 1; 973 int args; 974 bool check = true; 975 976 if ( f.flags.ignore ) { check = false; fmtstr[1] = '*'; pos += 1; } 977 int rwd = f.wd; 978 if ( f.wd != -1 ) { // => just ignore versus ignore with width 990 if ( f.flags.ignore ) { fmtstr[1] = '*'; start += 1; } 991 // no maximum width necessary because text ignored => width is read width 992 if ( f.wd != -1 ) { 979 993 // wd is buffer bytes available (for input chars + null terminator) 980 994 // rwd is count of input chars 981 // no maximum width necessary because text ignored => width is read width 982 if ( f.flags.rwd ) check = false; 983 else rwd = f.wd - 1; 984 pos += sprintf( &fmtstr[pos], "%d", rwd ); 995 int rwd; 996 if (f.flags.rwd) { 997 verify (f.wd >= 0); 998 rwd = f.wd; 999 } else { 1000 verify (f.wd >= 1); 1001 rwd = f.wd - 1; 1002 } // if 1003 start += sprintf( &fmtstr[start], "%d", rwd ); 1004 } 1005 1006 if ( ! scanset ) { 1007 // %s, %*s, %ws, %*ws 1008 fmtstr[start] = 's'; fmtstr[start + 1] = '\0'; 1009 // printf( "cstr %s\n", fmtstr ); 1010 } else { 1011 // incl %[xxx], %*[xxx], %w[xxx], %*w[xxx] 1012 // excl %[^xxx], %*[^xxx], %w[^xxx], %*w[^xxx] 1013 fmtstr[start] = '['; start += 1; 1014 if ( f.flags.inex ) { fmtstr[start] = '^'; start += 1; } 1015 strcpy( &fmtstr[start], scanset ); // copy includes '\0' 1016 len += start; 1017 fmtstr[len] = ']'; fmtstr[len + 1] = '\0'; 1018 // printf( "incl/excl %s\n", fmtstr ); 985 1019 } // if 986 1020 987 if ( ! scanset ) { // %s, %*s, %ws, %*ws 988 // fprintf( stderr, "cstr %s\n", f.s ); 989 strcpy( &fmtstr[pos], "s%n" ); 990 int len = 0; // may not be set in fmt 991 if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*' 992 else args = fmt( is, fmtstr, f.s, &len ); 993 // fprintf( stderr, "cstr %s %d %d %d %s\n", fmtstr, args, len, f.wd, f.s ); 994 if ( check && len >= rwd && ! eof( is ) ) { // might not fit 1021 int check = f.wd - 2; 1022 if (! f.flags.ignore ) { 1023 if ( ! f.flags.rwd ) f.s[check] = '\0'; // insert sentinel 1024 } 1025 len = fmt( is, fmtstr, f.s ); 1026 //fprintf( stderr, "KK %s %zd %d %c %s\n", fmtstr, len, check, f.s[check], f.s ); 1027 1028 if ( ! f.flags.ignore && ! f.flags.rwd && f.s[check] != '\0' ) { // sentinel overwritten ? 1029 // buffer filled, but would we have kept going? 1030 if ( ! eof( is ) ) { 995 1031 char peek; 996 fmt( is, "%c", &peek ); // check for whitespace terminator 997 // fprintf( stderr, "peek %d '%c'\n", args, peek ); 998 if ( ! eof( is ) ) { 999 ungetc( is, peek ); 1000 if ( ! isspace( peek ) ) throw ExceptionInst( cstring_length ); 1001 } // if 1002 } // if 1003 } else { 1004 if ( f.flags.delimiter ) { // getline 1005 // fprintf( stderr, "getline\n" ); 1006 sprintf( &fmtstr[pos], "[%s%s]%%n", f.flags.inex ? "^" : "", scanset ); 1007 // fprintf( stderr, "getline %s %d\n", fmtstr, f.wd ); 1008 int len = 0; // may not be set in fmt 1009 if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*' 1010 else args = fmt( is, fmtstr, f.s, &len ); 1011 // fprintf( stderr, "getline %s %d %d %d\n", fmtstr, args, f.wd, eof( is ) ); 1012 if ( check && len == rwd && ! eof( is ) ) { // might not fit 1013 char peek; 1014 fmt( is, "%c", &peek ); // check for delimiter 1015 // fprintf( stderr, "peek %d '%c'\n", args, peek ); 1016 if ( ! eof( is ) ) { 1017 if ( peek != f.delimiter[0] ) { 1018 ungetc( is, peek ); 1019 throw ExceptionInst( cstring_length ); 1020 } // if 1021 } // if 1022 } else fmt( is, "%*c" ); // remove delimiter 1023 } else { 1024 // incl %[xxx], %*[xxx], %w[xxx], %*w[xxx] 1025 // excl %[^xxx], %*[^xxx], %w[^xxx], %*w[^xxx] 1026 sprintf( &fmtstr[pos], "[%s%s]%%n", f.flags.inex ? "^" : "", scanset ); 1027 // fprintf( stderr, "incl/excl %s %d\n", fmtstr, f.wd ); 1028 int len = 0; // may not be set in fmt 1029 if ( f.flags.ignore ) args = fmt( is, fmtstr, &len ); // no string argument for '*' 1030 else args = fmt( is, fmtstr, f.s, &len ); 1031 // fprintf( stderr, "incl/excl %s \"%s\" %d %d %d %d %d %c\n", fmtstr, f.s, args, f.wd, len, eof( is ), check, f.s[f.wd] ); 1032 if ( check && len == rwd && ! eof( is ) ) { // might not fit 1033 // fprintf( stderr, "overflow\n" ); 1034 char peek; 1035 fmt( is, "%c", &peek ); // check for whitespace terminator 1036 // fprintf( stderr, "peek %d '%c'\n", args, peek ); 1037 if ( ! eof( is ) ) { 1038 ungetc( is, peek ); 1039 if ( f.flags.inex ^ strchr( f.scanset, peek ) != 0p ) throw ExceptionInst( cstring_length ); 1040 } // if 1041 } // if 1032 fmt( is, "%c", &peek ); 1033 ungetc( is, peek ); 1034 bool hasMore; 1035 if (f.flags.delimiter) { // getline 1036 hasMore = (peek != f.delimiter[0]); 1037 } else if (f.scanset) { // incl/excl 1038 bool peekMatch = strchr(f.scanset, peek) != 0p; 1039 hasMore = f.flags.inex ? (!peekMatch) : (peekMatch); 1040 } else { // %s 1041 hasMore = !isspace(peek); 1042 } 1043 if (hasMore) throw (cstring_length){ &cstring_length_vt }; 1042 1044 } // if 1043 1045 } // if 1044 if ( args == 1 && eof( is ) ) { // data but scan ended at EOF 1045 // fprintf( stderr, "clear\n" ); 1046 clear( is ); // => reset EOF => detect again on next read 1047 } // if 1048 return is; 1049 } // ?|? 1046 1047 if ( f.flags.delimiter ) { // getline ? 1048 if ( len == 0 ) f.s[0] = '\0'; // empty read => argument unchanged => set empty 1049 if ( ! eof( is ) ) { // ignore delimiter, may not be present because of width 1050 char delimiter; 1051 fmt( is, "%c", &delimiter ); 1052 if ( delimiter != f.delimiter[0] ) ungetc( is, delimiter ); 1053 } // if 1054 } //if 1055 return is; 1056 } // ?|? 1057 ISTYPE_VOID_IMPL( _Istream_Cstr ) 1050 1058 1051 1059 istype & ?|?( istype & is, _Istream_Char f ) { … … 1053 1061 return is; 1054 1062 } // ?|? 1063 ISTYPE_VOID_IMPL( _Istream_Char ) 1055 1064 } // distribution 1056 1065 … … 1069 1078 return is; \ 1070 1079 } /* ?|? */ \ 1080 ISTYPE_VOID_IMPL( _Istream_Manip(T) ) \ 1071 1081 } // distribution 1072 1082 … … 1096 1106 return is; 1097 1107 } // ?|? 1108 ISTYPE_VOID_IMPL( _Istream_Manip(float _Complex) ) 1098 1109 1099 1110 istype & ?|?( istype & is, _Istream_Manip(double _Complex) dc ) { … … 1106 1117 return is; 1107 1118 } // ?|? 1119 ISTYPE_VOID_IMPL( _Istream_Manip(double _Complex) ) 1108 1120 1109 1121 istype & ?|?( istype & is, _Istream_Manip(long double _Complex) ldc ) { … … 1116 1128 return is; 1117 1129 } // ?|? 1130 ISTYPE_VOID_IMPL( _Istream_Manip(long double _Complex) ) 1118 1131 } // distribution 1119 1132 -
libcfa/src/iostream.hfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Oct 18 21:21:20202313 // Update Count : 5 8312 // Last Modified On : Sun Oct 8 12:02:55 2023 13 // Update Count : 568 14 14 // 15 15 … … 306 306 // *********************************** istream *********************************** 307 307 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 } // ?|? 313 308 314 forall( istype & ) 309 315 trait basic_istream { … … 314 320 void nlOn( istype & ); // read newline 315 321 void nlOff( istype & ); // scan newline 322 void ends( istype & os ); // end of output statement 316 323 int fmt( istype &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) )); 317 324 istype & ungetc( istype &, char ); 318 325 bool eof( istype & ); 319 void clear( istype & );320 326 }; // basic_istream 321 327 … … 323 329 trait istream { 324 330 bool fail( istype & ); 325 void open( istype & is, const char name[], const char mode[]);331 void clear( istype & ); 326 332 void open( istype & is, const char name[] ); 327 333 void close( istype & is ); … … 336 342 forall( istype & | basic_istream( istype ) ) { 337 343 istype & ?|?( istype &, bool & ); 344 ISTYPE_VOID( bool & ); 338 345 339 346 istype & ?|?( istype &, char & ); 347 ISTYPE_VOID( char & ); 340 348 istype & ?|?( istype &, signed char & ); 349 ISTYPE_VOID( signed char & ); 341 350 istype & ?|?( istype &, unsigned char & ); 351 ISTYPE_VOID( unsigned char & ); 342 352 343 353 istype & ?|?( istype &, short int & ); 354 ISTYPE_VOID( short int & ); 344 355 istype & ?|?( istype &, unsigned short int & ); 356 ISTYPE_VOID( unsigned short int & ); 345 357 istype & ?|?( istype &, int & ); 358 ISTYPE_VOID( int & ); 346 359 istype & ?|?( istype &, unsigned int & ); 360 ISTYPE_VOID( unsigned int & ); 347 361 istype & ?|?( istype &, long int & ); 362 ISTYPE_VOID( long int & ); 348 363 istype & ?|?( istype &, unsigned long int & ); 364 ISTYPE_VOID( unsigned long int & ); 349 365 istype & ?|?( istype &, long long int & ); 366 ISTYPE_VOID( long long int & ); 350 367 istype & ?|?( istype &, unsigned long long int & ); 368 ISTYPE_VOID( unsigned long long int & ); 351 369 #if defined( __SIZEOF_INT128__ ) 352 370 istype & ?|?( istype &, int128 & ); 371 ISTYPE_VOID( int128 & ); 353 372 istype & ?|?( istype &, unsigned int128 & ); 373 ISTYPE_VOID( unsigned int128 & ); 354 374 #endif // __SIZEOF_INT128__ 355 375 356 376 istype & ?|?( istype &, float & ); 377 ISTYPE_VOID( float & ); 357 378 istype & ?|?( istype &, double & ); 379 ISTYPE_VOID( double & ); 358 380 istype & ?|?( istype &, long double & ); 381 ISTYPE_VOID( long double & ); 359 382 360 383 istype & ?|?( istype &, float _Complex & ); 384 ISTYPE_VOID( float _Complex & ); 361 385 istype & ?|?( istype &, double _Complex & ); 386 ISTYPE_VOID( double _Complex & ); 362 387 istype & ?|?( istype &, long double _Complex & ); 388 ISTYPE_VOID( long double _Complex & ); 363 389 364 390 istype & ?|?( istype &, const char [] ); 391 ISTYPE_VOID( const char [] ); 365 392 366 393 // manipulators 367 394 istype & ?|?( istype &, istype & (*)( istype & ) ); 395 ISTYPE_VOID( istype & (*)( istype & ) ); 368 396 istype & nl( istype & is ); 369 397 istype & nlOn( istype & ); … … 374 402 375 403 ExceptionDecl( cstring_length ); 376 ExceptionDecl( missing_data );377 404 378 405 // *********************************** manipulators *********************************** 379 406 380 // skip does not compose with other C string manipulators.381 407 struct _Istream_Cskip { 382 408 const char * scanset; … … 390 416 forall( istype & | basic_istream( istype ) ) { 391 417 istype & ?|?( istype & is, _Istream_Cskip f ); 418 ISTYPE_VOID( _Istream_Cskip ); 392 419 } 393 420 … … 431 458 forall( istype & | basic_istream( istype ) ) { 432 459 istype & ?|?( istype & is, _Istream_Cstr f ); 460 ISTYPE_VOID( _Istream_Cstr ); 433 461 } 434 462 … … 443 471 forall( istype & | basic_istream( istype ) ) { 444 472 istype & ?|?( istype & is, _Istream_Char f ); 473 ISTYPE_VOID( _Istream_Char ); 445 474 } 446 475 … … 461 490 forall( istype & | basic_istream( istype ) ) { \ 462 491 istype & ?|?( istype & is, _Istream_Manip(T) f ); \ 492 ISTYPE_VOID( _Istream_Manip(T) ); \ 463 493 } // ?|? 464 494 -
tests/concurrency/waituntil/channel_close.cfa
r7b84d3e r2ad5e1d5 26 26 for( ;; ) { 27 27 if ( useAnd ) { 28 waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );assert( A_removes == in ); A_removes++; removes++; }29 and waituntil( (in2 << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );assert( B_removes == in2 ); B_removes++; removes++; }28 waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; } 29 and waituntil( (in2 << B) ) { assert( B_removes == in2 ); B_removes++; removes++; } 30 30 continue; 31 31 } 32 waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );assert( A_removes == in ); A_removes++; removes++; }33 or waituntil( (in << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );( B_removes == in ); B_removes++; removes++; }32 waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; } 33 or waituntil( (in << B) ) { assert( B_removes == in ); B_removes++; removes++; } 34 34 } 35 35 } catchResume ( channel_closed * e ) {} // continue to remove until would block … … 37 37 try { 38 38 for( ;; ) 39 waituntil( (in << A) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );assert( A_removes == in ); A_removes++; removes++; }39 waituntil( (in << A) ) { assert( A_removes == in ); A_removes++; removes++; } 40 40 } catchResume ( channel_closed * e ) {} // continue to remove until would block 41 41 catch ( channel_closed * e ) {} 42 42 try { 43 43 for( ;; ) 44 waituntil( (in << B) ) { __atomic_thread_fence( __ATOMIC_SEQ_CST );assert( B_removes == in ); B_removes++; removes++; }44 waituntil( (in << B) ) { assert( B_removes == in ); B_removes++; removes++; } 45 45 } catchResume ( channel_closed * e ) {} // continue to remove until would block 46 46 catch ( channel_closed * e ) {} -
tests/genericUnion.cfa
r7b84d3e r2ad5e1d5 10 10 // Created On : Tue Dec 25 14:42:46 2018 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Oct 20 09:13:26 202313 // Update Count : 1512 // Last Modified On : Tue Dec 25 14:46:33 2018 13 // Update Count : 2 14 14 // 15 15 16 #include <fstream.hfa>17 16 #include <limits.hfa> 18 17 19 forall( T)18 forall(T) 20 19 union ByteView { 21 20 T val; … … 24 23 25 24 forall(T) 26 void print( ByteView(T) x) {27 for ( i; sizeof(int) ) {// want to change to sizeof(T)28 sout | nobase( pad0( wd( 2, hex( x.bytes[i] & 0xff ) ) ) ) | nosep;25 void print(ByteView(T) x) { 26 for (int i = 0; i < sizeof(int); i++) { // want to change to sizeof(T) 27 printf("%02x", x.bytes[i] & 0xff); 29 28 } 30 29 } 31 30 32 31 forall(T) 33 void f( ByteView(T) x, T val) {34 print( x);35 sout | " ";32 void f(ByteView(T) x, T val) { 33 print(x); 34 printf(" "); 36 35 x.val = val; 37 print( x);38 sout | nl;36 print(x); 37 printf("\n"); 39 38 } 40 39 41 40 int main() { 42 sout | nlOff;43 41 ByteView(unsigned) u = { 0 }; 44 42 ByteView(int) i = { 0 }; 45 f( u, MAX);46 f( i, -1);43 f(u, MAX); 44 f(i, -1); 47 45 } 48 46
Note: See TracChangeset
for help on using the changeset viewer.