Go to the documentation of this file.
9 #ifndef EAGINE_SERIALIZE_FAST_BACKEND_HPP
10 #define EAGINE_SERIALIZE_FAST_BACKEND_HPP
17 class fast_serializer_backend
18 :
public serializer_backend_id<
19 common_serializer_backend<fast_serializer_backend>,
20 EAGINE_ID_V(FastLocal)> {
21 using base = serializer_backend_id<
22 common_serializer_backend<fast_serializer_backend>,
27 using base::remaining_size;
33 auto do_write(span<const T> values,
span_size_t& done) -> result {
37 if(can_do < values.size()) {
38 values =
head(values, can_do);
41 can_do = values.size();
48 template <
typename Str>
49 auto do_write_strings(span<const Str> values,
span_size_t& done) -> result {
52 for(
auto& str : values) {
54 errors |= do_write(view_one(str.size()), written);
64 auto do_write(span<const decl_name> values,
span_size_t& done) {
65 return do_write_strings(values, done);
68 auto do_write(span<const string_view> values,
span_size_t& done) {
69 return do_write_strings(values, done);
72 auto begin_struct(
span_size_t size) -> result
final {
74 return do_write(view_one(size), written);
79 return do_write(view_one(size), written);
83 class fast_deserializer_backend
84 :
public serializer_backend_id<
85 common_deserializer_backend<fast_deserializer_backend>,
86 EAGINE_ID_V(FastLocal)> {
87 using base = serializer_backend_id<
88 common_deserializer_backend<fast_deserializer_backend>,
99 auto do_read(span<T> values,
span_size_t& done) -> result {
101 auto src = top(dst.size());
103 if(src.size() < ts) {
104 return {error_code::not_enough_data};
107 if(src.size() < dst.size()) {
108 done = src.size() / ts;
109 src =
head(src, done * ts);
110 errors |= error_code::incomplete_read;
112 done = values.size();
119 auto do_read(span<decl_name_storage> values,
span_size_t& done) -> result {
122 for(
auto& name : values) {
125 errors |= do_read(cover_one(size), unused);
130 if(src.size() < size) {
131 return {error_code::not_enough_data};
140 auto do_read(span<std::string> values,
span_size_t& done) -> result {
143 for(
auto& str : values) {
146 errors |= do_read(cover_one(size), unused);
151 if(src.size() < size) {
152 return {error_code::not_enough_data};
161 auto begin_struct(
span_size_t& size) -> result
final {
163 return do_read(cover_one(size), done);
166 auto begin_list(
span_size_t& size) -> result
final {
168 return do_read(cover_one(size), done);
174 #endif // EAGINE_SERIALIZE_FAST_BACKEND_HPP
std::ptrdiff_t span_size_t
Signed span size type used by eagine.
Definition: types.hpp:36
static constexpr auto as_bytes(basic_span< T, P, S > spn) noexcept -> basic_block< std::is_const_v< T >>
Converts a span into a basic_block.
Definition: block.hpp:39
#define EAGINE_ID_V(NAME)
Macro for constructing instances of eagine::identifier_t.
Definition: identifier.hpp:359
static constexpr auto span_size(T v) noexcept
Converts argument to span size type.
Definition: types.hpp:59
Common code is placed in this namespace.
Definition: eagine.hpp:21
auto sink() -> serializer_data_sink *final
Definition: write_backend.hpp:143
static constexpr auto head(basic_span< T, P, S > s, L l) noexcept -> basic_span< T, P, S >
Returns the first l elements from the front of a span.
Definition: span_algo.hpp:99
static constexpr auto assign_to(std::basic_string< C, T, A > &str, memory::basic_span< const C, P, S > spn) -> auto &
Assigns the contents of a span of characters to a standard string.
Definition: string_span.hpp:137
deserialization_error_code
Deserialization error code bits enumeration.
Definition: result.hpp:53
serialization_error_code
Serialization error code bits enumeration.
Definition: result.hpp:24
bitfield< deserialization_error_code > deserialization_errors
Alias for deserialization error bitfield.
Definition: result.hpp:106
@ incomplete_write
Incomplete write, remaining data should be written later.
static constexpr auto as_chars(block blk) noexcept
Converts a block into a span of characters.
Definition: block.hpp:48
static auto copy(const_block source, block dest) -> block
Copies the content of source block to destination block.
Definition: copy.hpp:23
bitfield< serialization_error_code > serialization_errors
Alias for serialization error bitfield.
Definition: result.hpp:100