qjsondocument.cpp

Absolute File Name:/home/qt/qt5_coco/qt5/qtbase/src/corelib/json/qjsondocument.cpp
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3QJsonDocument::QJsonDocument()-
4 : d(0)-
5{-
6}-
7-
8-
9-
10-
11QJsonDocument::QJsonDocument(const QJsonObject &object)-
12 : d(0)-
13{-
14 setObject(object);-
15}-
16-
17-
18-
19-
20QJsonDocument::QJsonDocument(const QJsonArray &array)-
21 : d(0)-
22{-
23 setArray(array);-
24}-
25-
26-
27-
28-
29QJsonDocument::QJsonDocument(QJsonPrivate::Data *data)-
30 : d(data)-
31{-
32 ((!(d)) ? qt_assert("d",__FILE__,108114) : qt_noop());-
33 d->ref.ref();-
34}-
35-
36-
37-
38-
39-
40-
41QJsonDocument::~QJsonDocument()-
42{-
43 if (d && !d->ref.deref())-
44 delete d;-
45}-
46-
47-
48-
49-
50QJsonDocument::QJsonDocument(const QJsonDocument &other)-
51{-
52 d = other.d;-
53 if (d)-
54 d->ref.ref();-
55}-
56-
57-
58-
59-
60-
61QJsonDocument &QJsonDocument::operator =(const QJsonDocument &other)-
62{-
63 if (d != other.d) {-
64 if (d && !d->ref.deref())-
65 delete d;-
66 d = other.d;-
67 if (d)-
68 d->ref.ref();-
69 }-
70-
71 return *this;-
72}-
73QJsonDocument QJsonDocument::fromRawData(const char *data, int size, DataValidation validation)-
74{-
75 if (quintptr(data) & 3
quintptr(data) & 3Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
76 QMessageLogger(__FILE__, 181187, __PRETTY_FUNCTION__).warning() <<("QJsonDocument::fromRawData: data has to have 4 byte alignment";);-
77 return
never executed: return QJsonDocument();
QJsonDocument();
never executed: return QJsonDocument();
0
78 }if (size < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base)))-
return QJsonDocument();
79-
80 QJsonPrivate::Data *d = new QJsonPrivate::Data((char *)data, size);-
81 d->ownsData = false;-
82-
83 if (validation != BypassValidation
validation != BypassValidationDescription
TRUEnever evaluated
FALSEnever evaluated
&& !d->valid()
!d->valid()Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
84 delete d;-
85 return
never executed: return QJsonDocument();
QJsonDocument();
never executed: return QJsonDocument();
0
86 }-
87-
88 return
never executed: return QJsonDocument(d);
QJsonDocument(d);
never executed: return QJsonDocument(d);
0
89}-
90const char *QJsonDocument::rawData(int *size) const-
91{-
92 if (!d) {-
93 *size = 0;-
94 return 0;-
95 }-
96 *size = d->alloc;-
97 return d->rawData;-
98}-
99QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, DataValidation validation)-
100{-
101 if (data.size() < (int)(sizeof(QJsonPrivate::Header) + sizeof(QJsonPrivate::Base)))-
102 return QJsonDocument();-
103-
104 QJsonPrivate::Header h;-
105 memcpy(&h, data.constData(), sizeof(QJsonPrivate::Header));-
106 QJsonPrivate::Base root;-
107 memcpy(&root, data.constData() + sizeof(QJsonPrivate::Header), sizeof(QJsonPrivate::Base));-
108-
109-
110 if (h.tag != QJsonDocument::BinaryFormatTag || h.version != 1u ||-
111 sizeof(QJsonPrivate::Header) + root.size > (uint)data.size())-
112 return QJsonDocument();-
113-
114 const uint size = sizeof(QJsonPrivate::Header) + root.size;-
115 char *raw = (char *)malloc(size);-
116 if (!raw)-
117 return QJsonDocument();-
118-
119 memcpy(raw, data.constData(), size);-
120 QJsonPrivate::Data *d = new QJsonPrivate::Data(raw, size);-
121-
122 if (validation != BypassValidation && !d->valid()) {-
123 delete d;-
124 return QJsonDocument();-
125 }-
126-
127 return QJsonDocument(d);-
128}-
129QJsonDocument QJsonDocument::fromVariant(const QVariant &variant)-
130{-
131 QJsonDocument doc;-
132 if (variant.type() == QVariant::Map) {-
133 doc.setObject(QJsonObject::fromVariantMap(variant.toMap()));-
134 } else if (variant.type() == QVariant::List) {-
135 doc.setArray(QJsonArray::fromVariantList(variant.toList()));-
136 } else if (variant.type() == QVariant::StringList) {-
137 doc.setArray(QJsonArray::fromStringList(variant.toStringList()));-
138 }-
139 return doc;-
140}-
141QVariant QJsonDocument::toVariant() const-
142{-
143 if (!d)-
144 return QVariant();-
145-
146 if (d->header->root()->isArray())-
147 return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root())).toVariantList();-
148 else-
149 return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root())).toVariantMap();-
150}-
151-
152-
153-
154-
155-
156-
157-
158QByteArray QJsonDocument::toJson() const-
159{-
160 return toJson(Indented);-
161}-
162QByteArray QJsonDocument::toJson(JsonFormat format) const-
163{-
164 if (!d)-
165 return QByteArray();-
166-
167 QByteArray json;-
168-
169 if (d->header->root()->isArray())-
170 QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(d->header->root()), json, 0, (format == Compact));-
171 else-
172 QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(d->header->root()), json, 0, (format == Compact));-
173-
174 return json;-
175}-
176QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error)-
177{-
178 QJsonPrivate::Parser parser(json.constData(), json.length());-
179 return parser.parse(error);-
180}-
181-
182-
183-
184-
185bool QJsonDocument::isEmpty() const-
186{-
187 if (!d)-
188 return true;-
189-
190 return false;-
191}-
192QByteArray QJsonDocument::toBinaryData() const-
193{-
194 if (!d || !d->rawData)-
195 return QByteArray();-
196-
197 return QByteArray(d->rawData, d->header->root()->size + sizeof(QJsonPrivate::Header));-
198}-
199-
200-
201-
202-
203-
204-
205bool QJsonDocument::isArray() const-
206{-
207 if (!d)-
208 return false;-
209-
210 QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;-
211 return h->root()->isArray();-
212}-
213-
214-
215-
216-
217-
218-
219bool QJsonDocument::isObject() const-
220{-
221 if (!d)-
222 return false;-
223-
224 QJsonPrivate::Header *h = (QJsonPrivate::Header *)d->rawData;-
225 return h->root()->isObject();-
226}-
227QJsonObject QJsonDocument::object() const-
228{-
229 if (d) {-
230 QJsonPrivate::Base *b = d->header->root();-
231 if (b->isObject())-
232 return QJsonObject(d, static_cast<QJsonPrivate::Object *>(b));-
233 }-
234 return QJsonObject();-
235}-
236QJsonArray QJsonDocument::array() const-
237{-
238 if (d) {-
239 QJsonPrivate::Base *b = d->header->root();-
240 if (b->isArray())-
241 return QJsonArray(d, static_cast<QJsonPrivate::Array *>(b));-
242 }-
243 return QJsonArray();-
244}-
245-
246-
247-
248-
249-
250-
251void QJsonDocument::setObject(const QJsonObject &object)-
252{-
253 if (d && !d->ref.deref())-
254 delete d;-
255-
256 d = object.d;-
257-
258 if (!d) {-
259 d = new QJsonPrivate::Data(0, QJsonValue::Object);-
260 } else if (d->compactionCounter || object.o != d->header->root()) {-
261 QJsonObject o(object);-
262 if (d->compactionCounter)-
263 o.compact();-
264 else-
265 o.detach2();-
266 d = o.d;-
267 d->ref.ref();-
268 return;-
269 }-
270 d->ref.ref();-
271}-
272-
273-
274-
275-
276-
277-
278void QJsonDocument::setArray(const QJsonArray &array)-
279{-
280 if (d && !d->ref.deref())-
281 delete d;-
282-
283 d = array.d;-
284-
285 if (!d) {-
286 d = new QJsonPrivate::Data(0, QJsonValue::Array);-
287 } else if (d->compactionCounter || array.a != d->header->root()) {-
288 QJsonArray a(array);-
289 if (d->compactionCounter)-
290 a.compact();-
291 else-
292 a.detach2();-
293 d = a.d;-
294 d->ref.ref();-
295 return;-
296 }-
297 d->ref.ref();-
298}-
299-
300-
301-
302-
303bool QJsonDocument::operator==(const QJsonDocument &other) const-
304{-
305 if (d == other.d)-
306 return true;-
307-
308 if (!d || !other.d)-
309 return false;-
310-
311 if (d->header->root()->isArray() != other.d->header->root()->isArray())-
312 return false;-
313-
314 if (d->header->root()->isObject())-
315 return QJsonObject(d, static_cast<QJsonPrivate::Object *>(d->header->root()))-
316 == QJsonObject(other.d, static_cast<QJsonPrivate::Object *>(other.d->header->root()));-
317 else-
318 return QJsonArray(d, static_cast<QJsonPrivate::Array *>(d->header->root()))-
319 == QJsonArray(other.d, static_cast<QJsonPrivate::Array *>(other.d->header->root()));-
320}-
321bool QJsonDocument::isNull() const-
322{-
323 return (d == 0);-
324}-
325-
326-
327QDebug operator<<(QDebug dbg, const QJsonDocument &o)-
328{-
329 QDebugStateSaver saver(dbg);-
330 if (!o.d) {-
331 dbg << "QJsonDocument()";-
332 return dbg;-
333 }-
334 QByteArray json;-
335 if (o.d->header->root()->isArray())-
336 QJsonPrivate::Writer::arrayToJson(static_cast<QJsonPrivate::Array *>(o.d->header->root()), json, 0, true);-
337 else-
338 QJsonPrivate::Writer::objectToJson(static_cast<QJsonPrivate::Object *>(o.d->header->root()), json, 0, true);-
339 dbg.nospace() << "QJsonDocument("-
340 << json.constData()-
341 << ')';-
342 return dbg;-
343}-
344-
345-
346-
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial 4.3.0-BETA-master-30-08-2018-4cb69e9