diff --git a/code/api/include/allscale/api/user/data/grid.h b/code/api/include/allscale/api/user/data/grid.h index d4d0d02..acc9ce4 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 065d92b..d147015 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" @@ -63,3 +63,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 d121a2f..fa41229 100755 --- a/code/utils/include/allscale/utils/vector.h +++ b/code/utils/include/allscale/utils/vector.h @@ -104,6 +104,26 @@ namespace utils { return out << vec.data; } +#ifdef ALLSCALE_WITH_HPX + template + void serialize(Archive& ar, unsigned) + { + ar & data; + } +#endif + + private: + + template + void init_internal(const std::initializer_list& list, const std::integer_sequence&) { + __allscale_unused auto bla = { data[Index] = *(list.begin() + Index) ... }; + } + + template + void init(const std::initializer_list& list) { + init_internal(list,std::make_index_sequence()); + } + }; template @@ -309,6 +329,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 @@ -398,8 +428,18 @@ 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 trivially serializing / de-serializing Vector instances. */ @@ -412,6 +452,7 @@ namespace utils { */ template struct serializer,typename std::enable_if::value && is_serializable::value,void>::type> : public serializer> {}; +#endif } // end namespace utils } // end namespace allscale