|
yaLanTingLibs
|
高性能,head-only,直接解析C++结构体的二进制序列化库。 更多...
类 | |
| struct | expected |
deserialize函数的返回值类型 更多... | |
| struct | struct_pack::trivial_view< T > |
trivial_view<T> 是一个平凡结构体的视图,在类型系统上等价于T。 更多... | |
| struct | struct_pack::compatible< T, version > |
| 兼容字段类型 更多... | |
| struct | struct_pack::string_literal< CharType, Size > |
| 编译期字符串类型 更多... | |
| struct | struct_pack::err_code |
struct_pack的错误码,存储了一个枚举值struct_pack::errc,可用于判断序列化是否成功。 更多... | |
枚举 | |
| enum class | struct_pack::errc { ok = 0 , no_buffer_space , invalid_buffer , hash_conflict , invalid_width_of_container_length } |
| struct_pack的错误值枚举 更多... | |
| enum | struct_pack::sp_config : uint64_t { DEFAULT = 0 , DISABLE_TYPE_INFO = 0b1 , ENABLE_TYPE_INFO = 0b10 , DISABLE_ALL_META_INFO = 0b11 , ENCODING_WITH_VARINT = 0b100 , USE_FAST_VARINT = 0b1000 } |
| struct_pack的配置 更多... | |
函数 | |
| std::error_code | struct_pack::make_error_code (struct_pack::errc err) |
构造std::error_code | |
| std::string | struct_pack::error_message (struct_pack::errc err) |
| 获取错误消息 | |
| template<typename... Args> | |
| constexpr std::uint32_t | struct_pack::get_type_code () |
| 获取类型校验码 | |
| template<typename... Args> | |
| constexpr decltype(auto) | struct_pack::get_type_literal () |
| template<typename... Args> | |
| constexpr struct_pack::serialize_buffer_size | struct_pack::get_needed_size (const Args &...args) |
| 获取序列化长度 | |
| template<uint64_t conf = sp_config::DEFAULT, typename Writer , typename... Args> | |
| void | struct_pack::serialize_to (Writer &writer, const Args &...args) |
| 将对象序列化并写入到给定的流/缓冲区。 | |
| template<uint64_t conf = sp_config::DEFAULT, typename... Args> | |
| void | struct_pack::serialize_to (char *buffer, serialize_buffer_size len, const Args &...args) |
| 将对象序列化到给定的内存地址 | |
| template<uint64_t conf = sp_config::DEFAULT, detail::struct_pack_buffer Buffer, typename... Args> | |
| void | struct_pack::serialize_to_with_offset (Buffer &buffer, std::size_t offset, const Args &...args) |
| 将序列化结果保存到给定缓冲区尾部,并在序列化结果的头部预留一段字节。 | |
| template<detail::struct_pack_buffer Buffer = std::vector<char>, typename... Args> | |
| Buffer | struct_pack::serialize (const Args &...args) |
| 序列化对象并返回结果 | |
| template<detail::struct_pack_buffer Buffer = std::vector<char> typename... Args> | |
| Buffer | struct_pack::serialize_with_offset (std::size_t offset, const Args &...args) |
| 将序列化结果保存到容器并返回,同时在序列化结果的头部预留一段字节。 | |
| template<uint64_t conf, detail::struct_pack_buffer Buffer = std::vector<char>, typename... Args> | |
| Buffer | struct_pack::serialize (const Args &...args) |
| 按给定配置序列化对象并返回结果 | |
| template<uint64_t conf, detail::struct_pack_buffer Buffer = std::vector<char>, typename... Args> | |
| Buffer | struct_pack::serialize_with_offset (std::size_t offset, const Args &...args) |
| 按给定配置将序列化结果保存到容器并返回,同时在序列化结果的头部预留一段字节。 | |
| template<uint64_t conf = sp_config::DEFAULT, typename T , typename... Args, struct_pack::detail::deserialize_view View> | |
| struct_pack::err_code | struct_pack::deserialize_to (T &t, const View &v, Args &...args) |
| 从视图中反序列化目的对象 | |
| template<uint64_t conf = sp_config::DEFAULT, typename T , typename... Args> | |
| struct_pack::err_code | struct_pack::deserialize_to (T &t, const char *data, size_t size, Args &...args) |
| 将内存中的数据反序列化到目的对象 | |
| template<uint64_t conf = sp_config::DEFAULT, typename T , typename... Args, struct_pack::reader_t Reader> | |
| struct_pack::err_code | struct_pack::deserialize_to (T &t, Reader &reader, Args &...args) |
| 将输入流中的数据反序列化到目的对象 | |
| template<uint64_t conf = sp_config::DEFAULT, typename T , typename... Args, struct_pack::detail::deserialize_view View> | |
| struct_pack::err_code | struct_pack::deserialize_to_with_offset (T &t, const View &v, size_t &offset, Args &...args) |
| 从视图中反序列化目的对象,反序列化时跳过开头的若干字节 | |
| template<uint64_t conf = sp_config::DEFAULT, typename T , typename... Args> | |
| struct_pack::err_code | struct_pack::deserialize_to_with_offset (T &t, const char *data, size_t size, size_t &offset, Args &...args) |
| 将内存中的数据反序列化到目的对象,反序列化时跳过开头的若干字节 | |
| template<typename... Args, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::deserialize (const View &v) |
| 反序列化视图中的数据,并按值返回 | |
| template<typename... Args> | |
| auto | struct_pack::deserialize (const char *data, size_t size) |
| 反序列化内存中的数据,并按值返回 | |
| template<typename... Args, struct_pack::reader_t Reader> | |
| auto | struct_pack::deserialize (Reader &v) |
| 反序列化输入流中的数据,并按值返回 | |
| template<typename... Args, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::deserialize (const View &v, size_t &consume_len) |
| 反序列化视图中的数据,并按值返回,并在参数中返回消耗的数据长度。 | |
| template<typename... Args> | |
| auto | struct_pack::deserialize (const char *data, size_t size, size_t &consume_len) |
| 反序列化内存中的数据,并按值返回,并在参数中返回消耗的数据长度。 | |
| template<uint64_t conf, typename... Args, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::deserialize (const View &v) |
| 按给定配置反序列化视图中的数据,并按值返回 | |
| template<uint64_t conf, typename... Args> | |
| auto | struct_pack::deserialize (const char *data, size_t size) |
| 按给定配置反序列化内存中的数据,并按值返回 | |
| template<uint64_t conf, typename... Args, struct_pack::reader_t Reader> | |
| auto | struct_pack::deserialize (Reader &v) |
| 按给定配置反序列化输入流中的数据,并按值返回 | |
| template<uint64_t conf, typename... Args, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::deserialize (const View &v, size_t &consume_len) |
| 按给定配置反序列化视图中的数据,并按值返回,并在参数中返回消耗的数据长度。 | |
| template<uint64_t conf, typename... Args> | |
| auto | struct_pack::deserialize (const char *data, size_t size, size_t &consume_len) |
| 按给定配置反序列化内存中的数据,并按值返回,并在参数中返回消耗的数据长度。 | |
| template<typename... Args, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::deserialize_with_offset (const View &v, size_t &offset) |
| 从视图中反序列化目的对象并保存到返回值,反序列化时跳过开头的若干字节 | |
| template<typename... Args> | |
| auto | struct_pack::deserialize_with_offset (const char *data, size_t size, size_t &offset) |
| 从内存中反序列化目的对象并保存到返回值,反序列化时跳过开头的若干字节 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT, typename Field , struct_pack::detail::deserialize_view View> | |
| struct_pack::err_code | struct_pack::get_field_to (Field &dst, const View &v) |
| 从视图中反序列化一个字段并保存到目的对象 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT, typename Field > | |
| struct_pack::err_code | struct_pack::get_field_to (Field &dst, const char *data, size_t size) |
| 从内存中反序列化一个字段并保存到目的对象 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT, typename Field , struct_pack::reader_t Reader> | |
| struct_pack::err_code | struct_pack::get_field_to (Field &dst, Reader &reader) |
| 从输入流中反序列化一个字段并保存到目的对象 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT, struct_pack::detail::deserialize_view View> | |
| auto | struct_pack::get_field (const View &v) |
| 从视图中反序列化一个字段并返回 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT> | |
| auto | struct_pack::get_field (const char *data, size_t size) |
| 从内存中反序列化一个字段并返回 | |
| template<typename T , size_t I, uint64_t conf = sp_config::DEFAULT, struct_pack::reader_t Reader> | |
| auto | struct_pack::get_field (Reader &reader) |
| 从输入流中反序列化一个字段并返回 | |
| template<typename BaseClass , typename... DerivedClasses, struct_pack::detail::deserialize_view View> | |
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > | struct_pack::deserialize_derived_class (const View &v) |
| 从视图中反序列化派生类到基类的指针 | |
| template<typename BaseClass , typename... DerivedClasses> | |
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > | struct_pack::deserialize_derived_class (const char *data, size_t size) |
| 从内存中反序列化派生类到基类的指针 | |
| template<typename BaseClass , typename... DerivedClasses, struct_pack::reader_t Reader> | |
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > | struct_pack::deserialize_derived_class (Reader &reader) |
| 从输入流中反序列化派生类到基类的指针 | |
变量 | |
| template<typename T > | |
| constexpr std::size_t | struct_pack::members_count |
| 手动标注结构体成员个数 | |
高性能,head-only,直接解析C++结构体的二进制序列化库。
|
strong |
struct_pack的错误值枚举
struct_pack的错误值枚举,各枚举值解释如下:
| enum struct_pack::sp_config : uint64_t |
| auto struct_pack::deserialize | ( | const char * | data, |
| size_t | size | ||
| ) |
反序列化内存中的数据,并按值返回
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| data | 起始地址 |
| size | 数据长度 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize | ( | const char * | data, |
| size_t | size | ||
| ) |
按给定配置反序列化内存中的数据,并按值返回
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| data | 起始地址 |
| size | 数据长度 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize | ( | const char * | data, |
| size_t | size, | ||
| size_t & | consume_len | ||
| ) |
反序列化内存中的数据,并按值返回,并在参数中返回消耗的数据长度。
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| data | 起始地址 |
| size | 数据长度 |
| consume_len | 出参,保存消耗的数据长度。 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected当错误发生时,consume_len会被设为0。
| auto struct_pack::deserialize | ( | const char * | data, |
| size_t | size, | ||
| size_t & | consume_len | ||
| ) |
按给定配置反序列化内存中的数据,并按值返回,并在参数中返回消耗的数据长度。
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| data | 起始地址 |
| size | 数据长度 |
| consume_len | 出参,保存消耗的数据长度。 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected当错误发生时,consume_len会被设为0。
| auto struct_pack::deserialize | ( | const View & | v | ) |
反序列化视图中的数据,并按值返回
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 存有struct_pack序列化数据的视图 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize | ( | const View & | v | ) |
按给定配置反序列化视图中的数据,并按值返回
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 存有struct_pack序列化数据的视图 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize | ( | const View & | v, |
| size_t & | consume_len | ||
| ) |
反序列化视图中的数据,并按值返回,并在参数中返回消耗的数据长度。
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 存有struct_pack序列化数据的视图 |
| consume_len | 出参,保存消耗的数据长度。 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected当错误发生时,consume_len会被设为0。
| auto struct_pack::deserialize | ( | const View & | v, |
| size_t & | consume_len | ||
| ) |
按给定配置反序列化视图中的数据,并按值返回,并在参数中返回消耗的数据长度。
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 存有struct_pack序列化数据的视图 |
| consume_len | 出参,保存消耗的数据长度。 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected当错误发生时,consume_len会被设为0。
| auto struct_pack::deserialize | ( | Reader & | v | ) |
反序列化输入流中的数据,并按值返回
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| Reader | 输入流类型Reader,该类型需要满足约束struct_pack::reader_t |
| v | 输入流 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize | ( | Reader & | v | ) |
按给定配置反序列化输入流中的数据,并按值返回
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| Reader | 输入流类型Reader,该类型需要满足约束struct_pack::reader_t |
| v | 输入流 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > struct_pack::deserialize_derived_class | ( | const char * | data, |
| size_t | size | ||
| ) |
从内存中反序列化派生类到基类的指针
| BaseClass | 基类类型 |
| DerivedClasses | 所有可能的派生类类型 |
| data | 起始地址 |
| size | 数据长度 |
std::unique_ptr<BaseClass>)或struct_pack::err_code类型的错误码。详见struct_pack::expected本函数用于在不知道派生类具体类型的情况下,将其反序列化到基类的指针。
样例代码
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > struct_pack::deserialize_derived_class | ( | const View & | v | ) |
从视图中反序列化派生类到基类的指针
| BaseClass | 基类类型 |
| DerivedClasses | 所有可能的派生类类型 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 视图 |
std::unique_ptr<BaseClass>)或struct_pack::err_code类型的错误码。详见struct_pack::expected本函数用于在不知道派生类具体类型的情况下,将其反序列化到基类的指针。
样例代码
| struct_pack::expected< std::unique_ptr< BaseClass >, struct_pack::err_code > struct_pack::deserialize_derived_class | ( | Reader & | reader | ) |
从输入流中反序列化派生类到基类的指针
| BaseClass | 基类类型 |
| DerivedClasses | 所有可能的派生类类型 |
| Reader | 输入流类型,需要满足struct_pack::reader_t约束 |
| reader |
std::unique_ptr<BaseClass>)或struct_pack::err_code类型的错误码。详见struct_pack::expected | struct_pack::err_code struct_pack::deserialize_to | ( | T & | t, |
| const char * | data, | ||
| size_t | size, | ||
| Args &... | args | ||
| ) |
将内存中的数据反序列化到目的对象
| conf | 序列化配置,详见struct_pack::sp_config |
| T | 对象的类型T |
| Args | 对象的类型Args,当Args不为空时,会将数据按std::tuple<T,Args...>格式将数据反序列化保存到参数中。 |
| t | 待反序列化的对象t |
| data | 起始地址 |
| size | 数据的长度 |
| args | 待反序列化的对象args |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。 样例代码:
| struct_pack::err_code struct_pack::deserialize_to | ( | T & | t, |
| const View & | v, | ||
| Args &... | args | ||
| ) |
从视图中反序列化目的对象
| conf | 序列化配置,详见struct_pack::sp_config |
| T | 对象的类型T |
| Args | 对象的类型Args,当Args不为空时,会将数据按std::tuple<T,Args...>格式将数据反序列化保存到参数中。 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 约束,如std::string_view |
| t | 待反序列化的对象t |
| v | 存有struct_pack序列化数据的视图 |
| args | 待反序列化的对象args |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。 样例代码:
| struct_pack::err_code struct_pack::deserialize_to | ( | T & | t, |
| Reader & | reader, | ||
| Args &... | args | ||
| ) |
将输入流中的数据反序列化到目的对象
| conf | 序列化配置,详见struct_pack::sp_config |
| T | 对象的类型T |
| Args | 对象的类型Args,当Args不为空时,会将数据按std::tuple<T,Args...>格式将数据反序列化保存到参数中。 |
| Reader | 输入流类型Reader,该类型需要满足约束struct_pack::reader_t |
| t | 待反序列化的对象t |
| reader | 输入流 |
| args |
struct_pack::errc::ok,说明反序列化失败。当反序列化失败时,t的值可能被部分修改。
| struct_pack::err_code struct_pack::deserialize_to_with_offset | ( | T & | t, |
| const char * | data, | ||
| size_t | size, | ||
| size_t & | offset, | ||
| Args &... | args | ||
| ) |
将内存中的数据反序列化到目的对象,反序列化时跳过开头的若干字节
| conf | 序列化配置,详见struct_pack::sp_config |
| T | 对象的类型T |
| Args | 对象的类型Args,当Args不为空时,会将数据按std::tuple<T,Args...>格式将数据反序列化保存到参数中。 |
| t | 待反序列化的对象t |
| data | 起始地址 |
| size | 数据长度 |
| offset | 跳过开头字节的长度 |
| args | 待反序列化的对象args |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。
| struct_pack::err_code struct_pack::deserialize_to_with_offset | ( | T & | t, |
| const View & | v, | ||
| size_t & | offset, | ||
| Args &... | args | ||
| ) |
从视图中反序列化目的对象,反序列化时跳过开头的若干字节
| conf | 序列化配置,详见struct_pack::sp_config |
| T | 对象的类型T |
| Args | 对象的类型Args,当Args不为空时,会将数据按std::tuple<T,Args...>格式将数据反序列化保存到参数中。 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| t | 待反序列化的对象t |
| v | 存有struct_pack序列化数据的视图 |
| offset | 跳过开头字节的长度 |
| args | 待反序列化的对象args |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。
| auto struct_pack::deserialize_with_offset | ( | const char * | data, |
| size_t | size, | ||
| size_t & | offset | ||
| ) |
从内存中反序列化目的对象并保存到返回值,反序列化时跳过开头的若干字节
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| data | 起始地址 |
| size | 数据长度 |
| offset | 反序列化起始位置的偏移量 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码:
| auto struct_pack::deserialize_with_offset | ( | const View & | v, |
| size_t & | offset | ||
| ) |
从视图中反序列化目的对象并保存到返回值,反序列化时跳过开头的若干字节
| Args | 反序列化对象的类型,至少应填写一个,当填写多个时,按std::tuple<Args...>类型反序列化 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 存有struct_pack序列化数据的视图 |
| offset | 反序列化起始位置的偏移量 |
struct_pack::expected<std::tuple<Args...>, struct_pack::err_code>。该类型存储了反序列化结果或struct_pack::err_code类型的错误码。详见struct_pack::expected
|
inline |
获取错误消息
| err |
本函数获取struct_pack::errc对应的错误消息。
| auto struct_pack::get_field | ( | const char * | data, |
| size_t | size | ||
| ) |
从内存中反序列化一个字段并返回
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| data | 起始地址 |
| size | 数据长度 |
struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码
| auto struct_pack::get_field | ( | const View & | v | ) |
从视图中反序列化一个字段并返回
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| v | 视图 |
struct_pack::err_code类型的错误码。详见struct_pack::expected样例代码
| auto struct_pack::get_field | ( | Reader & | reader | ) |
从输入流中反序列化一个字段并返回
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| Reader | 输入流类型,需要满足struct_pack::reader_t约束 |
| reader | 输入流 |
struct_pack::err_code类型的错误码。详见struct_pack::expected | struct_pack::err_code struct_pack::get_field_to | ( | Field & | dst, |
| const char * | data, | ||
| size_t | size | ||
| ) |
从内存中反序列化一个字段并保存到目的对象
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| Field | 字段类型 |
| dst | 目的对象 |
| v | 数据视图 |
| data | 起始地址 |
| size | 数据长度 |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。 样例代码
| struct_pack::err_code struct_pack::get_field_to | ( | Field & | dst, |
| const View & | v | ||
| ) |
从视图中反序列化一个字段并保存到目的对象
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| Field | 字段类型 |
| View | 视图类型,需满足struct_pack::detail::deserialize_view约束 |
| dst | 目的对象 |
| v | 数据视图 |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。
样例代码
| struct_pack::err_code struct_pack::get_field_to | ( | Field & | dst, |
| Reader & | reader | ||
| ) |
从输入流中反序列化一个字段并保存到目的对象
| T | 反序列化对象的类型 |
| I | 反序列化对象的第I个字段(从0开始计数) |
| conf | 序列化配置,详见struct_pack::sp_config |
| Field | 字段类型 |
| Reader | 输入流类型,需要满足struct_pack::reader_t约束 |
| dst | 目的对象 |
| reader | 输入流 |
struct_pack::errc::ok,说明反序列化失败当反序列化失败时,t的值可能被部分修改。
|
constexpr |
获取序列化长度
| Args |
| args |
用于预先分配好合适长度的内存,通常配合struct_pack::serialize_to函数使用。 如果类型允许,该计算可能在编译期完成。
样例代码:
|
constexpr |
获取类型校验码
| Args |
返回Args的31位类型校验码。当传入的参数多于一个时,返回类型std::tuple<Args...>的校验码
样例代码:
| Args |
|
constexpr |
本函数返回编译期计算出的类型名,并按struct_pack::string_literal<char,N>类型返回。 当传入的参数多于一个时,返回类型std::tuple<T...>的类型名。
样例代码:
|
inline |
| Buffer struct_pack::serialize | ( | const Args &... | args | ) |
序列化对象并返回结果
| Buffer | 需要序列化的对象类型,默认为std::vector<char>,需要满足detail::struct_pack_buffer约束,可以为内存连续的字节容器(如std::vector,std::string)。 |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| args | 待序列化的对象 |
序列化对象并返回结果
| Buffer struct_pack::serialize | ( | const Args &... | args | ) |
按给定配置序列化对象并返回结果
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Buffer | 需要序列化的对象类型,默认为std::vector<char>,需要满足detail::struct_pack_buffer约束,可以为内存连续的字节容器(如std::vector,std::string)。 |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| args | 待序列化的对象 |
| void struct_pack::serialize_to | ( | char * | buffer, |
| serialize_buffer_size | len, | ||
| const Args &... | args | ||
| ) |
将对象序列化到给定的内存地址
| conf | 序列化配置,详见struct_pack::sp_config |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| buffer | 内存首地址 |
| len | 序列化所需长度,该长度可通过struct_pack::get_needed_size计算得到 |
| args | 待序列化的对象 |
样例代码:
| void struct_pack::serialize_to | ( | Writer & | writer, |
| const Args &... | args | ||
| ) |
将对象序列化并写入到给定的流/缓冲区。
| conf | 序列化配置,详见struct_pack::sp_config |
| Writer | 输出流/缓冲区容器类型,对于缓冲区容器需要满足detail::struct_pack_buffer约束,可以为内存连续的字节容器(如std::vector,std::string)。 ,对于流需要满足struct_pack::writer_t约束的类型(如std::ostream) |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| writer | 输出缓冲区 |
| args | 待序列化的对象 |
需要注意的是,该函数不会清空写入的容器/流,而是会将数据附加到缓冲区尾部。
样例代码:
| void struct_pack::serialize_to_with_offset | ( | Buffer & | buffer, |
| std::size_t | offset, | ||
| const Args &... | args | ||
| ) |
将序列化结果保存到给定缓冲区尾部,并在序列化结果的头部预留一段字节。
| conf | 序列化配置,详见struct_pack::sp_config |
| Buffer | 序列化缓冲区类型,需要满足detail::struct_pack_buffer约束,缓冲区可以为内存连续的字节容器(如std::vector,std::string)。 |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| buffer | 输出缓冲区 |
| offset | 头部偏移的空闲字节长度 |
| args | 待序列化的对象 |
需要注意的是,出于性能优化考虑,预留的字节可能未被初始化,不应假设其被初始化为0。
| Buffer struct_pack::serialize_with_offset | ( | std::size_t | offset, |
| const Args &... | args | ||
| ) |
将序列化结果保存到容器并返回,同时在序列化结果的头部预留一段字节。
| Buffer | 序列化的容器(缓冲区)类型,需要满足detail::struct_pack_buffer约束,可以为内存连续的字节容器(如std::vector,std::string)。 |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| offset | 头部偏移的空闲字节长度 |
| args | 待序列化的对象 |
| Buffer struct_pack::serialize_with_offset | ( | std::size_t | offset, |
| const Args &... | args | ||
| ) |
按给定配置将序列化结果保存到容器并返回,同时在序列化结果的头部预留一段字节。
| conf | 显式指定的序列化配置,详见struct_pack::sp_config |
| Buffer | 序列化的容器(缓冲区)类型,需要满足detail::struct_pack_buffer约束,可以为内存连续的字节容器(如std::vector,std::string)。 |
| Args | 需要序列化的对象类型。当传入多个序列化对象时,函数会将其打包合并,按std::tuple类型的格式序列化。 |
| offset | 头部偏移的空闲字节长度 |
| args | 待序列化的对象 |
|
constexpr |
手动标注结构体成员个数
| T | 待纠正的结构体 |
某些特殊情况下,struct_pack可能无法正确计算结构体内的元素个数并导致编译期错误。 此时请特化模板struct_pack::members_count,并手动标明结构体内元素的个数。
样例代码: