[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/sys/fnv_hash.h

Version: -  FREEBSD  -  FREEBSD10  -  FREEBSD9  -  FREEBSD92  -  FREEBSD91  -  FREEBSD90  -  FREEBSD8  -  FREEBSD82  -  FREEBSD81  -  FREEBSD80  -  FREEBSD7  -  FREEBSD74  -  FREEBSD73  -  FREEBSD72  -  FREEBSD71  -  FREEBSD70  -  FREEBSD6  -  FREEBSD64  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  cheribsd  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD5  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  xnu-1456.1.26  -  xnu-1699.24.8  -  xnu-2050.18.24  -  OPENSOLARIS  -  minix-3-1-1  -  FREEBSD-LIBC  -  FREEBSD8-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Fowler / Noll / Vo Hash (FNV Hash)
    3  * http://www.isthe.com/chongo/tech/comp/fnv/
    4  *
    5  * This is an implementation of the algorithms posted above.
    6  * This file is placed in the public domain by Peter Wemm.
    7  *
    8  * $FreeBSD: src/sys/sys/fnv_hash.h,v 1.2 2001/03/20 02:10:18 peter Exp $
    9  */
   10 
   11 typedef u_int32_t Fnv32_t;
   12 typedef u_int64_t Fnv64_t;
   13 
   14 #define FNV1_32_INIT ((Fnv32_t) 33554467UL)
   15 #define FNV1_64_INIT ((Fnv64_t) 0xcbf29ce484222325ULL)
   16 
   17 #define FNV_32_PRIME ((Fnv32_t) 0x01000193UL)
   18 #define FNV_64_PRIME ((Fnv64_t) 0x100000001b3ULL)
   19 
   20 static __inline Fnv32_t
   21 fnv_32_buf(const void *buf, size_t len, Fnv32_t hval)
   22 {
   23         const u_int8_t *s = (const u_int8_t *)buf;
   24 
   25         while (len-- != 0) {
   26                 hval *= FNV_32_PRIME;
   27                 hval ^= *s++;
   28         }
   29         return hval;
   30 }
   31 
   32 static __inline Fnv32_t
   33 fnv_32_str(const char *str, Fnv32_t hval)
   34 {
   35         const u_int8_t *s = (const u_int8_t *)str;
   36         Fnv32_t c;
   37 
   38         while ((c = *s++) != 0) {
   39                 hval *= FNV_32_PRIME;
   40                 hval ^= c;
   41         }
   42         return hval;
   43 }
   44 
   45 static __inline Fnv64_t
   46 fnv_64_buf(const void *buf, size_t len, Fnv64_t hval)
   47 {
   48         const u_int8_t *s = (const u_int8_t *)buf;
   49 
   50         while (len-- != 0) {
   51                 hval *= FNV_64_PRIME;
   52                 hval ^= *s++;
   53         }
   54         return hval;
   55 }
   56 
   57 static __inline Fnv64_t
   58 fnv_64_str(const char *str, Fnv64_t hval)
   59 {
   60         const u_int8_t *s = (const u_int8_t *)str;
   61         u_register_t c;          /* 32 bit on i386, 64 bit on alpha,ia64 */
   62 
   63         while ((c = *s++) != 0) {
   64                 hval *= FNV_64_PRIME;
   65                 hval ^= c;
   66         }
   67         return hval;
   68 }

Cache object: 4976423acd01d2cbf4d217ab2a8f7e59


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.