9#include "gaia/config/config.h"
14#include "gaia/core/utility.h"
15#include "gaia/ser/impl/ser_dispatch.h"
16#include "gaia/ser/ser_common.h"
22 template <
typename Writer,
typename T>
23 void save_one(Writer& s,
const T& arg) {
24 auto saveTrivial = [](
auto& writer,
const auto& value) {
27 save_dispatch(s, arg, saveTrivial);
30 template <
typename Reader,
typename T>
31 void load_one(Reader& s, T& arg) {
32 auto loadTrivial = [](
auto& reader,
auto& value) {
35 load_dispatch(s, arg, loadTrivial);
38#if GAIA_ASSERT_ENABLED
39 template <
typename Writer,
typename T>
40 void check_one(Writer& s,
const T& arg) {
45 const auto pos0 = s.tell();
47 const auto pos1 = s.tell();
50 GAIA_ASSERT(s.tell() == pos1);
64 m_pos += (uint32_t)
sizeof(T);
67 void save_raw(
const void*, uint32_t size, [[maybe_unused]] ser::serialization_type_id
id) {
71 void seek(uint32_t pos) {
75 GAIA_NODISCARD uint32_t tell()
const {
88 GAIA_NODISCARD uint32_t
bytes(
const T& data) {
89 detail::size_counter counter;
90 detail::save_one(counter, data);
91 return counter.tell();
100 template <
typename Writer,
typename T>
101 void save(Writer& writer,
const T& data) {
102 detail::save_one(writer, data);
111 template <
typename Reader,
typename T>
112 void load(Reader& reader, T& data) {
113 detail::load_one(reader, data);
116#if GAIA_ASSERT_ENABLED
125 template <
typename Writer,
typename T>
126 void check(Writer& writer,
const T& data) {
127 detail::check_one(writer, data);
GAIA_NODISCARD uint32_t bytes(const T &data)
Calculates how many bytes data would need when serialized via ser::save. Useful when a destination st...
Definition ser_ct.h:88
void load(Reader &reader, T &data)
Read data using Reader at compile-time.
Definition ser_ct.h:112
void save(Writer &writer, const T &data)
Write data using Writer at compile-time.
Definition ser_ct.h:101