/* * ICrcUnit.hpp * * Created on: 19 Apr 2023 * Author: malyarenko */ #ifndef UMLIBRARY_COMMON_ICRCUNIT_HPP_ #define UMLIBRARY_COMMON_ICRCUNIT_HPP_ #include #include #include "CrcType.hpp" namespace common { namespace crc { class ICrcUnit { public: /** * @brief Функция расчёта CRC на блоке данных * * Параметры: * - @c data - Указатель на данные * - @c octet_size - Размер данных в 8-битных байтах (октетах) * * Возвращаемое значение: Расчитанный CRC * * @note Если размер данных превышает максимальный поддерживаемый, * то будет обработана лишь начальная часть данных, * размером не превышающая данный передел. * * @warning Порядок байтов прямой (MSB -> LSB): * Просмотр данных производится последовательно от старшего байта к младшему * независимо от расположения и размера адресуемого байта в модели памяти платформы. * Пример 1: 8-битный адресуемый байт * * Октеты данных в памяти: [ D1 ][ D2 ][ D3 ][ D4 ] * Порядок обработки: D1 -> D2 -> D3 * * Пример 2: 16-битный адресуемый байт * * Октеты данных в памяти: [ D1 | D2 ][ D3 | D4 ] * Порядок обработки: D1 -> D2 -> D3 -> D4 */ typedef uint32_t (*CrcCalcualtor) ( const char * data, std::size_t octet_size ); /** * @brief Инстанцирование обработчика расчёта CRC заданного типа * * @param crc_type Тип (стандарт) CRC * @return Указатель на функцию расчёта CRC; * @c nullptr в случае, если указанный тип CRC не поддерживается */ virtual CrcCalcualtor instance( CrcType crc_type ) = 0; /** * @brief Получение максимального размера данных для рассчёта CRC * * @return Максимальный размер данных в 8-битных байтах (октетах) */ virtual std::size_t getMaxDataSize() = 0; }; } /* namepsace crc */ } /* namepsace common */ #endif /* UMLIBRARY_COMMON_ICRCUNIT_HPP_ */