From 710aa71023fe23a8b7f3d7f2e578438155eee15c Mon Sep 17 00:00:00 2001 From: Alex Zolotarev Date: Wed, 9 Nov 2011 19:05:45 +0300 Subject: [PATCH] Added std::set serialization support --- base/std_serialization.hpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/base/std_serialization.hpp b/base/std_serialization.hpp index 6507531b93..a491f13f40 100644 --- a/base/std_serialization.hpp +++ b/base/std_serialization.hpp @@ -3,6 +3,7 @@ #include "../base/base.hpp" #include "../std/map.hpp" +#include "../std/set.hpp" #include "../std/unordered_map.hpp" #include "../std/vector.hpp" #include "../std/array.hpp" @@ -75,6 +76,30 @@ template void load_like_vector(TArchive & ar, TCon ar >> rCont[i]; } +template void save_like_set(TArchive & ar, TCont const & rSet) +{ + uint32_t const count = static_cast(rSet.size()); + ar << count; + + for (typename TCont::const_iterator it = rSet.begin(); it != rSet.end(); ++it) + ar << *it; +} + +template void load_like_set(TArchive & ar, TCont & rSet) +{ + rSet.clear(); + + uint32_t count; + ar >> count; + + for (uint32_t i = 0; i < count; ++i) + { + typename TCont::value_type val; + ar >> val; + rSet.insert(val); + } +} + template TArchive & operator << (TArchive & ar, map const & rMap) { save_like_map(ar, rMap); @@ -123,6 +148,18 @@ template TArchive & operator >> (TArchive & ar, vector return ar; } +template TArchive & operator << (TArchive & ar, set const & rSet) +{ + save_like_set(ar, rSet); + return ar; +} + +template TArchive & operator >> (TArchive & ar, set & rSet) +{ + load_like_set(ar, rSet); + return ar; +} + template TArchive & operator << (TArchive & ar, array const & rArray) { for (size_t i = 0; i < N; ++i)