- Timestamp:
- Sep 3, 2024, 12:08:09 PM (4 months ago)
- Branches:
- master
- Children:
- 737bf73
- Parents:
- cdbb909
- Location:
- libcfa
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/prelude/prototypes.awk
rcdbb909 rdb19e1d 103 103 104 104 for ( prototype in prototypes ) { 105 # printf( "//\"%s\"\n", prototype )106 105 if ( index( "BT_LAST", prototype ) == 1 ) { 107 106 continue … … 126 125 127 126 # generate function parameter types as macro 128 if ( index( prototype, "VAR" ) != 2 ) { # C-style empty parameters ? 129 for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed 130 sub( "_", "", prototype) # remove "_" 131 printf( ", ", type ) 132 temp = prototype 133 for ( t = 0; t < N; t += 1 ) { # find longest match 134 type = types[t]; 135 if ( index( prototype, type ) == 1 ) { # found match 136 printf( "BT_%s", type ) 137 sub( type, "", prototype ) 138 break; 139 } # if 140 } # for 141 if ( temp == prototype ) { # no match found for parameter in macro table 142 printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype ) 143 exit 0 127 for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed 128 sub( "_", "", prototype) # remove "_" 129 printf( ", ", type ) 130 temp = prototype 131 for ( t = 0; t < N; t += 1 ) { # find longest match 132 type = types[t]; 133 if ( index( prototype, type ) == 1 ) { # found match 134 printf( "BT_%s", type ) 135 sub( type, "", prototype ) 136 break; 144 137 } # if 145 138 } # for 146 } # if 139 if ( temp == prototype ) { # no match found for parameter in macro table 140 printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype ) 141 exit 0 142 } # if 143 } # for 147 144 printf( ")\n" ) 148 145 } # for -
libcfa/src/concurrency/future.hfa
rcdbb909 rdb19e1d 88 88 if ( s.clause_status == 0p ) // poke in result so that woken threads do not need to reacquire any locks 89 89 copy_T( result, *(((future_node(T) &)s).my_result) ); 90 90 91 91 wake_one( waiters, s ); 92 92 } … … 146 146 } 147 147 unlock( lock ); 148 148 149 149 return [ret_val, false]; 150 150 } … … 154 154 155 155 // check if we can complete operation. If so race to establish winner in special OR case 156 if ( !s.park_counter && state != FUTURE_EMPTY ) { 156 if ( !s.park_counter && state != FUTURE_EMPTY ) { 157 157 if ( !__make_select_node_available( s ) ) { // we didn't win the race so give up on registering 158 158 unlock( lock ); … … 180 180 return false; 181 181 } 182 182 183 183 bool on_selected( future(T) & this, select_node & node ) { return true; } 184 184 }
Note: See TracChangeset
for help on using the changeset viewer.