30 namespace protocol_buffers
35 template <
typename... Types>
55 template <
typename... Args>
72 template <
typename... Args>
75 std::forward <std::tuple <Args...>> (args),
76 static_cast <
make_indices <sizeof... (Args)>*> (nullptr))
81 template <
typename... Args,
typename... Indices>
83 : serializable_base(std::forward <Args> (std::
get <Indices::value> (args))...)
91 template <
typename Name,
typename... Args>
92 auto get (Args&&... args)
const ->
93 decltype(std::declval <base <Name>> ().get(std::forward <Args> (args)...))
101 template <
typename Name,
typename... Args>
102 auto set (Args&&... args) ->
103 decltype(std::declval <base <Name>> ().
set(std::forward <Args> (args)...))
111 template <
typename Name,
typename... Args>
112 auto check (Args&&... args) const ->
113 decltype(std::declval <base <Name>> ().
check(std::forward <Args> (args)...))
121 template <
typename Name,
typename... Args>
123 decltype(std::declval <base <Name>> ().
clear(std::forward <Args> (args)...))
131 template <
typename Name,
typename... Args>
133 decltype(std::declval <base <Name>> ().
mutate(std::forward <Args> (args)...))
135 return base <Name>::mutate(std::forward <Args> (args)...);
142 template <
typename... Types>
162 template <
typename... Args>
179 template <
typename... Args>
182 std::forward <std::tuple <Args...>> (args),
183 static_cast <
make_indices <sizeof... (Args)>*> (nullptr))
188 template <
typename... Args,
typename... Indices>
190 : serializable_base(std::forward <Args> (std::
get <Indices::value> (args))...)
198 template <
typename Name,
typename... Args>
199 auto get (Args&&... args)
const ->
200 decltype(std::declval <base <Name>> ().get(std::forward <Args> (args)...))
208 template <
typename Name,
typename... Args>
209 auto set (Args&&... args) ->
210 decltype(std::declval <base <Name>> ().
set(std::forward <Args> (args)...))
218 template <
typename Name,
typename... Args>
219 auto check (Args&&... args) const ->
220 decltype(std::declval <base <Name>> ().
check(std::forward <Args> (args)...))
228 template <
typename Name,
typename... Args>
230 decltype(std::declval <base <Name>> ().
clear(std::forward <Args> (args)...))
238 template <
typename Name,
typename... Args>
240 decltype(std::declval <base <Name>> ().
mutate(std::forward <Args> (args)...))
242 return base <Name>::mutate(std::forward <Args> (args)...);
256 template <
typename SizeFrame,
typename Input,
typename Output>
259 using type =
typename std::remove_cv <typename std::remove_reference <Input>::type>::type;
265 out.resize(static_cast <std::size_t> (size));
266 auto const begin = &out[0];
267 auto const end = &out[out.size()];
269 if (FRAMEWORK_EXPECT_FALSE(!serializable::dispatch_write <type> (in, begin, end, it)))
272 out.resize(static_cast <std::size_t> (it - begin));
286 template <
typename SizeFrame,
typename Input,
typename Output>
293 std::size_t serialized_size;
294 out.resize(static_cast <std::size_t> (size));
303 auto const begin = frame.
tellp();
306 auto const end = frame.tellp();
307 serialized_size = static_cast <std::size_t> (end - begin);
310 out.resize(serialized_size);
325 template <
typename Input,
typename Output>
328 return write_to_string <max_size_frame> (std::forward <Input> (in), std::forward <Output> (out));
342 template <
typename Input,
typename Output>
345 return write_to_string <size_frame> (std::forward <Input> (in), std::forward <Output> (out));
361 template <
typename Input,
typename Output>
364 return write_to_frame <max_size_frame> (std::forward <Input> (in), std::forward <Output> (out));
380 template <
typename Input,
typename Output>
383 return write_to_frame <size_frame> (std::forward <Input> (in), std::forward <Output> (out));
396 template <
typename Input>
399 using type =
typename std::remove_cv <typename std::remove_reference <Input>::type>::type;
402 if (FRAMEWORK_EXPECT_FALSE(!
write(in, max_size)))
404 if (FRAMEWORK_EXPECT_FALSE(static_cast <std::size_t> (max_size) > n))
407 if (FRAMEWORK_EXPECT_FALSE(!
write(in, size)))
409 if (FRAMEWORK_EXPECT_FALSE(static_cast <std::size_t> (size) > n))
413 char*
const begin = &s[0];
414 char*
const end = &s[n];
416 if (FRAMEWORK_EXPECT_FALSE(!serializable::dispatch_write <type> (in, begin, end, it)))
419 n = static_cast <std::size_t> (it - begin);
433 template <
typename Input>
449 template <
typename Output>
452 using type =
typename std::remove_cv <typename std::remove_reference <Output>::type>::type;
454 char const*
const begin = s;
455 char const*
const end = s+n;
456 char const* it = begin;
458 return serializable::dispatch_read <type> (begin, end, it, std::forward <Output> (out));
470 template <
typename Input,
typename Output>
473 return read_from_array(&in[0], in.size(), std::forward <Output> (out));
486 template <
typename Input,
typename Output>
503 template <
typename Output>
511 #include <framework/protocol_buffers/protocol_buffers.inl>