From 9a8236963fc83805331867bf2442ab4129ad7ecf Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Sat, 14 Apr 2018 06:09:08 -0700 Subject: [PATCH] serialization fixes --- code/api/include/allscale/api/core/data.h | 2 +- .../api/include/allscale/api/user/data/grid.h | 14 ++++++--- .../allscale/utils/serializer/arrays.h | 3 +- .../allscale/utils/serializer/strings.h | 4 ++- .../allscale/utils/serializer/vectors.h | 4 ++- code/utils/include/allscale/utils/vector.h | 29 +++++++++++++++++++ 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/code/api/include/allscale/api/core/data.h b/code/api/include/allscale/api/core/data.h index c2636c8..6a477ec 100755 --- a/code/api/include/allscale/api/core/data.h +++ b/code/api/include/allscale/api/core/data.h @@ -234,7 +234,7 @@ namespace core { template typename std::enable_if::value,bool>::type isSubRegion(const R& a, const R& b) { - return R::difference(a,b).empty(); + return R::difference(a,b, false).empty(); } /** diff --git a/code/api/include/allscale/api/user/data/grid.h b/code/api/include/allscale/api/user/data/grid.h index f18e67c..ba72ac2 100755 --- a/code/api/include/allscale/api/user/data/grid.h +++ b/code/api/include/allscale/api/user/data/grid.h @@ -478,7 +478,7 @@ namespace data { } bool operator==(const GridRegion& other) const { - return difference(*this,other).empty() && other.difference(other,*this).empty(); + return difference(*this,other, false).empty() && other.difference(other,*this, false).empty(); } bool operator!=(const GridRegion& other) const { @@ -504,6 +504,7 @@ namespace data { // build result GridRegion res = a; + res.regions.reserve(a.regions.size() + b.regions.size()); // combine regions for(const auto& cur : difference(b,a).regions) { @@ -531,6 +532,8 @@ namespace data { // build result GridRegion res; + res.regions.reserve(a.regions.size() + b.regions.size()); + // combine regions for(const auto& curA : a.regions) { for(const auto& curB : b.regions) { @@ -548,7 +551,7 @@ namespace data { return res; } - static GridRegion difference(const GridRegion& a, const GridRegion& b) { + static GridRegion difference(const GridRegion& a, const GridRegion& b, bool do_compress = true) { // handle empty sets if(a.empty() || b.empty()) return a; @@ -569,8 +572,11 @@ namespace data { res.regions.swap(next); } - // compress result - res.compress(); + if (do_compress) + { + // compress result + res.compress(); + } // done return res; diff --git a/code/utils/include/allscale/utils/serializer/arrays.h b/code/utils/include/allscale/utils/serializer/arrays.h index 9d65fa1..69b5aba 100755 --- a/code/utils/include/allscale/utils/serializer/arrays.h +++ b/code/utils/include/allscale/utils/serializer/arrays.h @@ -2,7 +2,7 @@ #ifdef ALLSCALE_WITH_HPX #include -#endif +#else #include "allscale/utils/serializer.h" @@ -73,3 +73,4 @@ namespace utils { } // end namespace utils } // end namespace allscale +#endif diff --git a/code/utils/include/allscale/utils/serializer/strings.h b/code/utils/include/allscale/utils/serializer/strings.h index 619b59e..71080e9 100644 --- a/code/utils/include/allscale/utils/serializer/strings.h +++ b/code/utils/include/allscale/utils/serializer/strings.h @@ -2,7 +2,7 @@ #ifdef ALLSCALE_WITH_HPX #include -#endif +#else #include "allscale/utils/serializer.h" @@ -32,3 +32,5 @@ namespace utils { } // end namespace utils } // end namespace allscale + +#endif diff --git a/code/utils/include/allscale/utils/serializer/vectors.h b/code/utils/include/allscale/utils/serializer/vectors.h index d131d02..6cf36ac 100644 --- a/code/utils/include/allscale/utils/serializer/vectors.h +++ b/code/utils/include/allscale/utils/serializer/vectors.h @@ -2,7 +2,8 @@ #ifdef ALLSCALE_WITH_HPX #include "allscale/utils/serializer.h" -#endif + #include +#else #include @@ -80,3 +81,4 @@ namespace utils { } // end namespace utils } // end namespace allscale +#endif diff --git a/code/utils/include/allscale/utils/vector.h b/code/utils/include/allscale/utils/vector.h index 2c32a38..99791f8 100755 --- a/code/utils/include/allscale/utils/vector.h +++ b/code/utils/include/allscale/utils/vector.h @@ -110,6 +110,14 @@ namespace utils { return out << vec.data; } +#ifdef ALLSCALE_WITH_HPX + template + void serialize(Archive& ar, unsigned) + { + ar & data; + } +#endif + private: template @@ -327,6 +335,16 @@ namespace utils { return out << "[" << vec.x << "," << vec.y << "," << vec.z << "]"; } +#ifdef ALLSCALE_WITH_HPX + template + void serialize(Archive& ar, unsigned) + { + ar & x; + ar & y; + ar & z; + } +#endif + }; template @@ -416,14 +434,25 @@ namespace utils { return out << "[" << vec.x << "," << vec.y << "]"; } +#ifdef ALLSCALE_WITH_HPX + template + void serialize(Archive& ar, unsigned) + { + ar & x; + ar & y; + } +#endif + }; +#ifndef ALLSCALE_WITH_HPX /** * Add support for serializing / de-serializing Vector instances. * The implementation is simply re-using the serializing capabilities of arrays. */ template struct serializer,typename std::enable_if::value,void>::type> : public serializer> {}; +#endif } // end namespace utils } // end namespace allscale