aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Komissarov <abbapoh@gmail.com>2021-06-20 21:00:18 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2021-06-22 12:36:53 +0000
commitf5394bf1e82de64e3c5282688ba097b84f342a7c (patch)
tree3748651ee8c5efcb64e40953b448ace17baea7b4
parentf2984894a6340bc99f740fd8c70cf65a52c3d413 (diff)
Implement Persistence::store/load functions for tuples
Change-Id: Idf14c56e88624efe63cff0a502d6d46f7fce49c8 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/lib/corelib/tools/persistence.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/lib/corelib/tools/persistence.h b/src/lib/corelib/tools/persistence.h
index 29d586177..ed3238f2b 100644
--- a/src/lib/corelib/tools/persistence.h
+++ b/src/lib/corelib/tools/persistence.h
@@ -453,6 +453,33 @@ template<typename T, typename U> struct PPHelper<std::pair<T, U>>
}
};
+template<typename... Args> struct PPHelper<std::tuple<Args...>>
+{
+ template<std::size_t... Ns>
+ static void storeHelper(
+ std::index_sequence<Ns...>, const std::tuple<Args...> &tuple, PersistentPool *pool)
+ {
+ (pool->store(std::get<Ns>(tuple)), ...);
+ }
+
+ static void store(const std::tuple<Args...> &tuple, PersistentPool *pool)
+ {
+ storeHelper(std::make_index_sequence<sizeof...(Args)>(), tuple, pool);
+ }
+
+ template<std::size_t... Ns>
+ static void loadHelper(
+ std::index_sequence<Ns...>, std::tuple<Args...> &tuple, PersistentPool *pool)
+ {
+ (pool->load(std::get<Ns>(tuple)), ...);
+ }
+
+ static void load(std::tuple<Args...> &tuple, PersistentPool * pool)
+ {
+ loadHelper(std::make_index_sequence<sizeof...(Args)>(), tuple, pool);
+ }
+};
+
template<typename T> struct PPHelper<QFlags<T>>
{
using Int = typename QFlags<T>::Int;