diff options
Diffstat (limited to 'src/lib/corelib/tools/persistence.h')
-rw-r--r-- | src/lib/corelib/tools/persistence.h | 27 |
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; |