Changes in libcfa/src/stdlib.hfa [1959528:aa0a1ad]
- File:
-
- 1 edited
-
libcfa/src/stdlib.hfa (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
r1959528 raa0a1ad 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jan 12 09:09:48202213 // Update Count : 62012 // Last Modified On : Sun Jan 2 22:53:57 2022 13 // Update Count : 594 14 14 // 15 15 … … 21 21 #include <stdlib.h> // *alloc, strto*, ato* 22 22 #include <heap.hfa> 23 24 23 25 24 // Reduce includes by explicitly defining these routines. … … 386 385 //--------------------------------------- 387 386 388 // Sequential Pseudo Random-Number Generator : generate repeatable sequence of values that appear random.389 //390 // Declaration :391 // PRNG sprng = { 1009 } - set starting seed versus random seed392 //393 // Interface :394 // set_seed( sprng, 1009 ) - set starting seed for ALL kernel threads versus random seed395 // get_seed( sprng ) - read seed396 // prng( sprng ) - generate random value in range [0,UINT_MAX]397 // prng( sprng, u ) - generate random value in range [0,u)398 // prng( sprng, l, u ) - generate random value in range [l,u]399 // calls( sprng ) - number of generated random value so far400 //401 // Examples : generate random number between 5-21402 // prng( sprng ) % 17 + 5; values 0-16 + 5 = 5-21403 // prng( sprng, 16 + 1 ) + 5;404 // prng( sprng, 5, 21 );405 // calls( sprng );406 407 387 struct PRNG { 408 388 uint32_t callcnt; // call count … … 411 391 }; // PRNG 412 392 413 void set_seed( PRNG & prng, uint32_t seed_ ); 414 uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX] 393 extern uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX] 415 394 static inline { 395 void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; } // set seed 416 396 void ?{}( PRNG & prng ) { set_seed( prng, rdtscl() ); } // random seed 417 397 void ?{}( PRNG & prng, uint32_t seed ) { set_seed( prng, seed ); } // fixed seed … … 422 402 } // distribution 423 403 424 // Concurrent Pseudo Random-Number Generator : generate repeatable sequence of values that appear random. 425 // 426 // Interface : 427 // set_seed( 1009 ) - fixed seed for all kernel threads versus random seed 428 // get_seed() - read seed 429 // prng() - generate random value in range [0,UINT_MAX] 430 // prng( u ) - generate random value in range [0,u) 431 // prng( l, u ) - generate random value in range [l,u] 432 // 433 // Examples : generate random number between 5-21 434 // prng() % 17 + 5; values 0-16 + 5 = 5-21 435 // prng( 16 + 1 ) + 5; 436 // prng( 5, 21 ); 437 438 void set_seed( uint32_t seed_ ) OPTIONAL_THREAD; 439 uint32_t get_seed() __attribute__(( warn_unused_result )) OPTIONAL_THREAD; 440 uint32_t prng( void ) __attribute__(( warn_unused_result )) OPTIONAL_THREAD; // [0,UINT_MAX] 404 extern void set_seed( uint32_t seed ); // set per thread seed 405 extern uint32_t get_seed(); // get seed 406 extern uint32_t prng( void ) __attribute__(( warn_unused_result )); // [0,UINT_MAX] 441 407 static inline { 442 uint32_t prng( uint32_t u ) __attribute__(( warn_unused_result )) { return prng() % u; } // [0,u) 443 uint32_t prng( uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( u - l + 1 ) + l; } // [l,u] 408 uint32_t prng( uint32_t u ) __attribute__(( warn_unused_result )); 409 uint32_t prng( uint32_t u ) { return prng() % u; } // [0,u) 410 uint32_t prng( uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )); 411 uint32_t prng( uint32_t l, uint32_t u ) { return prng( u - l + 1 ) + l; } // [l,u] 444 412 } // distribution 445 413
Note:
See TracChangeset
for help on using the changeset viewer.