1#ifndef QELOQUENT_DATAMAP_H
2#define QELOQUENT_DATAMAP_H
4#include <QEloquent/global.h>
5#include <QEloquent/listproxy.h>
14using DataMapKey = QString;
15using DataMapValue = QVariant;
16using DataMapPair = QPair<DataMapKey, DataMapValue>;
18class QELOQUENT_EXPORT DataMap :
public AbstractListProxy<DataMapPair>
21 using Key = DataMapKey;
22 using Value = DataMapValue;
23 using Pair = QPair<Key, Value>;
26 DataMap(
const std::initializer_list<Pair> &data);
27 DataMap(DataMap &&other) =
default;
28 DataMap(
const DataMap &other) =
default;
29 DataMap& operator=(
const DataMap &) =
default;
30 DataMap& operator=(DataMap &&) =
default;
32 QList<Key> keys()
const;
33 QList<Value> values()
const;
35 bool contains(
const Key &key)
const;
36 Value value(
const Key &key)
const;
37 void insert(
const Key &key,
const Value &value);
38 void insert(
const Key &key,
const DataMap &map);
39 void insert(
const Key &key,
const QList<DataMap> &maps);
40 void insert(
const DataMap &map);
41 void remove(
const Key &key);
44 void forEach(
const std::function<
void(
const Pair &,
const DataMap &)> &callback,
int depth = 1)
const;
45 void forEach(
const std::function<
void(Pair &)> &callback,
int depth = 1);
47 void removeIf(
const std::function<
bool(
const Pair &)> &pred);
49 QVariantMap toVariantMap()
const;
50 static DataMap fromVariantMap(
const QVariantMap &map);
52 void computeIndexes();
54 const QVector<Pair> &intenalData()
const;
55 QVector<Pair> &intenalData();
57 static DataMap fromVariant(
const QVariant &var);
60 const QVector<Pair> *constList()
const override;
61 QVector<Pair> *mutableList()
override;
64 static QHash<Key, int> generateIndex(
const QVector<Pair> &data);
67 QHash<Key, int> m_index;
72Q_DECLARE_METATYPE(QEloquent::DataMap)
74QELOQUENT_EXPORT QDebug operator<<(QDebug debug,
const QEloquent::DataMap &map);
76QELOQUENT_EXPORT QDataStream &operator<<(QDataStream &out,
const QEloquent::DataMap &map);
77QELOQUENT_EXPORT QDataStream &operator>>(QDataStream &in, QEloquent::DataMap &map);