76 #include <type_traits>
86 using reference_base =
typename std::remove_cv <typename std::remove_reference <T>::type>::type;
91 template <
typename Input,
typename T>
92 typename std::enable_if <
93 std::is_arithmetic <T>::value,
100 template <
typename Output,
typename T>
101 typename std::enable_if <
102 std::is_arithmetic <T>::value,
112 template <
typename Specification,
typename... Args>
116 static_cast <Specification*> (
nullptr),
117 std::forward <Args> (args)...))
120 static_cast <Specification*> (
nullptr),
121 std::forward <Args> (args)...);
130 template <
typename Specification,
typename... Args>
134 static_cast <Specification*> (
nullptr),
135 std::forward <Args> (args)...))
138 static_cast <Specification*> (
nullptr),
139 std::forward <Args> (args)...);
154 template <std::
size_t N,
typename Stream>
167 template <
typename Stream>
168 bool stream_read (Stream&& stream,
void* s, std::size_t n);
182 template <std::
size_t N,
typename Stream>
195 template <
typename Stream>
196 bool stream_write (Stream&& stream,
void const* s, std::size_t n);
208 template <
typename Input,
typename Output>
210 auto read (Input&& in, Output&& out) ->
212 std::forward <Input> (in),
213 std::forward <Output> (out)))
215 return dispatch_read <reference_base <Output>> (
216 std::forward <Input> (in),
217 std::forward <Output> (out));
226 template <
typename Input,
typename Output>
228 auto write (Input&& in, Output&& out) ->
230 std::forward <Input> (in),
231 std::forward <Output> (out)))
233 return dispatch_write <reference_base <Input>> (
234 std::forward <Input> (in),
235 std::forward <Output> (out));
240 #include <framework/serializable/base_types.inl>