177 lines
3.9 KiB
C++
Raw Permalink Normal View History

2025-06-05 10:06:43 +08:00
#ifndef ZCHECKSUM_HPP
#define ZCHECKSUM_HPP
#include <cstdint>
#include <vector>
namespace zlib_cpp {
/**
* @brief Adler-32
*/
class ZAdler32 {
private:
uint32_t _adler = 1; // 初始Adler-32值为1
public:
/**
* @brief
*/
ZAdler32() = default;
/**
* @brief
*
* @param initial Adler-32
*/
explicit ZAdler32(uint32_t initial);
/**
* @brief
*
* @param data
* @param length
* @return
*/
uint32_t update(const uint8_t* data, size_t length);
/**
* @brief
*
* @param data
* @return
*/
uint32_t update(const std::vector<uint8_t>& data);
/**
* @brief
*
* @return
*/
uint32_t getValue() const;
/**
* @brief
*/
void reset();
/**
* @brief Adler-32
*
* @param data
* @param length
* @param initial Adler-321
* @return
*/
static uint32_t calculate(const uint8_t* data, size_t length, uint32_t initial = 1);
/**
* @brief Adler-32
*
* @param data
* @param initial Adler-321
* @return
*/
static uint32_t calculate(const std::vector<uint8_t>& data, uint32_t initial = 1);
/**
* @brief Adler-32
*
* @param adler1
* @param adler2
* @param len2
* @return
*/
static uint32_t combine(uint32_t adler1, uint32_t adler2, size_t len2);
};
/**
* @brief CRC-32
*/
class ZCRC32 {
private:
uint32_t _crc = 0; // 初始CRC-32值为0
public:
/**
* @brief
*/
ZCRC32() = default;
/**
* @brief
*
* @param initial CRC-32
*/
explicit ZCRC32(uint32_t initial);
/**
* @brief
*
* @param data
* @param length
* @return
*/
uint32_t update(const uint8_t* data, size_t length);
/**
* @brief
*
* @param data
* @return
*/
uint32_t update(const std::vector<uint8_t>& data);
/**
* @brief
*
* @return
*/
uint32_t getValue() const;
/**
* @brief
*/
void reset();
/**
* @brief CRC-32
*
* @param data
* @param length
* @param initial CRC-320
* @return
*/
static uint32_t calculate(const uint8_t* data, size_t length, uint32_t initial = 0);
/**
* @brief CRC-32
*
* @param data
* @param initial CRC-320
* @return
*/
static uint32_t calculate(const std::vector<uint8_t>& data, uint32_t initial = 0);
/**
* @brief CRC-32
*
* @param crc1
* @param crc2
* @param len2
* @return
*/
static uint32_t combine(uint32_t crc1, uint32_t crc2, size_t len2);
/**
* @brief CRC-32
*
* @return CRC-32
*/
static const uint32_t* getTable();
};
} // namespace zlib_cpp
#endif // ZCHECKSUM_HPP