From 684b2003c52046b791d39ce8dcef1e1deb649e6c Mon Sep 17 00:00:00 2001 From: Dmitriy Morozov Date: Tue, 5 Jul 2016 12:58:30 -0700 Subject: [PATCH] Add valarray serialization --- include/diy/serialization.hpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/diy/serialization.hpp b/include/diy/serialization.hpp index 3c51551ae..81f890683 100644 --- a/include/diy/serialization.hpp +++ b/include/diy/serialization.hpp @@ -2,6 +2,7 @@ #define DIY_SERIALIZATION_HPP #include +#include #include #include #include @@ -205,6 +206,34 @@ namespace diy } }; + template + struct Serialization< std::valarray > + { + typedef std::valarray ValArray; + + static void save(BinaryBuffer& bb, const ValArray& v) + { + size_t s = v.size(); + diy::save(bb, s); +#if __cplusplus > 199711L // C++11 + diy::save(bb, &v[0], v.size()); +#else + // Before C++11 valarray::operator[] const returns by value, not const + // reference, so we cannot dereference it and pass directly to save. + for (size_t i = 0; i < v.size(); ++i) + diy::save(bb, v[i]); +#endif + } + + static void load(BinaryBuffer& bb, ValArray& v) + { + size_t s; + diy::load(bb, s); + v.resize(s); + diy::load(bb, &v[0], s); + } + }; + // save/load for std::string template<> struct Serialization< std::string >