53 return mHash.capacity();
63 auto iter = mHash.begin();
65 while(iter != mHash.end())
67 if(iter.value().isNull() ==
true)
70 else if(iter.value()->isObject() ==
true)
71 iter.value()->toObject()->clear();
73 else if(iter.value()->isArray() ==
true)
74 iter.value()->toArray()->clear();
76 iter = this->
erase(iter);
92 return mHash.isEmpty();
102 return mHash.contains(key);
107 if(key.isEmpty() ==
true)
110 auto iter = mHash.find(key);
112 if(iter != mHash.end())
125 if(value.isNull() ==
true)
127 auto newValue = QMPointer<QMJsonValue>(
new QMJsonValue);
129 mHash.insert(key, newValue);
134 mHash.insert(key, value);
141 if(
object.
isNull() ==
true)
144 auto iter1 =
object->cbegin();
146 while(iter1 != object->cend())
148 auto iter2 = mHash.constFind(iter1.key());
150 if(iter2 != mHash.constEnd())
152 const auto &value1 = iter1.value();
153 const auto &value2 = iter2.value();
155 if(value1.isNull() ==
true ||
156 value2.isNull() ==
true)
161 else if(value1->isObject() && value2->isObject())
162 value2->toObject()->unite(value1->toObject(), replacementPolicy, unitePolicy);
164 else if(value1->isArray() && value2->isArray())
165 value2->toArray()->unite(value1->toArray(), unitePolicy);
168 this->
insert(iter1.key(), value1, replacementPolicy);
172 this->
insert(iter1.key(), iter1.value(), replacementPolicy);
181 auto iter = mHash.find(key);
183 if(iter == mHash.end())
191 auto iter = mHash.find(key);
193 if(iter == mHash.end())
201 QMPointer<QMJsonValue>
QMJsonObject::take(
const QString &key,
const QMPointer<QMJsonValue> &defaultValue)
203 auto iter = mHash.find(key);
205 if(iter == mHash.end())
215 return mHash.key(value);
218 const QString
QMJsonObject::key(
const QMPointer<QMJsonValue> &value,
const QString &defaultValue)
const 220 return mHash.key(value, defaultValue);
225 return mHash.begin();
235 return mHash.cbegin();
243 const QHash<QString, QMPointer<QMJsonValue> >::iterator
QMJsonObject::erase(
const QHash<QString, QMPointer<QMJsonValue> >::iterator &iter)
245 if(iter == mHash.end())
248 auto key = iter.key();
249 auto value = iter.value();
251 auto niter = mHash.erase(iter);
259 return mHash.find(key);
262 const QHash<QString, QMPointer<QMJsonValue> >::const_iterator
QMJsonObject::cfind(
const QString &key)
const 264 return mHash.constFind(key);
269 auto iter = mHash.constFind(key);
270 static auto defaultValue = QMPointer<QMJsonValue>(
new QMJsonValue);
272 if(iter == mHash.constEnd())
278 const QMPointer<QMJsonValue> &
QMJsonObject::value(
const QString &key,
const QMPointer<QMJsonValue> &defaultValue)
const 280 auto iter = mHash.constFind(key);
282 if(iter == mHash.constEnd())
295 return mHash.values();
305 auto iter = mHash.constFind(key);
307 if(iter == mHash.constEnd())
310 return iter.value()->isNull();
315 auto iter = mHash.constFind(key);
317 if(iter == mHash.constEnd())
320 return iter.value()->isBool();
325 auto iter = mHash.constFind(key);
327 if(iter == mHash.constEnd())
330 return iter.value()->isDouble();
335 auto iter = mHash.constFind(key);
337 if(iter == mHash.constEnd())
340 return iter.value()->isString();
345 auto iter = mHash.constFind(key);
347 if(iter == mHash.constEnd())
350 return iter.value()->isArray();
355 auto iter = mHash.constFind(key);
357 if(iter == mHash.constEnd())
360 return iter.value()->isObject();
365 return this->
value(key)->toBool();
370 return this->
value(key)->toDouble();
375 return this->
value(key)->toString();
380 return this->
value(key)->toArray();
385 return this->
value(key)->toObject();
390 return this->
value(key)->toBool(defaultValue);
395 return this->
value(key)->toDouble(defaultValue);
400 return this->
value(key)->toString(defaultValue);
403 const QMPointer<QMJsonArray> &
QMJsonObject::toArray(
const QString &key,
const QMPointer<QMJsonArray> &defaultValue)
const 405 return this->
value(key)->toArray(defaultValue);
408 const QMPointer<QMJsonObject> &
QMJsonObject::toObject(
const QString &key,
const QMPointer<QMJsonObject> &defaultValue)
const 410 return this->
value(key)->toObject(defaultValue);
415 return this->
value(key)->fromBool(value);
420 return this->
value(key)->fromDouble(value);
425 return this->
value(key)->fromString(value);
430 return this->
value(key)->fromArray(value);
435 return this->
value(key)->fromObject(value);
440 return this->
value(key)->from(value);
445 QDebugStateSaver saver(dbg);
446 auto started =
false;
448 dbg.nospace() <<
"QMJsonObject{";
450 for(
const auto &key :
object.keys())
455 dbg << key <<
":" <<
object.value(key);
462 QDebug operator<<(QDebug dbg, const QMPointer<QMJsonObject> &value)
464 if(value.isNull() ==
true)
466 QDebugStateSaver saver(dbg);
468 dbg.nospace() <<
"QMPointer<";
469 dbg <<
"QMJsonObject" <<
">: NULL";
475 return dbg << *value;
virtual int32_t size(void) const
virtual const QMPointer< QMJsonValue > & value(const QString &key) const
virtual QHash< QString, QMPointer< QMJsonValue > >::iterator begin(void)
virtual bool isDouble(const QString &key) const
virtual const QString key(const QMPointer< QMJsonValue > &value) const
void itemRemoved(const QString &key, const QMPointer< QMJsonValue > &value)
virtual bool toBool(const QString &key) const
virtual QList< QMPointer< QMJsonValue > > values(void) const
QDebug operator<<(QDebug dbg, const QMJsonObject &object)
virtual QHash< QString, QMPointer< QMJsonValue > >::const_iterator cbegin(void) const
virtual void reserve(int32_t alloc)
virtual bool fromDouble(const QString &key, double value)
virtual bool isNull(const QString &key) const
void itemAdded(const QString &key, const QMPointer< QMJsonValue > &value)
virtual const QMPointer< QMJsonObject > & toObject(const QString &key) const
virtual void remove(const QString &key)
virtual const QMPointer< QMJsonArray > & toArray(const QString &key) const
virtual QHash< QString, QMPointer< QMJsonValue > >::iterator find(const QString &key)
virtual QList< QString > keys(void) const
virtual bool isObject(const QString &key) const
virtual void insert(const QString &key, const QMPointer< QMJsonValue > &value, QMJsonReplacementPolicy policy=QMJsonReplacementPolicy_Replace)
virtual bool isArray(const QString &key) const
virtual bool fromArray(const QString &key, const QMPointer< QMJsonArray > &value)
virtual bool fromBool(const QString &key, bool value)
virtual bool isString(const QString &key) const
virtual bool isBool(const QString &key) const
virtual const QHash< QString, QMPointer< QMJsonValue > >::const_iterator cfind(const QString &key) const
virtual QString toString(const QString &key) const
virtual bool empty(void) const
virtual QMPointer< QMJsonValue > take(const QString &key)
virtual QHash< QString, QMPointer< QMJsonValue > > hash(void) const
virtual void squeeze(void)
virtual bool fromObject(const QString &key, const QMPointer< QMJsonObject > &value)
virtual int32_t count(void) const
virtual bool fromString(const QString &key, const QString &value)
virtual const QHash< QString, QMPointer< QMJsonValue > >::iterator erase(const QHash< QString, QMPointer< QMJsonValue > >::iterator &iter)
virtual bool contains(const QString &key) const
virtual bool from(const QString &key, const QMPointer< QMJsonValue > &value)
virtual bool isEmpty(void) const
virtual int32_t capacity(void) const
virtual QHash< QString, QMPointer< QMJsonValue > >::iterator end(void)
virtual double toDouble(const QString &key) const
virtual QHash< QString, QMPointer< QMJsonValue > >::const_iterator cend(void) const
virtual void unite(const QMPointer< QMJsonObject > &object, QMJsonReplacementPolicy replacementPolicy=QMJsonReplacementPolicy_Replace, QMJsonArrayUnitePolicy unitePolicy=QMJsonArrayUnitePolicy_Append)