aboutsummaryrefslogtreecommitdiff
path: root/src/serialization/pair.h
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2021-04-06 12:20:15 -0500
committerluigi1111 <luigi1111w@gmail.com>2021-04-06 12:20:15 -0500
commit3c69596bc9a27dfbb138d8df2347a04a9bbd8598 (patch)
treed370256677064e5f1372ae06feec31d2911bff2e /src/serialization/pair.h
parent9a5579fc4f9caa41ef05d0c8190ce03a6f33f84c (diff)
parentf9b5b521e82b9dc08325bc65f25f8e4e446270fc (diff)
downloadmonzero-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/pair.h')
-rw-r--r--src/serialization/pair.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/serialization/pair.h b/src/serialization/pair.h
index 18280d837..44aafa04d 100644
--- a/src/serialization/pair.h
+++ b/src/serialization/pair.h
@@ -30,21 +30,34 @@
#pragma once
#include <memory>
+#include <boost/type_traits/make_unsigned.hpp>
#include "serialization.h"
namespace serialization
{
namespace detail
{
+ template<typename T>
+ inline constexpr bool use_pair_varint() noexcept
+ {
+ return std::is_integral<T>::value && std::is_unsigned<T>::value && sizeof(T) > 1;
+ }
+
template <typename Archive, class T>
- bool serialize_pair_element(Archive& ar, T& e)
+ typename std::enable_if<!use_pair_varint<T>(), bool>::type
+ serialize_pair_element(Archive& ar, T& e)
{
return ::do_serialize(ar, e);
}
- template <typename Archive>
- bool serialize_pair_element(Archive& ar, uint64_t& e)
+ template<typename Archive, typename T>
+ typename std::enable_if<use_pair_varint<T>(), bool>::type
+ serialize_pair_element(Archive& ar, T& e)
{
+ static constexpr const bool previously_varint = std::is_same<uint64_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;
}