61#if ETL_NOT_USING_64BIT_TYPES
62 ETL_STATIC_ASSERT((etl::is_same<THash, uint32_t>::value),
"Only 32 bit types supported");
64 ETL_STATIC_ASSERT((etl::is_same<THash, uint32_t>::value || etl::is_same<THash, uint64_t>::value),
"Only 32 & 64 bit types supported");
67 typedef THash value_type;
85 template <
typename TIterator>
89 ETL_STATIC_ASSERT(
sizeof(
typename etl::iterator_traits<TIterator>::value_type) == 1,
"Incompatible type");
94 block |=
static_cast<value_type
>(
static_cast<value_type
>(*begin) << (block_fill_count * 8U));
97 if (++block_fill_count == FULL_BLOCK)
100 block_fill_count = 0;
116 block_fill_count = 0;
117 is_finalised =
false;
125 template <
typename TIterator>
128 ETL_STATIC_ASSERT(
sizeof(
typename etl::iterator_traits<TIterator>::value_type) == 1,
"Incompatible type");
133 block |=
static_cast<value_type
>(
static_cast<value_type
>(*begin) << (block_fill_count * 8U));
136 if (++block_fill_count == FULL_BLOCK)
139 block_fill_count = 0;
157 block |=
static_cast<value_type
>(
static_cast<value_type
>(value_) << (block_fill_count * 8U));
159 if (++block_fill_count == FULL_BLOCK)
162 block_fill_count = 0;
181 operator value_type()
199 hash = (hash * MULTIPLY) + ADD;
215 hash ^= (hash >> 16U);
216 hash *= 0x85EBCA6BUL;
217 hash ^= (hash >> 13U);
218 hash *= 0xC2B2AE35UL;
219 hash ^= (hash >> 16U);
226 uint8_t block_fill_count;
232 static ETL_CONSTANT uint8_t FULL_BLOCK = 4U;
233 static ETL_CONSTANT value_type CONSTANT1 = 0xCC9E2D51UL;
234 static ETL_CONSTANT value_type CONSTANT2 = 0x1B873593UL;
235 static ETL_CONSTANT value_type SHIFT1 = 15;
236 static ETL_CONSTANT value_type SHIFT2 = 13;
237 static ETL_CONSTANT value_type MULTIPLY = 5;
238 static ETL_CONSTANT value_type ADD = 0xE6546B64UL;