aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/tools/persistence.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/tools/persistence.h')
-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;