20 #ifndef TPIE_SERIALIZATION2_H
21 #define TPIE_SERIALIZATION2_H
32 #include <tpie/config.h>
35 #include <type_traits>
36 #include <tpie/is_simple_iterator.h>
37 #include <tpie/tuple_utils.h>
91 static bool const value
92 = std::is_trivially_copyable<T>::value && !std::is_pointer<T>::value;
98 template <
typename D,
typename T>
101 dst.write((
const char *)&v,
sizeof(T));
107 template <
typename S,
typename T>
110 src.read((
char *)&v,
sizeof(T));
119 template <
typename D,
typename T,
121 bool is_ts=is_trivially_serializable<typename std::iterator_traits<T>::value_type>::value>
123 void operator()(D & dst, T start, T end) {
125 for (T i=start; i != end; ++i)
serialize(dst, *i);
129 template <
typename D,
typename T>
131 void operator()(D & d, T start, T end) {
137 auto element_size =
sizeof(
typename std::iterator_traits<T>::value_type);
138 d.write(
reinterpret_cast<const char *
>(&*start), (end - start) * element_size);
146 template <
typename D,
typename T,
150 void operator()(D & dst, T start, T end) {
152 for (T i=start; i != end; ++i)
unserialize(dst, *i);
156 template <
typename D,
typename T>
158 void operator()(D & d, T start, T end) {
164 auto element_size =
sizeof(
typename std::iterator_traits<T>::value_type);
165 d.read(
reinterpret_cast<char *
>(&*start), (end - start) * element_size);
175 void write(
const void *,
size_t s) {size += s;}
186 template <
typename D,
typename T>
189 magic(dst, start, end);
198 template <
typename D,
typename T>
201 magic(dst, start, end);
207 template <
typename D,
typename T, std::
size_t size>
216 template <
typename S,
typename T, std::
size_t size>
225 template <
typename D,
typename T, std::
size_t size>
226 void serialize(D & dst,
const std::array<T, size> & v) {
234 template <
typename S,
typename T, std::
size_t size>
243 template <
typename D,
typename T,
typename alloc_t>
244 void serialize(D & dst,
const std::vector<T, alloc_t> & v) {
253 template <
typename S,
typename T,
typename alloc_t>
255 typename std::vector<T>::size_type s;
265 template <
typename D,
typename T>
275 template <
typename S,
typename T>
288 template <
typename D,
typename T>
289 void serialize(D & dst,
const std::basic_string<T> & v) {
292 serialize(dst, v.c_str(), v.c_str() + v.size());
299 template <
typename S,
typename T>
301 typename std::basic_string<T>::size_type s;
311 template <
typename D,
typename T,
typename U>
321 template <
typename S,
typename T,
typename U>
331 template <
typename D,
typename... Ts>
333 tuple_for_each([&](
const auto & el) {
342 template <
typename S,
typename... Ts>
344 tuple_for_each([&](
auto & el) {
353 template <
typename T>
363 #endif // TPIE_SERIALIZATION2_H