31#ifndef ETL_CRC_IMPLEMENTATION_INCLUDED
32#define ETL_CRC_IMPLEMENTATION_INCLUDED
34#include "../platform.h"
35#include "../frame_check_sequence.h"
36#include "../static_assert.h"
38#include "../type_traits.h"
44#if defined(ETL_COMPILER_KEIL)
45#pragma diag_suppress 1300
55 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect, TAccumulator Entry>
60 static ETL_CONSTANT
bool Do_Poly = Reflect ? (Entry &
TAccumulator(1U)) != 0
U
61 : (Entry & (
TAccumulator(1U) << (Accumulator_Bits - 1U))) != 0
U;
66 :
TAccumulator(Do_Poly ? (Entry << 1U) ^ Polynomial : (Entry << 1U));
69 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect, TAccumulator Entry>
75 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index, u
int8_t Chunk_Bits>
83 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
88 static ETL_CONSTANT
size_t Shift_Bits =
size_t(Accumulator_Bits - 2U);
95 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
98 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
101 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
106 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
111 static ETL_CONSTANT
size_t Shift_Bits =
size_t(Accumulator_Bits - 4U);
120 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
123 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
126 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
131 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
136 static ETL_CONSTANT
size_t Shift_Bits =
size_t(Accumulator_Bits - 8U);
149 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
152 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
155 template <
typename TAccumulator,
size_t Accumulator_Bits, TAccumulator Polynomial,
bool Reflect,
size_t Index>
165 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask,
bool Reflect>
166 static ETL_CONSTEXPR14
183 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask,
bool Reflect>
184 static ETL_CONSTEXPR14
201 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask,
bool Reflect>
202 static ETL_CONSTEXPR14
203 typename etl::enable_if<(Accumulator_Bits == Chunk_Bits) && !Reflect, TAccumulator>::type
204 crc_update_chunk(TAccumulator crc, uint8_t value,
const TAccumulator table[])
208 uint8_t index = (crc >> (Accumulator_Bits - Chunk_Bits)) ^ value;
218 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask,
bool Reflect>
219 static ETL_CONSTEXPR14
220 typename etl::enable_if<(Accumulator_Bits == Chunk_Bits) && Reflect, TAccumulator>::type
221 crc_update_chunk(TAccumulator crc, uint8_t value,
const TAccumulator table[])
225 uint8_t index = (crc & Chunk_Mask) ^ value;
235 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect,
size_t Table_Size>
240 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
259 if ETL_IF_CONSTEXPR(Reflect)
278 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
284 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
315 if ETL_IF_CONSTEXPR(Reflect)
330 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
336 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
614 template <
typename TAccumulator,
size_t Accumulator_Bits,
size_t Chunk_Bits, u
int8_t Chunk_Mask, TAccumulator Polynomial,
bool Reflect>
620 template <
typename TCrcParameters,
size_t Table_Size>
625 template <
typename TCrcParameters>
627 TCrcParameters::Accumulator_Bits,
630 TCrcParameters::Polynomial,
631 TCrcParameters::Reflect,
634 typedef typename TCrcParameters::accumulator_type accumulator_type;
635 typedef accumulator_type value_type;
638 ETL_CONSTEXPR accumulator_type initial()
const
641 : TCrcParameters::Initial;
645 ETL_CONSTEXPR accumulator_type
final(accumulator_type
crc)
const
647 return crc ^ TCrcParameters::Xor_Out;
653 template <
typename TCrcParameters>
655 TCrcParameters::Accumulator_Bits,
658 TCrcParameters::Polynomial,
659 TCrcParameters::Reflect,
662 typedef typename TCrcParameters::accumulator_type accumulator_type;
663 typedef accumulator_type value_type;
666 ETL_CONSTEXPR accumulator_type initial()
const
669 : TCrcParameters::Initial;
673 ETL_CONSTEXPR accumulator_type
final(accumulator_type
crc)
const
675 return crc ^ TCrcParameters::Xor_Out;
681 template <
typename TCrcParameters>
683 TCrcParameters::Accumulator_Bits,
686 TCrcParameters::Polynomial,
687 TCrcParameters::Reflect,
690 typedef typename TCrcParameters::accumulator_type accumulator_type;
691 typedef accumulator_type value_type;
694 ETL_CONSTEXPR accumulator_type initial()
const
697 : TCrcParameters::Initial;
701 ETL_CONSTEXPR accumulator_type
final(accumulator_type
crc)
const
703 return crc ^ TCrcParameters::Xor_Out;
711 template <
typename TCrcParameters,
size_t Table_Size>
731 template<
typename TIterator>
Basic parameterised CRC type.
Definition crc_implementation.h:713
ETL_CONSTEXPR14 crc_type(TIterator begin, const TIterator end)
Definition crc_implementation.h:732
ETL_CONSTEXPR14 crc_type()
Default constructor.
Definition crc_implementation.h:721
CRC Partial Table Entry.
Definition crc_implementation.h:57
CRC Table Entry.
Definition crc_implementation.h:77
Definition frame_check_sequence.h:98
enable_if
Definition type_traits_generator.h:1186
bitset_ext
Definition absolute.h:38
ETL_CONSTEXPR TContainer::iterator begin(TContainer &container)
Definition iterator.h:962
ETL_CONSTEXPR TContainer::iterator end(TContainer &container)
Definition iterator.h:992
pair holds two objects of arbitrary type
Definition utility.h:164
Definition crc_implementation.h:621
Definition crc_implementation.h:236