aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/tools/persistence.h
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2016-12-15 10:49:27 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2016-12-15 10:16:12 +0000
commit098f3940557332a818f30c29dfecd16a0c4d3571 (patch)
treef3222647764f8774c4a8babe0961a96b2122e63e /src/lib/corelib/tools/persistence.h
parentdd761e0893ff457103237e8a76fe3fea276698cc (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.h38
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