YAMI4 Core
serialization.h
1 // Copyright Maciej Sobczak 2008-2019.
2 // This file is part of YAMI4.
3 //
4 // YAMI4 is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // YAMI4 is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with YAMI4. If not, see <http://www.gnu.org/licenses/>.
16 
17 #ifndef YAMICORE_SERIALIZATION_H_INCLUDED
18 #define YAMICORE_SERIALIZATION_H_INCLUDED
19 
20 #include "allocator.h"
21 #include "core.h"
22 #include <cstddef>
23 
24 namespace yami
25 {
26 
27 namespace details
28 {
29 
30 inline std::size_t round_up_4(std::size_t v)
31 {
32  return (v + 3) & ~0x03;
33 }
34 
35 core::result put_integer(char * * buffers, const std::size_t * sizes,
36  std::size_t num_of_buffers,
37  std::size_t & current_buffer, char * & buffer_position,
38  int value);
39 
40 core::result get_integer(const char * * buffers, const std::size_t * sizes,
41  std::size_t num_of_buffers,
42  std::size_t & current_buffer, const char * & buffer_position,
43  int & value);
44 
45 core::result put_long_long(char * * buffers, const std::size_t * sizes,
46  std::size_t num_of_buffers,
47  std::size_t & current_buffer, char * & buffer_position,
48  long long value);
49 
50 core::result get_long_long(const char * * buffers, const std::size_t * sizes,
51  std::size_t num_of_buffers,
52  std::size_t & current_buffer, const char * & buffer_position,
53  long long & value);
54 
55 core::result put_double_float(char * * buffers, const std::size_t * sizes,
56  std::size_t num_of_buffers,
57  std::size_t & current_buffer, char * & buffer_position,
58  double value);
59 
60 core::result get_double_float(const char * * buffers,
61  const std::size_t * sizes,
62  std::size_t num_of_buffers,
63  std::size_t & current_buffer, const char * & buffer_position,
64  double & value);
65 
66 core::result put_string(char * * buffers, const std::size_t * sizes,
67  std::size_t num_of_buffers,
68  std::size_t & current_buffer, char * & buffer_position,
69  const char * value, std::size_t length);
70 
71 core::result get_string(const char * * buffers, const std::size_t * sizes,
72  std::size_t num_of_buffers,
73  std::size_t & current_buffer, const char * & buffer_position,
74  const char * & value, std::size_t & length,
75  allocator & alloc);
76 
77 core::result put_boolean_array(char * * buffers, const std::size_t * sizes,
78  std::size_t num_of_buffers,
79  std::size_t & current_buffer, char * & buffer_position,
80  const bool * values, std::size_t length);
81 
82 core::result get_boolean_array(const char * * buffers,
83  const std::size_t * sizes,
84  std::size_t num_of_buffers,
85  std::size_t & current_buffer, const char * & buffer_position,
86  bool * & values, std::size_t & length,
87  allocator & alloc);
88 
89 core::result put_integer_array(char * * buffers, const std::size_t * sizes,
90  std::size_t num_of_buffers,
91  std::size_t & current_buffer, char * & buffer_position,
92  const int * values, std::size_t length);
93 
94 core::result get_integer_array(const char * * buffers,
95  const std::size_t * sizes,
96  std::size_t num_of_buffers,
97  std::size_t & current_buffer, const char * & buffer_position,
98  int * & values, std::size_t & length,
99  allocator & alloc);
100 
101 core::result put_long_long_array(char * * buffers, const std::size_t * sizes,
102  std::size_t num_of_buffers,
103  std::size_t & current_buffer, char * & buffer_position,
104  const long long * values, std::size_t length);
105 
106 core::result get_long_long_array(const char * * buffers,
107  const std::size_t * sizes,
108  std::size_t num_of_buffers,
109  std::size_t & current_buffer, const char * & buffer_position,
110  long long * & values, std::size_t & length,
111  allocator & alloc);
112 
113 core::result put_double_float_array(char * * buffers,
114  const std::size_t * sizes,
115  std::size_t num_of_buffers,
116  std::size_t & current_buffer, char * & buffer_position,
117  const double * values, std::size_t length);
118 
119 core::result get_double_float_array(
120  const char * * buffers, const std::size_t * sizes,
121  std::size_t num_of_buffers,
122  std::size_t & current_buffer, const char * & buffer_position,
123  double * & values, std::size_t & length,
124  allocator & alloc);
125 
126 void fill_outgoing_frame_header(
127  char * buffer,
128  std::size_t message_id, int frame_number,
129  std::size_t message_header_size, std::size_t frame_payload_size);
130 
131 } // namespace details
132 
133 } // namespace yami
134 
135 #endif // YAMICORE_SERIALIZATION_H_INCLUDED
Namespace devoted for everything related to YAMI4.
Definition: agent.h:25
result
General type for reporting success and error states.
Definition: core.h:32