externalize hash code to library
This commit is contained in:
parent
dd1ec2deed
commit
73263c3d04
@ -2,7 +2,7 @@
|
|||||||
#define _HASH_H
|
#define _HASH_H
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <inttypes.h>
|
#include <RokkitHash.h>
|
||||||
|
|
||||||
uint32_t IRAM_ATTR hash(const char *data, int len);
|
uint32_t IRAM_ATTR hash(const char *data, int len);
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ lib_deps_sensors =
|
|||||||
boschsensortec/BSEC Software Library @ 1.6.1480
|
boschsensortec/BSEC Software Library @ 1.6.1480
|
||||||
https://github.com/ricki-z/SDS011.git
|
https://github.com/ricki-z/SDS011.git
|
||||||
lib_deps_basic =
|
lib_deps_basic =
|
||||||
|
https://github.com/SukkoPera/Arduino-Rokkit-Hash.git
|
||||||
bblanchon/ArduinoJson @ ^6
|
bblanchon/ArduinoJson @ ^6
|
||||||
jchristensen/Timezone @ ^1.2.4
|
jchristensen/Timezone @ ^1.2.4
|
||||||
makuna/RTC @ ^2.3.5
|
makuna/RTC @ ^2.3.5
|
||||||
|
52
src/hash.cpp
52
src/hash.cpp
@ -36,55 +36,9 @@
|
|||||||
|
|
||||||
#include "hash.h"
|
#include "hash.h"
|
||||||
|
|
||||||
uint32_t IRAM_ATTR rokkit(const char *data, int len) {
|
#ifdef ROKKIT_ENABLE_8BIT_OPTIMIZATIONS
|
||||||
uint32_t hash, tmp;
|
#undef ROKKIT_ENABLE_8BIT_OPTIMIZATIONS
|
||||||
int rem;
|
#endif
|
||||||
|
|
||||||
if (len <= 0 || data == 0)
|
|
||||||
return 0;
|
|
||||||
hash = len;
|
|
||||||
rem = len & 3;
|
|
||||||
len >>= 2;
|
|
||||||
|
|
||||||
/* Main loop */
|
|
||||||
while (len > 0) {
|
|
||||||
hash += *((uint16_t *)data);
|
|
||||||
tmp = (*((uint16_t *)(data + 2)) << 11) ^ hash;
|
|
||||||
hash = (hash << 16) ^ tmp;
|
|
||||||
data += 2 * 2;
|
|
||||||
hash += hash >> 11;
|
|
||||||
len--;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle end cases */
|
|
||||||
switch (rem) {
|
|
||||||
case 3:
|
|
||||||
hash += *((uint16_t *)data);
|
|
||||||
hash ^= hash << 16;
|
|
||||||
hash ^= ((uint32_t)data[2]) << 18;
|
|
||||||
hash += hash >> 11;
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
hash += *((uint16_t *)data);
|
|
||||||
hash ^= hash << 11;
|
|
||||||
hash += hash >> 17;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
hash += (signed char)*data;
|
|
||||||
hash ^= hash << 10;
|
|
||||||
hash += hash >> 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Force "avalanching" of final 127 bits */
|
|
||||||
hash ^= hash << 3;
|
|
||||||
hash += hash >> 5;
|
|
||||||
hash ^= hash << 4;
|
|
||||||
hash += hash >> 17;
|
|
||||||
hash ^= hash << 25;
|
|
||||||
hash += hash >> 6;
|
|
||||||
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t IRAM_ATTR hash(const char *data, int len) {
|
uint32_t IRAM_ATTR hash(const char *data, int len) {
|
||||||
return rokkit(data, len);
|
return rokkit(data, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user