json/qjsonwriter.cpp

Switch to Source codePreprocessed file
LineSource CodeCoverage
1 -
2 -
3 -
4using namespace QJsonPrivate; -
5 -
6static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact); -
7static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact); -
8 -
9static inline uchar hexdig(uint u) -
10{ -
11 return (u < 0xa ? '0' + u : 'a' + u - 0xa);
executed: return (u < 0xa ? '0' + u : 'a' + u - 0xa);
Execution Count:10542
10542
12} -
13 -
14static QByteArray escapedString(const QString &s) -
15{ -
16 const uchar replacement = '?'; -
17 QByteArray ba(s.length(), Qt::Uninitialized); -
18 -
19 uchar *cursor = (uchar *)ba.data(); -
20 const uchar *ba_end = cursor + ba.length(); -
21 -
22 const QChar *ch = (const QChar *)s.constData(); -
23 const QChar *end = ch + s.length(); -
24 -
25 int surrogate_high = -1; -
26 -
27 while (ch < end) {
evaluated: ch < end
TRUEFALSE
yes
Evaluation Count:27278864
yes
Evaluation Count:1332760
1332760-27278864
28 if (cursor >= ba_end - 6) {
evaluated: cursor >= ba_end - 6
TRUEFALSE
yes
Evaluation Count:1996087
yes
Evaluation Count:25282777
1996087-25282777
29 -
30 int pos = cursor - (const uchar *)ba.constData(); -
31 ba.resize(ba.size()*2); -
32 cursor = (uchar *)ba.data() + pos; -
33 ba_end = (const uchar *)ba.constData() + ba.length(); -
34 }
executed: }
Execution Count:1996087
1996087
35 -
36 uint u = ch->unicode(); -
37 if (surrogate_high >= 0) {
partially evaluated: surrogate_high >= 0
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:27278864
0-27278864
38 if (ch->isLowSurrogate()) {
never evaluated: ch->isLowSurrogate()
0
39 u = QChar::surrogateToUcs4(surrogate_high, u); -
40 surrogate_high = -1; -
41 } else {
never executed: }
0
42 -
43 *cursor = replacement; -
44 ++ch; -
45 surrogate_high = -1; -
46 continue;
never executed: continue;
0
47 } -
48 } else if (ch->isLowSurrogate()) {
partially evaluated: ch->isLowSurrogate()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:27278864
0-27278864
49 -
50 *cursor = replacement; -
51 ++ch; -
52 continue;
never executed: continue;
0
53 } else if (ch->isHighSurrogate()) {
partially evaluated: ch->isHighSurrogate()
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:27278864
0-27278864
54 surrogate_high = u; -
55 ++ch; -
56 continue;
never executed: continue;
0
57 } -
58 -
59 if (u < 0x80) {
evaluated: u < 0x80
TRUEFALSE
yes
Evaluation Count:27262928
yes
Evaluation Count:15936
15936-27262928
60 if (u < 0x20 || u == 0x22 || u == 0x5c) {
evaluated: u < 0x20
TRUEFALSE
yes
Evaluation Count:12955
yes
Evaluation Count:27249973
evaluated: u == 0x22
TRUEFALSE
yes
Evaluation Count:5208
yes
Evaluation Count:27244765
evaluated: u == 0x5c
TRUEFALSE
yes
Evaluation Count:751
yes
Evaluation Count:27244014
751-27249973
61 *cursor++ = '\\'; -
62 switch (u) { -
63 case 0x22: -
64 *cursor++ = '"'; -
65 break;
executed: break;
Execution Count:5208
5208
66 case 0x5c: -
67 *cursor++ = '\\'; -
68 break;
executed: break;
Execution Count:751
751
69 case 0x8: -
70 *cursor++ = 'b'; -
71 break;
executed: break;
Execution Count:1525
1525
72 case 0xc: -
73 *cursor++ = 'f'; -
74 break;
executed: break;
Execution Count:1564
1564
75 case 0xa: -
76 *cursor++ = 'n'; -
77 break;
executed: break;
Execution Count:1547
1547
78 case 0xd: -
79 *cursor++ = 'r'; -
80 break;
executed: break;
Execution Count:1536
1536
81 case 0x9: -
82 *cursor++ = 't'; -
83 break;
executed: break;
Execution Count:1512
1512
84 default: -
85 *cursor++ = 'u'; -
86 *cursor++ = '0'; -
87 *cursor++ = '0'; -
88 *cursor++ = hexdig(u>>4); -
89 *cursor++ = hexdig(u & 0xf); -
90 }
executed: }
Execution Count:5271
5271
91 } else {
executed: }
Execution Count:18914
18914
92 *cursor++ = (uchar)u; -
93 }
executed: }
Execution Count:27244014
27244014
94 } else { -
95 if (u < 0x0800) {
evaluated: u < 0x0800
TRUEFALSE
yes
Evaluation Count:7737
yes
Evaluation Count:8199
7737-8199
96 *cursor++ = 0xc0 | ((uchar) (u >> 6)); -
97 } else {
executed: }
Execution Count:7737
7737
98 -
99 if (QChar::isNonCharacter(u)) {
partially evaluated: QChar::isNonCharacter(u)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:8199
0-8199
100 *cursor++ = replacement; -
101 ++ch; -
102 continue;
never executed: continue;
0
103 } -
104 -
105 if (QChar::requiresSurrogates(u)) {
partially evaluated: QChar::requiresSurrogates(u)
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:8199
0-8199
106 *cursor++ = 0xf0 | ((uchar) (u >> 18)); -
107 *cursor++ = 0x80 | (((uchar) (u >> 12)) & 0x3f); -
108 } else {
never executed: }
0
109 *cursor++ = 0xe0 | (((uchar) (u >> 12)) & 0x3f); -
110 }
executed: }
Execution Count:8199
8199
111 *cursor++ = 0x80 | (((uchar) (u >> 6)) & 0x3f); -
112 }
executed: }
Execution Count:8199
8199
113 *cursor++ = 0x80 | ((uchar) (u&0x3f)); -
114 }
executed: }
Execution Count:15936
15936
115 ++ch; -
116 }
executed: }
Execution Count:27278864
27278864
117 -
118 ba.resize(cursor - (const uchar *)ba.constData()); -
119 return ba;
executed: return ba;
Execution Count:1332760
1332760
120} -
121 -
122static void valueToJson(const QJsonPrivate::Base *b, const QJsonPrivate::Value &v, QByteArray &json, int indent, bool compact) -
123{ -
124 QJsonValue::Type type = (QJsonValue::Type)(uint)v.type; -
125 switch (type) { -
126 case QJsonValue::Bool: -
127 json += v.toBoolean() ? "true" : "false";
evaluated: v.toBoolean()
TRUEFALSE
yes
Evaluation Count:1477
yes
Evaluation Count:1466
1466-1477
128 break;
executed: break;
Execution Count:2943
2943
129 case QJsonValue::Double: -
130 json += QByteArray::number(v.toDouble(b)); -
131 break;
executed: break;
Execution Count:450215
450215
132 case QJsonValue::String: -
133 json += '"'; -
134 json += escapedString(v.toString(b)); -
135 json += '"'; -
136 break;
executed: break;
Execution Count:349688
349688
137 case QJsonValue::Array: -
138 json += compact ? "[" : "[\n";
partially evaluated: compact
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:36437
0-36437
139 arrayContentToJson(static_cast<QJsonPrivate::Array *>(v.base(b)), json, indent + (compact ? 0 : 1), compact); -
140 json += QByteArray(4*indent, ' '); -
141 json += "]"; -
142 break;
executed: break;
Execution Count:36437
36437
143 case QJsonValue::Object: -
144 json += compact ? "{" : "{\n";
partially evaluated: compact
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:319522
0-319522
145 objectContentToJson(static_cast<QJsonPrivate::Object *>(v.base(b)), json, indent + (compact ? 0 : 1), compact); -
146 json += QByteArray(4*indent, ' '); -
147 json += "}"; -
148 break;
executed: break;
Execution Count:319522
319522
149 case QJsonValue::Null: -
150 default: -
151 json += "null"; -
152 }
executed: }
Execution Count:1538
1538
153}
executed: }
Execution Count:1160343
1160343
154 -
155static void arrayContentToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) -
156{ -
157 if (!a || !a->length)
partially evaluated: !a
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:37193
evaluated: !a->length
TRUEFALSE
yes
Evaluation Count:1470
yes
Evaluation Count:35723
0-37193
158 return;
executed: return;
Execution Count:1470
1470
159 -
160 QByteArray indentString(4*indent, ' '); -
161 -
162 uint i = 0; -
163 while (1) {
partially evaluated: 1
TRUEFALSE
yes
Evaluation Count:177271
no
Evaluation Count:0
0-177271
164 json += indentString; -
165 valueToJson(a, a->at(i), json, indent, compact); -
166 -
167 if (++i == a->length) {
evaluated: ++i == a->length
TRUEFALSE
yes
Evaluation Count:35723
yes
Evaluation Count:141548
35723-141548
168 if (!compact)
evaluated: !compact
TRUEFALSE
yes
Evaluation Count:35720
yes
Evaluation Count:3
3-35720
169 json += '\n';
executed: json += '\n';
Execution Count:35720
35720
170 break;
executed: break;
Execution Count:35723
35723
171 } -
172 -
173 json += compact ? "," : ",\n";
evaluated: compact
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:141545
3-141545
174 }
executed: }
Execution Count:141548
141548
175}
executed: }
Execution Count:35723
35723
176 -
177 -
178static void objectContentToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) -
179{ -
180 if (!o || !o->length)
partially evaluated: !o
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:319956
evaluated: !o->length
TRUEFALSE
yes
Evaluation Count:1470
yes
Evaluation Count:318486
0-319956
181 return;
executed: return;
Execution Count:1470
1470
182 -
183 QByteArray indentString(4*indent, ' '); -
184 -
185 uint i = 0; -
186 while (1) {
partially evaluated: 1
TRUEFALSE
yes
Evaluation Count:983072
no
Evaluation Count:0
0-983072
187 QJsonPrivate::Entry *e = o->entryAt(i); -
188 json += indentString; -
189 json += '"'; -
190 json += escapedString(e->key()); -
191 json += "\": "; -
192 valueToJson(o, e->value, json, indent, compact); -
193 -
194 if (++i == o->length) {
evaluated: ++i == o->length
TRUEFALSE
yes
Evaluation Count:318486
yes
Evaluation Count:664586
318486-664586
195 if (!compact)
evaluated: !compact
TRUEFALSE
yes
Evaluation Count:318483
yes
Evaluation Count:3
3-318483
196 json += '\n';
executed: json += '\n';
Execution Count:318483
318483
197 break;
executed: break;
Execution Count:318486
318486
198 } -
199 -
200 json += compact ? "," : ",\n";
partially evaluated: compact
TRUEFALSE
no
Evaluation Count:0
yes
Evaluation Count:664586
0-664586
201 }
executed: }
Execution Count:664586
664586
202}
executed: }
Execution Count:318486
318486
203 -
204void Writer::objectToJson(const QJsonPrivate::Object *o, QByteArray &json, int indent, bool compact) -
205{ -
206 json.reserve(json.size() + (o ? (int)o->size : 16)); -
207 json += compact ? "{" : "{\n";
evaluated: compact
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:431
3-431
208 objectContentToJson(o, json, indent + (compact ? 0 : 1), compact); -
209 json += QByteArray(4*indent, ' '); -
210 json += compact ? "}" : "}\n";
evaluated: compact
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:431
3-431
211}
executed: }
Execution Count:434
434
212 -
213void Writer::arrayToJson(const QJsonPrivate::Array *a, QByteArray &json, int indent, bool compact) -
214{ -
215 json.reserve(json.size() + (a ? (int)a->size : 16)); -
216 json += compact ? "[" : "[\n";
evaluated: compact
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:753
3-753
217 arrayContentToJson(a, json, indent + (compact ? 0 : 1), compact); -
218 json += QByteArray(4*indent, ' '); -
219 json += compact ? "]" : "]\n";
evaluated: compact
TRUEFALSE
yes
Evaluation Count:3
yes
Evaluation Count:753
3-753
220}
executed: }
Execution Count:756
756
221 -
222 -
223 -
Switch to Source codePreprocessed file

Generated by Squish Coco Non-Commercial