diff options
author | Ivan Komissarov <abbapoh@gmail.com> | 2021-06-20 21:00:18 +0200 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-06-22 12:36:53 +0000 |
commit | f5394bf1e82de64e3c5282688ba097b84f342a7c (patch) | |
tree | 3748651ee8c5efcb64e40953b448ace17baea7b4 | |
parent | f2984894a6340bc99f740fd8c70cf65a52c3d413 (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.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; |