From 2827eb5873257e7f8d4eef29036f453612aabec5 Mon Sep 17 00:00:00 2001 From: Eduard Valeyev Date: Mon, 24 May 2021 15:22:10 -0400 Subject: [PATCH] Range avoids serializes rank only once and retains compatibility with old archives --- src/TiledArray/range.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/TiledArray/range.h b/src/TiledArray/range.h index 3f4e809d37..c6cb472951 100644 --- a/src/TiledArray/range.h +++ b/src/TiledArray/range.h @@ -1118,7 +1118,19 @@ class Range { template void serialize(Archive& ar) { - ar& rank_& datavec_& offset_& volume_; + ar& rank_; + const auto four_x_rank = rank_ << 2; + // read via madness::archive::wrap to be able to + // - avoid having to serialize datavec_'s size + // - read old archives that represented datavec_ by bare ptr + if constexpr (madness::archive::is_input_archive::value) { + datavec_.resize(four_x_rank); + ar >> madness::archive::wrap(datavec_.data(), four_x_rank); + } else if constexpr (madness::archive::is_output_archive::value) { + ar << madness::archive::wrap(datavec_.data(), four_x_rank); + } else + abort(); // unreachable + ar& offset_& volume_; } void swap(Range_& other) {