Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/stdlib.hfa

    raa8e24c3 r6c5d92f  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Dec 29 15:30:58 2021
    13 // Update Count     : 591
     12// Last Modified On : Tue Apr 20 21:20:03 2021
     13// Update Count     : 575
    1414//
    1515
     
    169169                return ret;
    170170        }
    171         S_fill(T)               ?`fill ( zero_t ) = void; // FIX ME: remove this once ticket 214 is resolved
    172         S_fill(T)               ?`fill ( T * a )                                { return (S_fill(T)){ 'T', '0', 0, a }; } // FIX ME: remove this once ticket 214 is resolved
    173171        S_fill(T)               ?`fill ( char c )                               { return (S_fill(T)){ 'c', c }; }
     172        S_fill(T)               ?`fill ( T * a )                                { return (S_fill(T)){ 'T', '0', 0, a }; }
    174173        S_fill(T)               ?`fill ( T a[], size_t nmemb )  { return (S_fill(T)){ 'a', '0', nmemb * sizeof(T), a }; }
    175174
     
    363362
    364363static inline {
    365         long int random( long int l, long int u ) { if ( u < l ) [u, l] = [l, u]; return lrand48() % (u - l + 1) + l; } // [l,u]
    366         long int random( long int u ) { return random( 0, u - 1 ); } // [0,u)
     364        long int random( long int l, long int u ) { if ( u < l ) [u, l] = [l, u]; return lrand48() % (u - l) + l; } // [l,u)
     365        long int random( long int u ) { if ( u < 0 ) return random( u, 0 ); else return random( 0, u ); } // [0,u)
    367366        unsigned long int random( void ) { return lrand48(); }
    368367        unsigned long int random( unsigned long int u ) { return lrand48() % u; } // [0,u)
    369         unsigned long int random( unsigned long int l, unsigned long int u ) { if ( u < l ) [u, l] = [l, u]; return lrand48() % (u - l + 1) + l; } // [l,u]
     368        unsigned long int random( unsigned long int l, unsigned long int u ) { if ( u < l ) [u, l] = [l, u]; return lrand48() % (u - l) + l; } // [l,u)
    370369
    371370        char random( void ) { return (unsigned long int)random(); }
     
    388387//---------------------------------------
    389388
    390 struct PRNG {
    391         uint32_t callcnt;                                                                       // call count
    392         uint32_t seed;                                                                          // current seed
    393         uint32_t state;                                                                         // random state
    394 }; // PRNG
    395 
    396 extern uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX]
    397 static inline {
    398         void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; } // set seed
    399         void ?{}( PRNG & prng ) { set_seed( prng, rdtscl() ); } // random seed
    400         void ?{}( PRNG & prng, uint32_t seed ) { set_seed( prng, seed ); } // fixed seed
    401         uint32_t get_seed( PRNG & prng ) __attribute__(( warn_unused_result )) with( prng ) { return seed; } // get seed
    402         uint32_t prng( PRNG & prng, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( prng ) % u; } // [0,u)
    403         uint32_t prng( PRNG & prng, uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( prng, u - l + 1 ) + l; } // [l,u]
    404         uint32_t calls( PRNG & prng ) __attribute__(( warn_unused_result )) with( prng ) { return callcnt; }
    405 } // distribution
    406 
    407 extern void set_seed( uint32_t seed );                                  // set per thread seed
    408 extern uint32_t get_seed();                                                             // get seed
    409 extern uint32_t prng( void ) __attribute__(( warn_unused_result )); // [0,UINT_MAX]
    410 static inline {
    411         uint32_t prng( uint32_t u ) __attribute__(( warn_unused_result ));
    412         uint32_t prng( uint32_t u ) { return prng() % u; }      // [0,u)
    413         uint32_t prng( uint32_t l, uint32_t u ) __attribute__(( warn_unused_result ));
    414         uint32_t prng( uint32_t l, uint32_t u ) { return prng( u - l + 1 ) + l; } // [l,u]
    415 } // distribution
    416 
    417 //---------------------------------------
    418 
    419389extern bool threading_enabled( void ) OPTIONAL_THREAD;
    420390
Note: See TracChangeset for help on using the changeset viewer.