bit_raw.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <cstddef>
  3. #include <span>
  4. #include "bit_reader.h"
  5. #include "bit_writer.h"
  6. namespace sunrise::middleware::encoding::bits {
  7. /**
  8. * Writes bytes in memory order.
  9. * Raw fields copy bytes and keep engine order. Value fields are most-significant-bit first.
  10. * @param writer Open writer.
  11. * @param bytes Source bytes.
  12. * @return True when every byte fit the output.
  13. */
  14. [[nodiscard]] bool write_raw(Writer& writer, std::span<const std::byte> bytes) noexcept;
  15. /**
  16. * Reads bytes in memory order.
  17. * @param reader Open reader.
  18. * @param bytes Destination, filled completely or not at all.
  19. * @return True when the whole field was available.
  20. */
  21. [[nodiscard]] bool read_raw(Reader& reader, std::span<std::byte> bytes) noexcept;
  22. /**
  23. * Skips bytes in memory order.
  24. * @param reader Open reader.
  25. * @param count Byte count to consume.
  26. * @return True when the whole field was available.
  27. */
  28. [[nodiscard]] bool skip_raw(Reader& reader, std::size_t count) noexcept;
  29. /**
  30. * Reads one raw 64-bit integer.
  31. * A raw field keeps memory order, so an engine integer arrives low byte first.
  32. * @param reader Open reader.
  33. * @param value Receives the host-order value.
  34. * @return True when all eight bytes were available.
  35. */
  36. [[nodiscard]] bool read_raw_u64(Reader& reader, std::uint64_t& value) noexcept;
  37. /**
  38. * Writes one raw 64-bit integer, low byte first.
  39. * @param writer Open writer.
  40. * @param value Host-order value.
  41. * @return True when all eight bytes fit.
  42. */
  43. [[nodiscard]] bool write_raw_u64(Writer& writer, std::uint64_t value) noexcept;
  44. } // namespace sunrise::middleware::encoding::bits