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 |
构造std::error_code
err | error code. |
通过struct_pack::errc
构造std::error_code
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
,并手动标明结构体内元素的个数。
样例代码: