31 #ifndef ETL_PEARSON_INCLUDED
32 #define ETL_PEARSON_INCLUDED
37 #include "static_assert.h"
43 ETL_STATIC_ASSERT(ETL_8BIT_SUPPORT,
"This file does not currently support targets with no 8bit type");
45 #if defined(ETL_COMPILER_KEIL)
46 #pragma diag_suppress 1300
59 template <const
size_t HASH_LENGTH>
80 template<
typename TIterator>
84 ETL_STATIC_ASSERT(
sizeof(
typename etl::iterator_traits<TIterator>::value_type) == 1,
"Type not supported");
103 template<
typename TIterator>
106 ETL_STATIC_ASSERT(
sizeof(
typename etl::iterator_traits<TIterator>::value_type) == 1,
"Type not supported");
119 static const uint8_t PEARSON_LOOKUP[] =
121 228, 39, 61, 95, 227, 187, 0, 197, 31, 189, 161, 222, 34, 15, 221, 246,
122 19, 234, 6, 50, 113, 3, 91, 63, 77, 245, 144, 2, 183, 196, 25, 226,
123 97, 126, 48, 59, 217, 4, 100, 145, 12, 88, 203, 149, 80, 154, 38, 27,
124 224, 218, 158, 115, 202, 79, 53, 83, 242, 36, 139, 131, 136, 191, 42, 170,
125 23, 99, 156, 51, 143, 60, 233, 206, 62, 108, 17, 67, 81, 71, 93, 195,
126 26, 231, 247, 96, 24, 200, 176, 209, 152, 212, 138, 165, 75, 185, 130, 248,
127 125, 110, 10, 116, 201, 90, 69, 204, 85, 251, 78, 157, 47, 184, 169, 141,
128 134, 230, 89, 21, 146, 46, 55, 128, 148, 207, 216, 11, 114, 199, 103, 102,
129 166, 244, 5, 104, 225, 160, 132, 28, 172, 65, 121, 140, 153, 119, 198, 210,
130 58, 87, 117, 177, 33, 22, 13, 37, 49, 174, 109, 40, 73, 211, 18, 167,
131 164, 252, 168, 74, 30, 173, 35, 98, 66, 193, 94, 175, 86, 54, 179, 122,
132 220, 151, 192, 29, 133, 254, 155, 127, 240, 232, 190, 180, 8, 68, 236, 20,
133 137, 92, 219, 208, 52, 250, 147, 142, 111, 112, 120, 45, 135, 255, 123, 229,
134 57, 182, 243, 124, 186, 253, 7, 237, 9, 16, 70, 171, 235, 107, 223, 118,
135 215, 178, 194, 181, 43, 188, 106, 105, 64, 241, 84, 238, 159, 44, 32, 76,
136 213, 163, 150, 101, 129, 14, 249, 205, 214, 1, 41, 56, 162, 72, 239, 82
141 for (
size_t i = 0; i < HASH_LENGTH; ++i)
143 hash[i] = PEARSON_LOOKUP[(uint32_t(value_) + i) % 256];
150 for (
size_t i = 0; i < HASH_LENGTH; ++i)
152 hash[i] = PEARSON_LOOKUP[
hash[i] ^ value_];
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition: container.h:49
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition: container.h:99
void add(uint8_t value_)
Definition: pearson.h:117
void reset()
Resets the hash to the initial state.
Definition: pearson.h:93
value_type value() const
Gets the hash value.
Definition: pearson.h:160
void add(TIterator begin, const TIterator end)
Definition: pearson.h:104
pearson(TIterator begin, const TIterator end)
Definition: pearson.h:81
pearson()
Default constructor.
Definition: pearson.h:69
Definition: absolute.h:37