Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/corelib/json/qjsonvalue.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||
---|---|---|---|---|---|---|---|---|
1 | - | |||||||
2 | - | |||||||
3 | - | |||||||
4 | QJsonValue::QJsonValue(Type type) | - | ||||||
5 | : ui(0), d(0), t(type) | - | ||||||
6 | { | - | ||||||
7 | } | - | ||||||
8 | - | |||||||
9 | - | |||||||
10 | - | |||||||
11 | - | |||||||
12 | QJsonValue::QJsonValue(QJsonPrivate::Data *data, QJsonPrivate::Base *base, const QJsonPrivate::Value &v) | - | ||||||
13 | : d(0) | - | ||||||
14 | { | - | ||||||
15 | t = (Type)(uint)v.type; | - | ||||||
16 | switch (t) { | - | ||||||
17 | case Undefined: | - | ||||||
18 | case Null: | - | ||||||
19 | dbl = 0; | - | ||||||
20 | break; | - | ||||||
21 | case Bool: | - | ||||||
22 | b = v.toBoolean(); | - | ||||||
23 | break; | - | ||||||
24 | case Double: | - | ||||||
25 | dbl = v.toDouble(base); | - | ||||||
26 | break; | - | ||||||
27 | case String: { | - | ||||||
28 | QString s = v.toString(base); | - | ||||||
29 | stringData = s.data_ptr(); | - | ||||||
30 | stringData->ref.ref(); | - | ||||||
31 | break; | - | ||||||
32 | } | - | ||||||
33 | case Array: | - | ||||||
34 | case Object: | - | ||||||
35 | d = data; | - | ||||||
36 | this->base = v.base(base); | - | ||||||
37 | break; | - | ||||||
38 | } | - | ||||||
39 | if (d) | - | ||||||
40 | d->ref.ref(); | - | ||||||
41 | } | - | ||||||
42 | - | |||||||
43 | - | |||||||
44 | - | |||||||
45 | - | |||||||
46 | QJsonValue::QJsonValue(bool b) | - | ||||||
47 | : d(0), t(Bool) | - | ||||||
48 | { | - | ||||||
49 | this->b = b; | - | ||||||
50 | } | - | ||||||
51 | - | |||||||
52 | - | |||||||
53 | - | |||||||
54 | - | |||||||
55 | QJsonValue::QJsonValue(double n) | - | ||||||
56 | : d(0), t(Double) | - | ||||||
57 | { | - | ||||||
58 | this->dbl = n; | - | ||||||
59 | } | - | ||||||
60 | - | |||||||
61 | - | |||||||
62 | - | |||||||
63 | - | |||||||
64 | - | |||||||
65 | QJsonValue::QJsonValue(int n) | - | ||||||
66 | : d(0), t(Double) | - | ||||||
67 | { | - | ||||||
68 | this->dbl = n; | - | ||||||
69 | } | - | ||||||
70 | - | |||||||
71 | - | |||||||
72 | - | |||||||
73 | - | |||||||
74 | - | |||||||
75 | - | |||||||
76 | - | |||||||
77 | QJsonValue::QJsonValue(qint64 n) | - | ||||||
78 | : d(0), t(Double) | - | ||||||
79 | { | - | ||||||
80 | this->dbl = double(n); | - | ||||||
81 | } | - | ||||||
82 | - | |||||||
83 | - | |||||||
84 | - | |||||||
85 | - | |||||||
86 | QJsonValue::QJsonValue(const QString &s) | - | ||||||
87 | : d(0), t(String) | - | ||||||
88 | { | - | ||||||
89 | stringDataFromQStringHelper(s); | - | ||||||
90 | } | - | ||||||
91 | void QJsonValue::stringDataFromQStringHelper(const QString &string) | - | ||||||
92 | { | - | ||||||
93 | stringData = *(QStringData **)(&string); | - | ||||||
94 | stringData->ref.ref(); | - | ||||||
95 | } | - | ||||||
96 | - | |||||||
97 | - | |||||||
98 | - | |||||||
99 | - | |||||||
100 | QJsonValue::QJsonValue(QLatin1String s) | - | ||||||
101 | : d(0), t(String) | - | ||||||
102 | { | - | ||||||
103 | - | |||||||
104 | QString str(s); | - | ||||||
105 | stringDataFromQStringHelper(str); | - | ||||||
106 | } | - | ||||||
107 | - | |||||||
108 | - | |||||||
109 | - | |||||||
110 | - | |||||||
111 | QJsonValue::QJsonValue(const QJsonArray &a) | - | ||||||
112 | : d(a.d), t(Array) | - | ||||||
113 | { | - | ||||||
114 | base = a.a; | - | ||||||
115 | if (d) | - | ||||||
116 | d->ref.ref(); | - | ||||||
117 | } | - | ||||||
118 | - | |||||||
119 | - | |||||||
120 | - | |||||||
121 | - | |||||||
122 | QJsonValue::QJsonValue(const QJsonObject &o) | - | ||||||
123 | : d(o.d), t(Object) | - | ||||||
124 | { | - | ||||||
125 | base = o.o; | - | ||||||
126 | if (d) | - | ||||||
127 | d->ref.ref(); | - | ||||||
128 | } | - | ||||||
129 | - | |||||||
130 | - | |||||||
131 | - | |||||||
132 | - | |||||||
133 | - | |||||||
134 | QJsonValue::~QJsonValue() | - | ||||||
135 | { | - | ||||||
136 | if (t == String && stringData && !stringData->ref.deref()) | - | ||||||
137 | free(stringData); | - | ||||||
138 | - | |||||||
139 | if (d && !d->ref.deref()) | - | ||||||
140 | delete d; | - | ||||||
141 | } | - | ||||||
142 | - | |||||||
143 | - | |||||||
144 | - | |||||||
145 | - | |||||||
146 | QJsonValue::QJsonValue(const QJsonValue &other) | - | ||||||
147 | { | - | ||||||
148 | t = other.t; | - | ||||||
149 | d = other.d; | - | ||||||
150 | ui = other.ui; | - | ||||||
151 | if (d) | - | ||||||
152 | d->ref.ref(); | - | ||||||
153 | - | |||||||
154 | if (t == String && stringData) | - | ||||||
155 | stringData->ref.ref(); | - | ||||||
156 | } | - | ||||||
157 | - | |||||||
158 | - | |||||||
159 | - | |||||||
160 | - | |||||||
161 | QJsonValue &QJsonValue::operator =(const QJsonValue &other) | - | ||||||
162 | { | - | ||||||
163 | QJsonValue copy(other); | - | ||||||
164 | - | |||||||
165 | qSwap(dbl, copy.dbl); | - | ||||||
166 | qSwap(d, copy.d); | - | ||||||
167 | qSwap(t, copy.t); | - | ||||||
168 | return *this; | - | ||||||
169 | } | - | ||||||
170 | QJsonValue QJsonValue::fromVariant(const QVariant &variant) | - | ||||||
171 | { | - | ||||||
172 | switch (variant.userType()) { | - | ||||||
173 | case QVariant::Bool: | - | ||||||
174 | return QJsonValue(variant.toBool()); | - | ||||||
175 | case QVariant::Int: | - | ||||||
176 | case QMetaType::Float: | - | ||||||
177 | case QVariant::Double: | - | ||||||
178 | case QVariant::LongLong: | - | ||||||
179 | case QVariant::ULongLong: | - | ||||||
180 | case QVariant::UInt: | - | ||||||
181 | return QJsonValue(variant.toDouble()); | - | ||||||
182 | case QVariant::String: | - | ||||||
183 | return QJsonValue(variant.toString()); | - | ||||||
184 | case QVariant::StringList: | - | ||||||
185 | return QJsonValue(QJsonArray::fromStringList(variant.toStringList())); | - | ||||||
186 | case QVariant::List: | - | ||||||
187 | return QJsonValue(QJsonArray::fromVariantList(variant.toList())); | - | ||||||
188 | case QVariant::Map: | - | ||||||
189 | return QJsonValue(QJsonObject::fromVariantMap(variant.toMap())); | - | ||||||
190 | case QVariant::Hash: | - | ||||||
191 | return QJsonValue(QJsonObject::fromVariantHash(variant.toHash())); | - | ||||||
192 | - | |||||||
193 | case QMetaType::QJsonValue: | - | ||||||
194 | return variant.toJsonValue(); | - | ||||||
195 | case QMetaType::QJsonObject: | - | ||||||
196 | return variant.toJsonObject(); | - | ||||||
197 | case QMetaType::QJsonArray: | - | ||||||
198 | return variant.toJsonArray(); | - | ||||||
199 | case QMetaType::QJsonDocument: { | - | ||||||
200 | QJsonDocument doc = variant.toJsonDocument(); | - | ||||||
201 | return doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object()); | - | ||||||
202 | } | - | ||||||
203 | - | |||||||
204 | default: | - | ||||||
205 | break; | - | ||||||
206 | } | - | ||||||
207 | QString string = variant.toString(); | - | ||||||
208 | if (string.isEmpty()) | - | ||||||
209 | return QJsonValue(); | - | ||||||
210 | return QJsonValue(string); | - | ||||||
211 | } | - | ||||||
212 | QVariant QJsonValue::toVariant() const | - | ||||||
213 | { | - | ||||||
214 | switch (t) { | - | ||||||
215 | case Bool: | - | ||||||
216 | return b; | - | ||||||
217 | case Double: | - | ||||||
218 | return dbl; | - | ||||||
219 | case String: | - | ||||||
220 | return toString(); | - | ||||||
221 | case Array: | - | ||||||
222 | return d ? | - | ||||||
223 | QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)).toVariantList() : | - | ||||||
224 | QVariantList(); | - | ||||||
225 | case Object: | - | ||||||
226 | return d ? | - | ||||||
227 | QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)).toVariantMap() : | - | ||||||
228 | QVariantMap(); | - | ||||||
229 | case Null: | - | ||||||
230 | case Undefined: | - | ||||||
231 | break; | - | ||||||
232 | } | - | ||||||
233 | return QVariant(); | - | ||||||
234 | } | - | ||||||
235 | QJsonValue::Type QJsonValue::type() const | - | ||||||
236 | { | - | ||||||
237 | return t; | - | ||||||
238 | } | - | ||||||
239 | - | |||||||
240 | - | |||||||
241 | - | |||||||
242 | - | |||||||
243 | - | |||||||
244 | - | |||||||
245 | bool QJsonValue::toBool(bool defaultValue) const | - | ||||||
246 | { | - | ||||||
247 | if (t != Bool) | - | ||||||
248 | return defaultValue; | - | ||||||
249 | return b; | - | ||||||
250 | } | - | ||||||
251 | - | |||||||
252 | - | |||||||
253 | - | |||||||
254 | - | |||||||
255 | - | |||||||
256 | - | |||||||
257 | - | |||||||
258 | int QJsonValue::toInt(int defaultValue) const | - | ||||||
259 | { | - | ||||||
260 | if (t == Double && int(dbl) == dbl) | - | ||||||
261 | return int(dbl); | - | ||||||
262 | return defaultValue; | - | ||||||
263 | } | - | ||||||
264 | - | |||||||
265 | - | |||||||
266 | - | |||||||
267 | - | |||||||
268 | - | |||||||
269 | - | |||||||
270 | double QJsonValue::toDouble(double defaultValue) const | - | ||||||
271 | { | - | ||||||
272 | if (t != Double) | - | ||||||
273 | return defaultValue; | - | ||||||
274 | return dbl; | - | ||||||
275 | } | - | ||||||
276 | - | |||||||
277 | - | |||||||
278 | - | |||||||
279 | - | |||||||
280 | - | |||||||
281 | - | |||||||
282 | QString QJsonValue::toString(const QString &defaultValue) const | - | ||||||
283 | { | - | ||||||
284 | if (t != String) | - | ||||||
285 | return defaultValue; | - | ||||||
286 | stringData->ref.ref(); | - | ||||||
287 | QStringDataPtr holder = { stringData }; | - | ||||||
288 | return QString(holder); | - | ||||||
289 | } | - | ||||||
290 | QString QJsonValue::toString() const | - | ||||||
291 | { | - | ||||||
292 | if (t != String
| 157-69808 | ||||||
293 | return executed 157 times by 3 tests: QString();return QString(); Executed by:
executed 157 times by 3 tests: return QString(); Executed by:
| 157 | ||||||
294 | stringData->ref.ref(); | - | ||||||
295 | QStringDataPtr holder = { stringData }; | - | ||||||
296 | return executed 69808 times by 117 tests: QString(holder);return QString(holder); Executed by:
executed 69808 times by 117 tests: return QString(holder); Executed by:
| 69808 | ||||||
297 | } | - | ||||||
298 | - | |||||||
299 | - | |||||||
300 | - | |||||||
301 | - | |||||||
302 | - | |||||||
303 | - | |||||||
304 | QJsonArray QJsonValue::toArray(const QJsonArray &defaultValue) const | - | ||||||
305 | { | - | ||||||
306 | if (!d || t != Array) | - | ||||||
307 | return defaultValue; | - | ||||||
308 | - | |||||||
309 | return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)); | - | ||||||
310 | } | - | ||||||
311 | QJsonArray QJsonValue::toArray() const | - | ||||||
312 | { | - | ||||||
313 | return toArray(QJsonArray()); | - | ||||||
314 | } | - | ||||||
315 | - | |||||||
316 | - | |||||||
317 | - | |||||||
318 | - | |||||||
319 | - | |||||||
320 | - | |||||||
321 | QJsonObject QJsonValue::toObject(const QJsonObject &defaultValue) const | - | ||||||
322 | { | - | ||||||
323 | if (!d || t != Object) | - | ||||||
324 | return defaultValue; | - | ||||||
325 | - | |||||||
326 | return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)); | - | ||||||
327 | } | - | ||||||
328 | QJsonObject QJsonValue::toObject() const | - | ||||||
329 | { | - | ||||||
330 | return toObject(QJsonObject()); | - | ||||||
331 | } | - | ||||||
332 | - | |||||||
333 | - | |||||||
334 | - | |||||||
335 | - | |||||||
336 | bool QJsonValue::operator==(const QJsonValue &other) const | - | ||||||
337 | { | - | ||||||
338 | if (t != other.t) | - | ||||||
339 | return false; | - | ||||||
340 | - | |||||||
341 | switch (t) { | - | ||||||
342 | case Undefined: | - | ||||||
343 | case Null: | - | ||||||
344 | break; | - | ||||||
345 | case Bool: | - | ||||||
346 | return b == other.b; | - | ||||||
347 | case Double: | - | ||||||
348 | return dbl == other.dbl; | - | ||||||
349 | case String: | - | ||||||
350 | return toString() == other.toString(); | - | ||||||
351 | case Array: | - | ||||||
352 | if (base == other.base) | - | ||||||
353 | return true; | - | ||||||
354 | if (!base) | - | ||||||
355 | return !other.base->length; | - | ||||||
356 | if (!other.base) | - | ||||||
357 | return !base->length; | - | ||||||
358 | return QJsonArray(d, static_cast<QJsonPrivate::Array *>(base)) | - | ||||||
359 | == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.base)); | - | ||||||
360 | case Object: | - | ||||||
361 | if (base == other.base) | - | ||||||
362 | return true; | - | ||||||
363 | if (!base) | - | ||||||
364 | return !other.base->length; | - | ||||||
365 | if (!other.base) | - | ||||||
366 | return !base->length; | - | ||||||
367 | return QJsonObject(d, static_cast<QJsonPrivate::Object *>(base)) | - | ||||||
368 | == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.base)); | - | ||||||
369 | } | - | ||||||
370 | return true; | - | ||||||
371 | } | - | ||||||
372 | - | |||||||
373 | - | |||||||
374 | - | |||||||
375 | - | |||||||
376 | bool QJsonValue::operator!=(const QJsonValue &other) const | - | ||||||
377 | { | - | ||||||
378 | return !(*this == other); | - | ||||||
379 | } | - | ||||||
380 | - | |||||||
381 | - | |||||||
382 | - | |||||||
383 | - | |||||||
384 | void QJsonValue::detach() | - | ||||||
385 | { | - | ||||||
386 | if (!d) | - | ||||||
387 | return; | - | ||||||
388 | - | |||||||
389 | QJsonPrivate::Data *x = d->clone(base); | - | ||||||
390 | x->ref.ref(); | - | ||||||
391 | if (!d->ref.deref()) | - | ||||||
392 | delete d; | - | ||||||
393 | d = x; | - | ||||||
394 | base = static_cast<QJsonPrivate::Object *>(d->header->root()); | - | ||||||
395 | } | - | ||||||
396 | QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val) | - | ||||||
397 | { | - | ||||||
398 | if (is_object) | - | ||||||
399 | o->setValueAt(index, val); | - | ||||||
400 | else | - | ||||||
401 | a->replace(index, val); | - | ||||||
402 | - | |||||||
403 | return *this; | - | ||||||
404 | } | - | ||||||
405 | - | |||||||
406 | QJsonValueRef &QJsonValueRef::operator =(const QJsonValueRef &ref) | - | ||||||
407 | { | - | ||||||
408 | if (is_object) | - | ||||||
409 | o->setValueAt(index, ref); | - | ||||||
410 | else | - | ||||||
411 | a->replace(index, ref); | - | ||||||
412 | - | |||||||
413 | return *this; | - | ||||||
414 | } | - | ||||||
415 | - | |||||||
416 | QVariant QJsonValueRef::toVariant() const | - | ||||||
417 | { | - | ||||||
418 | return toValue().toVariant(); | - | ||||||
419 | } | - | ||||||
420 | - | |||||||
421 | QJsonArray QJsonValueRef::toArray() const | - | ||||||
422 | { | - | ||||||
423 | return toValue().toArray(); | - | ||||||
424 | } | - | ||||||
425 | - | |||||||
426 | QJsonObject QJsonValueRef::toObject() const | - | ||||||
427 | { | - | ||||||
428 | return toValue().toObject(); | - | ||||||
429 | } | - | ||||||
430 | - | |||||||
431 | QJsonValue QJsonValueRef::toValue() const | - | ||||||
432 | { | - | ||||||
433 | if (!is_object) | - | ||||||
434 | return a->at(index); | - | ||||||
435 | return o->valueAt(index); | - | ||||||
436 | } | - | ||||||
437 | - | |||||||
438 | - | |||||||
439 | QDebug operator<<(QDebug dbg, const QJsonValue &o) | - | ||||||
440 | { | - | ||||||
441 | QDebugStateSaver saver(dbg); | - | ||||||
442 | switch (o.t) { | - | ||||||
443 | case QJsonValue::Undefined: | - | ||||||
444 | dbg << "QJsonValue(undefined)"; | - | ||||||
445 | break; | - | ||||||
446 | case QJsonValue::Null: | - | ||||||
447 | dbg << "QJsonValue(null)"; | - | ||||||
448 | break; | - | ||||||
449 | case QJsonValue::Bool: | - | ||||||
450 | dbg.nospace() << "QJsonValue(bool, " << o.toBool() << ')'; | - | ||||||
451 | break; | - | ||||||
452 | case QJsonValue::Double: | - | ||||||
453 | dbg.nospace() << "QJsonValue(double, " << o.toDouble() << ')'; | - | ||||||
454 | break; | - | ||||||
455 | case QJsonValue::String: | - | ||||||
456 | dbg.nospace() << "QJsonValue(string, " << o.toString() << ')'; | - | ||||||
457 | break; | - | ||||||
458 | case QJsonValue::Array: | - | ||||||
459 | dbg.nospace() << "QJsonValue(array, "; | - | ||||||
460 | dbg << o.toArray(); | - | ||||||
461 | dbg << ')'; | - | ||||||
462 | break; | - | ||||||
463 | case QJsonValue::Object: | - | ||||||
464 | dbg.nospace() << "QJsonValue(object, "; | - | ||||||
465 | dbg << o.toObject(); | - | ||||||
466 | dbg << ')'; | - | ||||||
467 | break; | - | ||||||
468 | } | - | ||||||
469 | return dbg; | - | ||||||
470 | } | - | ||||||
471 | - | |||||||
472 | - | |||||||
473 | - | |||||||
Switch to Source code | Preprocessed file |