gorilla.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. #ifndef GORILLA_H
  3. #define GORILLA_H
  4. #include <stdbool.h>
  5. #include <stdint.h>
  6. #include <stddef.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11. * Low-level public API
  12. */
  13. // 32-bit API
  14. typedef struct bit_code_writer_u32 bit_code_writer_u32_t;
  15. typedef struct bit_code_reader_u32 bit_code_reader_u32_t;
  16. void bit_code_writer_u32_init(bit_code_writer_u32_t *bcw, uint32_t *buffer, uint32_t capacity);
  17. bool bit_code_writer_u32_write(bit_code_writer_u32_t *bcw, const uint32_t number);
  18. bool bit_code_writer_u32_flush(bit_code_writer_u32_t *bcw);
  19. void bit_code_reader_u32_init(bit_code_reader_u32_t *bcr, uint32_t *buffer, uint32_t capacity);
  20. bool bit_code_reader_u32_read(bit_code_reader_u32_t *bcr, uint32_t *number);
  21. bool bit_code_reader_u32_info(bit_code_reader_u32_t *bcr, uint32_t *num_entries_written,
  22. uint64_t *num_bits_written);
  23. // 64-bit API
  24. typedef struct bit_code_writer_u64 bit_code_writer_u64_t;
  25. typedef struct bit_code_reader_u64 bit_code_reader_u64_t;
  26. void bit_code_writer_u64_init(bit_code_writer_u64_t *bcw, uint64_t *buffer, uint64_t capacity);
  27. bool bit_code_writer_u64_write(bit_code_writer_u64_t *bcw, const uint64_t number);
  28. bool bit_code_writer_u64_flush(bit_code_writer_u64_t *bcw);
  29. void bit_code_reader_u64_init(bit_code_reader_u64_t *bcr, uint64_t *buffer, uint64_t capacity);
  30. bool bit_code_reader_u64_read(bit_code_reader_u64_t *bcr, uint64_t *number);
  31. bool bit_code_reader_u64_info(bit_code_reader_u64_t *bcr, uint64_t *num_entries_written,
  32. uint64_t *num_bits_written);
  33. /*
  34. * High-level public API
  35. */
  36. size_t gorilla_encode_u32(uint32_t *dst, size_t dst_len, const uint32_t *src, size_t src_len);
  37. size_t gorilla_decode_u32(uint32_t *dst, size_t dst_len, const uint32_t *src, size_t src_len);
  38. size_t gorilla_encode_u64(uint64_t *dst, size_t dst_len, const uint64_t *src, size_t src_len);
  39. size_t gorilla_decode_u64(uint64_t *dst, size_t dst_len, const uint64_t *src, size_t src_len);
  40. #ifdef __cplusplus
  41. }
  42. #endif
  43. #endif /* GORILLA_H */