aboutsummaryrefslogtreecommitdiff
path: root/src/common/unordered_containers_boost_serialization.h
diff options
context:
space:
mode:
authorAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
committerAntonio Juarez <antonio.maria.juarez@live.com>2014-03-03 22:07:58 +0000
commit296ae46ed8f8f6e5f986f978febad302e3df231a (patch)
tree1629164454a239308f33c9e12afb22e7f3cd8eeb /src/common/unordered_containers_boost_serialization.h
parentchanged name (diff)
downloadmonero-296ae46ed8f8f6e5f986f978febad302e3df231a.tar.xz
moved all stuff to github
Diffstat (limited to 'src/common/unordered_containers_boost_serialization.h')
-rw-r--r--src/common/unordered_containers_boost_serialization.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/common/unordered_containers_boost_serialization.h b/src/common/unordered_containers_boost_serialization.h
new file mode 100644
index 000000000..0804660ca
--- /dev/null
+++ b/src/common/unordered_containers_boost_serialization.h
@@ -0,0 +1,80 @@
+// Copyright (c) 2012-2013 The Cryptonote developers
+// Distributed under the MIT/X11 software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#pragma once
+
+#include <boost/serialization/split_free.hpp>
+#include <unordered_map>
+#include <unordered_set>
+
+namespace boost
+{
+ namespace serialization
+ {
+ template <class Archive, class h_key, class hval>
+ inline void save(Archive &a, const std::unordered_map<h_key, hval> &x, const boost::serialization::version_type ver)
+ {
+ size_t s = x.size();
+ a << s;
+ BOOST_FOREACH(auto& v, x)
+ {
+ a << v.first;
+ a << v.second;
+ }
+ }
+
+ template <class Archive, class h_key, class hval>
+ inline void load(Archive &a, std::unordered_map<h_key, hval> &x, const boost::serialization::version_type ver)
+ {
+ size_t s = 0;
+ a >> s;
+ for(size_t i = 0; i != s; i++)
+ {
+ h_key k;
+ hval v;
+ a >> k;
+ a >> v;
+ x.insert(std::pair<h_key, hval>(k, v));
+ }
+ }
+
+
+ template <class Archive, class hval>
+ inline void save(Archive &a, const std::unordered_set<hval> &x, const boost::serialization::version_type ver)
+ {
+ size_t s = x.size();
+ a << s;
+ BOOST_FOREACH(auto& v, x)
+ {
+ a << v;
+ }
+ }
+
+ template <class Archive, class hval>
+ inline void load(Archive &a, std::unordered_set<hval> &x, const boost::serialization::version_type ver)
+ {
+ size_t s = 0;
+ a >> s;
+ for(size_t i = 0; i != s; i++)
+ {
+ hval v;
+ a >> v;
+ x.insert(v);
+ }
+ }
+
+
+ template <class Archive, class h_key, class hval>
+ inline void serialize(Archive &a, std::unordered_map<h_key, hval> &x, const boost::serialization::version_type ver)
+ {
+ split_free(a, x, ver);
+ }
+
+ template <class Archive, class hval>
+ inline void serialize(Archive &a, std::unordered_set<hval> &x, const boost::serialization::version_type ver)
+ {
+ split_free(a, x, ver);
+ }
+ }
+}