From 764e5a2adfd5bc8ce1d00609202c86a2215e6cb1 Mon Sep 17 00:00:00 2001 From: sowle Date: Mon, 12 Aug 2024 19:41:55 +0200 Subject: [PATCH] kv serialization support for std::shared_ptr --- .../keyvalue_serialization_overloads.h | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h index 23ad8fce..d0d7c408 100644 --- a/contrib/epee/include/serialization/keyvalue_serialization_overloads.h +++ b/contrib/epee/include/serialization/keyvalue_serialization_overloads.h @@ -1,3 +1,4 @@ +// Copyright (c) 2024, Zano Project // Copyright (c) 2006-2013, Andrey N. Sabelnikov, www.sabelnikov.net // All rights reserved. // @@ -519,6 +520,30 @@ namespace epee } return r; } + //------------------------------------------------------------------------------------------------------------------- + //std::shared_ptr + template + bool kv_serialize(const std::shared_ptr& d, t_storage& stg, typename t_storage::hsection hparent_section, const char* pname) + { + if (d.get()) + { + return kv_serialize(*d, stg, hparent_section, pname); + } + return true; + } + //------------------------------------------------------------------------------------------------------------------- + template + bool kv_unserialize(std::shared_ptr& d, t_storage& stg, typename t_storage::hsection hparent_section, const char* pname) + { + d.reset(); + t_type* ptr = new t_type(); + bool r = kv_unserialize(*ptr, stg, hparent_section, pname); + if (!r) + { + d.reset(ptr); + } + return r; + } } } \ No newline at end of file