Changeset 42daeb4 for libcfa/src/stdlib.hfa
- Timestamp:
- Jan 13, 2022, 10:53:25 AM (4 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- 3eaa689
- Parents:
- 3bb12921 (diff), 00f5fde (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
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.hfa
r3bb12921 r42daeb4 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Jan 2 22:53:57202213 // Update Count : 59412 // Last Modified On : Wed Jan 12 18:56:13 2022 13 // Update Count : 621 14 14 // 15 15 … … 21 21 #include <stdlib.h> // *alloc, strto*, ato* 22 22 #include <heap.hfa> 23 23 24 24 25 // Reduce includes by explicitly defining these routines. … … 385 386 //--------------------------------------- 386 387 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 seed 392 // 393 // Interface : 394 // set_seed( sprng, 1009 ) - set starting seed for ALL kernel threads versus random seed 395 // get_seed( sprng ) - read seed 396 // 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 far 400 // 401 // Examples : generate random number between 5-21 402 // prng( sprng ) % 17 + 5; values 0-16 + 5 = 5-21 403 // prng( sprng, 16 + 1 ) + 5; 404 // prng( sprng, 5, 21 ); 405 // calls( sprng ); 406 387 407 struct PRNG { 388 408 uint32_t callcnt; // call count … … 391 411 }; // PRNG 392 412 393 extern uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX] 413 void set_seed( PRNG & prng, uint32_t seed_ ); 414 uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX] 394 415 static inline { 395 void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; } // set seed396 416 void ?{}( PRNG & prng ) { set_seed( prng, rdtscl() ); } // random seed 397 417 void ?{}( PRNG & prng, uint32_t seed ) { set_seed( prng, seed ); } // fixed seed … … 402 422 } // distribution 403 423 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] 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 )); 440 uint32_t prng( void ) __attribute__(( warn_unused_result )) OPTIONAL_THREAD; // [0,UINT_MAX] 407 441 static inline { 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] 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] 412 444 } // distribution 413 445
Note:
See TracChangeset
for help on using the changeset viewer.