• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

HashFNV.cc

Go to the documentation of this file.
00001 /*
00002   This algorithm is in the public domain. This code was
00003   derived from code in the public domain.
00004 
00005   http://www.isthe.com/chongo/tech/comp/fnv/
00006 
00007   Currently implemented FNV-1a 32bit and FNV-1a 64bit
00008  */
00009 
00010 #include "HashFNV.h"
00011 
00012 #define FNV_INIT_32 ((uint32_t)0x811c9dc5)
00013 #define FNV_INIT_64 ((uint64_t)0xcbf29ce484222325ULL)
00014 
00015 // FNV-1a 64bit
00016 ATSHash32FNV1a::ATSHash32FNV1a(void)
00017 {
00018   this->clear();
00019 }
00020 
00021 void
00022 ATSHash32FNV1a::update(const void *data, size_t len)
00023 {
00024   uint8_t *bp = (uint8_t *) data;
00025   uint8_t *be = bp + len;
00026 
00027   while (bp < be) {
00028     hval ^= (uint32_t) *bp++;
00029     hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);
00030   }
00031 }
00032 
00033 void
00034 ATSHash32FNV1a::final(void)
00035 {
00036 }
00037 
00038 uint32_t
00039 ATSHash32FNV1a::get(void) const
00040 {
00041   return hval;
00042 }
00043 
00044 void
00045 ATSHash32FNV1a::clear(void)
00046 {
00047   hval = FNV_INIT_32;
00048 }
00049 
00050 // FNV-1a 64bit
00051 ATSHash64FNV1a::ATSHash64FNV1a(void)
00052 {
00053   this->clear();
00054 }
00055 
00056 void
00057 ATSHash64FNV1a::update(const void *data, size_t len)
00058 {
00059   uint8_t *bp = (uint8_t *) data;
00060   uint8_t *be = bp + len;
00061 
00062   while (bp < be) {
00063     hval ^= (uint64_t) *bp++;
00064     hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40);
00065   }
00066 }
00067 
00068 void
00069 ATSHash64FNV1a::final(void)
00070 {
00071 }
00072 
00073 uint64_t
00074 ATSHash64FNV1a::get(void) const
00075 {
00076   return hval;
00077 }
00078 
00079 void
00080 ATSHash64FNV1a::clear(void)
00081 {
00082   hval = FNV_INIT_64;
00083 }

Generated by  doxygen 1.7.1