diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2021-04-06 12:20:15 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2021-04-06 12:20:15 -0500 |
| commit | 3c69596bc9a27dfbb138d8df2347a04a9bbd8598 (patch) | |
| tree | d370256677064e5f1372ae06feec31d2911bff2e /src/serialization/container.h | |
| parent | 9a5579fc4f9caa41ef05d0c8190ce03a6f33f84c (diff) | |
| parent | f9b5b521e82b9dc08325bc65f25f8e4e446270fc (diff) | |
| download | monzero-core-3c69596bc9a27dfbb138d8df2347a04a9bbd8598.tar.gz monzero-core-3c69596bc9a27dfbb138d8df2347a04a9bbd8598.tar.xz monzero-core-3c69596bc9a27dfbb138d8df2347a04a9bbd8598.zip | |
Merge pull request #7321
f9b5b52 fix serialization being different on mac (moneromooo-monero)
Diffstat (limited to 'src/serialization/container.h')
| -rw-r--r-- | src/serialization/container.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/serialization/container.h b/src/serialization/container.h index d5e75bb4f..a4997c8ae 100644 --- a/src/serialization/container.h +++ b/src/serialization/container.h @@ -32,22 +32,27 @@ namespace serialization { namespace detail { - template <typename Archive, class T> - bool serialize_container_element(Archive& ar, T& e) + template<typename T> + inline constexpr bool use_container_varint() noexcept { - return ::do_serialize(ar, e); + return std::is_integral<T>::value && std::is_unsigned<T>::value && sizeof(T) > 1; } - template <typename Archive> - bool serialize_container_element(Archive& ar, uint32_t& e) + template <typename Archive, class T> + typename std::enable_if<!use_container_varint<T>(), bool>::type + serialize_container_element(Archive& ar, T& e) { - ar.serialize_varint(e); - return true; + return ::do_serialize(ar, e); } - template <typename Archive> - bool serialize_container_element(Archive& ar, uint64_t& e) + template<typename Archive, typename T> + typename std::enable_if<use_container_varint<T>(), bool>::type + serialize_container_element(Archive& ar, T& e) { + static constexpr const bool previously_varint = std::is_same<uint64_t, T>() || std::is_same<uint32_t, T>(); + + if (!previously_varint && ar.varint_bug_backward_compatibility_enabled() && !typename Archive::is_saving()) + return ::do_serialize(ar, e); ar.serialize_varint(e); return true; } |
