diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2016-12-15 10:49:27 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2016-12-15 10:16:12 +0000 |
commit | 098f3940557332a818f30c29dfecd16a0c4d3571 (patch) | |
tree | f3222647764f8774c4a8babe0961a96b2122e63e /src/lib/corelib/tools/persistence.h | |
parent | dd761e0893ff457103237e8a76fe3fea276698cc (diff) |
PersistentPool: Replace {store,load}QVariantMap with generic version
That one can also be used to store other QMaps as well as QHashes.
Change-Id: Icb71c7ef293d115ea2518ddd9e16d094fb91625e
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/tools/persistence.h')
-rw-r--r-- | src/lib/corelib/tools/persistence.h | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/lib/corelib/tools/persistence.h b/src/lib/corelib/tools/persistence.h index 25529ccf7..f1bfd439d 100644 --- a/src/lib/corelib/tools/persistence.h +++ b/src/lib/corelib/tools/persistence.h @@ -98,9 +98,6 @@ private: void storePersistentObject(const PersistentObject *object); - void storeVariantMap(const QVariantMap &map); - QVariantMap loadVariantMap(); - void storeVariant(const QVariant &variant); QVariant loadVariant(); @@ -223,12 +220,6 @@ template<> struct PersistentPool::Helper<QVariant> static void load(QVariant &v, PersistentPool *pool) { v = pool->loadVariant(); } }; -template<> struct PersistentPool::Helper<QVariantMap> -{ - static void store(const QVariantMap &map, PersistentPool *pool) { pool->storeVariantMap(map); } - static void load(QVariantMap &map, PersistentPool *pool) { map = pool->loadVariantMap(); } -}; - class ArtifactSet; template<typename T> struct IsSimpleContainer { static const bool value = false; }; template<> struct IsSimpleContainer<ArtifactSet> { static const bool value = true; }; @@ -256,6 +247,35 @@ struct PersistentPool::Helper<T, typename std::enable_if<IsSimpleContainer<T>::v } }; +template<typename T> struct IsKeyValueContainer { static const bool value = false; }; +template<typename K, typename V> struct IsKeyValueContainer<QMap<K, V>> +{ + static const bool value = true; +}; + +template<typename T> +struct PersistentPool::Helper<T, typename std::enable_if<IsKeyValueContainer<T>::value>::type> +{ + static void store(const T &container, PersistentPool *pool) + { + pool->stream() << container.count(); + for (auto it = container.cbegin(); it != container.cend(); ++it) { + pool->store(it.key()); + pool->store(it.value()); + } + } + static void load(T &container, PersistentPool *pool) + { + container.clear(); + const int count = pool->load<int>(); + for (int i = 0; i < count; ++i) { + const auto &key = pool->load<typename T::key_type>(); + const auto &value = pool->load<typename T::mapped_type>(); + container.insert(key, value); + } + } +}; + } // namespace Internal } // namespace qbs |