www.pudn.com > Roamsteps20020818.zip > randtab.h, change:2002-08-18,size:1733b



#ifndef RANDTAB__HERE
#define RANDTAB__HERE 1

/*
 * randtab.h             general randomizer hash function via table lookup
 * by Mark Duchaineau (free but copyrighted, see LibGen/COPYING)
 *
 * use RANDHASH(MEM,BYTES,H) to get an unsigned int H from hashing
 * BYTES number of bytes from (char *)MEM
 *
 * use RANDHASHF(MEM,BYTES,F) to get a float F in the range [-1.0,1.0]
 *
 * 2002-08-01: wrote inital version
 *
 */


extern int randtab[2048];


#define RANDHASH(MEM,BYTES,H) {                                              \
    int randhash_i,randhash_s;                                               \
    unsigned char *randhash_cp;                                              \
                                                                             \
    randhash_cp=(unsigned char *)(MEM);                                      \
    for (randhash_i=0,randhash_s=0;randhash_i<(BYTES);randhash_i++)          \
        randhash_s+=randtab[((randhash_i&7)<<8)|randhash_cp[randhash_i]];    \
    (H)=randhash_s;                                                          \
}


#define RANDHASHF(MEM,BYTES,F) {                                             \
    unsigned int randhash_h;                                                 \
    int *randhash_ip;                                                        \
                                                                             \
    RANDHASH(MEM,BYTES,randhash_h)                                           \
    randhash_ip=(int *)(&(F));                                               \
    *randhash_ip=0x40000000+(randhash_h&0x007fffff);                         \
    (F)-=3.0f;                                                               \
}

#endif