Changeset 20cf96d for libcfa/src
- Timestamp:
- Nov 22, 2022, 11:03:19 PM (2 years ago)
- Branches:
- ADT, ast-experimental, master
- Children:
- 78de1e5
- Parents:
- 29702ad
- Location:
- libcfa/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/thread.cfa
r29702ad r20cf96d 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Nov 20 17:17:50202213 // Update Count : 8 012 // Last Modified On : Tue Nov 22 22:18:37 2022 13 // Update Count : 81 14 14 // 15 15 … … 227 227 //----------------------------------------------------------------------------- 228 228 229 void set_seed( uint64_t seed ) {229 void set_seed( size_t seed ) { 230 230 PRNG_ARG_T & state = active_thread()->random_state; 231 231 state = __global_random_seed = seed; … … 235 235 } // set_seed 236 236 237 uint64_t prng( void ) { // [0,UINT_MAX]237 size_t prng( void ) { // [0,UINT_MAX] 238 238 PRNG_ARG_T & state = active_thread()->random_state; 239 239 return PRNG_NAME( state ); -
libcfa/src/concurrency/thread.hfa
r29702ad r20cf96d 10 10 // Created On : Tue Jan 17 12:27:26 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Nov 19 16:41:27202213 // Update Count : 3 012 // Last Modified On : Tue Nov 22 22:18:34 2022 13 // Update Count : 35 14 14 // 15 15 … … 142 142 //---------- 143 143 // prng 144 void set_seed( size_t seed ); 144 145 static inline { 145 uint64_t prng( thread$ & th ) __attribute__(( warn_unused_result )) { return PRNG_NAME( th.random_state ); } // [0,UINT_MAX]146 uint64_t prng( thread$ & th, uint64_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u)147 uint64_t prng( thread$ & th, uint64_t l, uint64_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u]146 size_t prng( thread$ & th ) __attribute__(( warn_unused_result )) { return PRNG_NAME( th.random_state ); } // [0,UINT_MAX] 147 size_t prng( thread$ & th, size_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u) 148 size_t prng( thread$ & th, size_t l, size_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u] 148 149 forall( T & | is_thread(T) ) { 149 uint64_t prng( T & th ) __attribute__(( warn_unused_result )) { return prng( (thread &)th ); } // [0,UINT_MAX]150 uint64_t prng( T & th, uint64_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u)151 uint64_t prng( T & th, uint64_t l, uint64_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u]150 size_t prng( T & th ) __attribute__(( warn_unused_result )) { return prng( (thread &)th ); } // [0,UINT_MAX] 151 size_t prng( T & th, size_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u) 152 size_t prng( T & th, size_t l, size_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u] 152 153 } // distribution 153 154 } // distribution -
libcfa/src/stdlib.cfa
r29702ad r20cf96d 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Nov 19 16:42:26 202213 // Update Count : 61 212 // Last Modified On : Tue Nov 22 22:18:36 2022 13 // Update Count : 613 14 14 // 15 15 … … 229 229 __attribute__((visibility("hidden"))) PRNG_ARG_T __global_random_state; // sequential only 230 230 231 void set_seed( uint64_t seed ) { __global_random_state = __global_random_seed = seed; PRNG_NAME( __global_random_state ); }232 uint64_t get_seed() { return __global_random_seed; }233 uint64_t prng( void ) { return PRNG_NAME( __global_random_state ); } // [0,UINT_MAX]231 void set_seed( size_t seed ) { __global_random_state = __global_random_seed = seed; PRNG_NAME( __global_random_state ); } 232 size_t get_seed() { return __global_random_seed; } 233 size_t prng( void ) { return PRNG_NAME( __global_random_state ); } // [0,UINT_MAX] 234 234 235 235 //--------------------------------------- -
libcfa/src/stdlib.hfa
r29702ad r20cf96d 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Nov 20 17:12:37202213 // Update Count : 73 012 // Last Modified On : Tue Nov 22 22:48:59 2022 13 // Update Count : 736 14 14 // 15 15 … … 404 404 // calls( sprng ); 405 405 406 trait basic_prng( PRNG &, S,R ) {407 void set_seed( PRNG & prng, Sseed ); // set seed408 Sget_seed( PRNG & prng ); // get seed406 trait basic_prng( PRNG &, R ) { 407 void set_seed( PRNG & prng, R seed ); // set seed 408 R get_seed( PRNG & prng ); // get seed 409 409 R prng( PRNG & prng ); 410 410 void ?{}( PRNG & prng ); // random seed 411 void ?{}( PRNG & prng, Sseed ); // fixed seed411 void ?{}( PRNG & prng, R seed ); // fixed seed 412 412 }; // basic_prng 413 413 414 static inline forall( PRNG &, S, R | basic_prng( PRNG, S, R ) | { R ?%?( R, R ); } ) {414 static inline forall( PRNG &, R | basic_prng( PRNG, R ) | { R ?%?( R, R ); } ) { 415 415 R prng( PRNG & prng, R u ) { return prng( prng ) % u; } // [0,u) 416 416 } 417 static inline forall( PRNG &, S, R | basic_prng( PRNG, S, R ) | { R ?+?( R, R ); R ?-?( R, R ); R ?%?( R, R ); void ?{}( R &, one_t ); } ) {417 static inline forall( PRNG &, R | basic_prng( PRNG, R ) | { R ?+?( R, R ); R ?-?( R, R ); R ?%?( R, R ); void ?{}( R &, one_t ); } ) { 418 418 R prng( PRNG & prng, R l, R u ) { return prng( prng, u - l + (R){1} ) + l; } // [l,u] 419 419 } … … 429 429 uint32_t get_seed( PRNG32 & prng ) __attribute__(( warn_unused_result )) with( prng ) { return seed; } // get seed 430 430 uint32_t prng( PRNG32 & prng ) __attribute__(( warn_unused_result )) with( prng ) { callcnt += 1; return PRNG_NAME( state ); } // [0,UINT_MAX] 431 uint32_t prng( PRNG32 & prng, size_t u ) __attribute__(( warn_unused_result )) { return prng( prng ) % u; } // [0,u) 432 uint32_t prng( PRNG32 & prng, size_t l, size_t u ) __attribute__(( warn_unused_result )) { return prng( prng, u - l + 1 ) + l; } // [l,u] 431 433 uint32_t calls( PRNG32 & prng ) __attribute__(( warn_unused_result )) with( prng ) { return callcnt; } 432 434 void ?{}( PRNG32 & prng ) with( prng ) { callcnt = 0; set_seed( prng, rdtscl() ); } // random seed … … 444 446 uint64_t get_seed( PRNG64 & prng ) __attribute__(( warn_unused_result )) with( prng ) { return seed; } // get seed 445 447 uint64_t prng( PRNG64 & prng ) __attribute__(( warn_unused_result )) with( prng ) { callcnt += 1; return PRNG_NAME( state ); } // [0,UINT_MAX] 448 uint64_t prng( PRNG64 & prng, size_t u ) __attribute__(( warn_unused_result )) { return prng( prng ) % u; } // [0,u) 449 uint64_t prng( PRNG64 & prng, size_t l, size_t u ) __attribute__(( warn_unused_result )) { return prng( prng, u - l + 1 ) + l; } // [l,u] 446 450 uint64_t calls( PRNG64 & prng ) __attribute__(( warn_unused_result )) with( prng ) { return callcnt; } 447 451 void ?{}( PRNG64 & prng ) with( prng ) { callcnt = 0; set_seed( prng, rdtscl() ); } // random seed … … 464 468 465 469 // Harmonize with concurrency/thread.hfa. 466 void set_seed( uint64_t seed_ ) OPTIONAL_THREAD;467 uint64_t get_seed() __attribute__(( warn_unused_result ));468 uint64_t prng( void ) __attribute__(( warn_unused_result )) OPTIONAL_THREAD; // [0,UINT_MAX]469 static inline { 470 uint64_t prng( uint64_t u ) __attribute__(( warn_unused_result )) { return prng() % u; } // [0,u)471 uint64_t prng( uint64_t l, uint64_t u ) __attribute__(( warn_unused_result )) { return prng( u - l + 1 ) + l; } // [l,u]470 void set_seed( size_t seed_ ) OPTIONAL_THREAD; 471 size_t get_seed() __attribute__(( warn_unused_result )); 472 size_t prng( void ) __attribute__(( warn_unused_result )) OPTIONAL_THREAD; // [0,UINT_MAX] 473 static inline { 474 size_t prng( size_t u ) __attribute__(( warn_unused_result )) { return prng() % u; } // [0,u) 475 size_t prng( size_t l, size_t u ) __attribute__(( warn_unused_result )) { return prng( u - l + 1 ) + l; } // [l,u] 472 476 } // distribution 473 477
Note: See TracChangeset
for help on using the changeset viewer.