eclmpiserializer: improve pair handling

use has_serializeOp trait
This commit is contained in:
Arne Morten Kvarving
2022-09-02 12:57:30 +02:00
parent e7624b7a27
commit a9eb6159ae

View File

@@ -480,20 +480,18 @@ protected:
> : public std::true_type {}; > : public std::true_type {};
//! \brief Handler for pairs. //! \brief Handler for pairs.
//! \details If data is POD or a string, we pass it to the underlying serializer,
//! if not we assume a complex type.
template<class T1, class T2> template<class T1, class T2>
void pair(const std::pair<T1,T2>& data) void pair(const std::pair<T1,T2>& data)
{ {
if constexpr (std::is_pod<T1>::value || std::is_same<T1,std::string>::value) if constexpr (has_serializeOp<T1>::value)
const_cast<T1&>(data.first).serializeOp(*this);
else
(*this)(data.first); (*this)(data.first);
else
data.first.serializeOp(*this);
if constexpr (std::is_pod<T2>::value || std::is_same<T2,std::string>::value) if constexpr (has_serializeOp<T2>::value)
(*this)(data.second);
else
const_cast<T2&>(data.second).serializeOp(*this); const_cast<T2&>(data.second).serializeOp(*this);
else
(*this)(data.second);
} }
//! \brief Handler for smart pointers. //! \brief Handler for smart pointers.