summaryrefslogtreecommitdiff
path: root/src/manager/dpl
diff options
context:
space:
mode:
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>2014-10-10 10:19:14 +0200
committerBartlomiej Grzelewski <b.grzelewski@samsung.com>2014-10-16 17:10:54 +0200
commitf3ed32b0e490fc0e55fd6eb6d1d2aea6f2c87f9d (patch)
tree6306f836440cd9d98bb3f3c837cfcad0dbf6d24f /src/manager/dpl
parent4115a735bf63b2afcf7051d4261b0436b4c85621 (diff)
downloadkey-manager-f3ed32b0e490fc0e55fd6eb6d1d2aea6f2c87f9d.tar.gz
key-manager-f3ed32b0e490fc0e55fd6eb6d1d2aea6f2c87f9d.tar.bz2
key-manager-f3ed32b0e490fc0e55fd6eb6d1d2aea6f2c87f9d.zip
Add generic serialization/deserialization methods
Change-Id: I981531932bb5cf40b5f1345da94fc25a538bb2c2
Diffstat (limited to 'src/manager/dpl')
-rw-r--r--src/manager/dpl/core/include/dpl/serialization.h42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/manager/dpl/core/include/dpl/serialization.h b/src/manager/dpl/core/include/dpl/serialization.h
index 4cda53e6..ed77a28e 100644
--- a/src/manager/dpl/core/include/dpl/serialization.h
+++ b/src/manager/dpl/core/include/dpl/serialization.h
@@ -242,7 +242,6 @@ struct Serialization {
{
Serialize(stream, *vec);
}
-
}; // struct Serialization
struct Deserialization {
@@ -462,6 +461,47 @@ struct Deserialization {
}
}; // struct Deserialization
+
+// generic serialization
+template <typename... Args>
+struct Serializer;
+
+template <typename First, typename... Args>
+struct Serializer<First, Args...> : public Serializer<Args...> {
+ static void Serialize(IStream& stream, const First& f, const Args&... args) {
+ Serialization::Serialize(stream, f);
+ Serializer<Args...>::Serialize(stream, args...);
+ }
+};
+
+// end of recursion
+template <>
+struct Serializer<> {
+ static void Serialize(IStream&) {
+ return;
+ }
+};
+
+// generic deserialization
+template <typename... Args>
+struct Deserializer;
+
+template <typename First, typename... Args>
+struct Deserializer<First, Args...> : public Deserializer<Args...> {
+ static void Deserialize(IStream& stream, First& f, Args&... args) {
+ Deserialization::Deserialize(stream, f);
+ Deserializer<Args...>::Deserialize(stream, args...);
+ }
+};
+
+// end of recursion
+template <>
+struct Deserializer<> {
+ static void Deserialize(IStream&) {
+ return;
+ }
+};
+
} // namespace CKM
#endif // CENT_KEY_SERIALIZATION_H