Compare commits
2
Commits
d8c9491eb3
...
b9142bf36a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9142bf36a | ||
|
|
97f1d3d352 |
+14
-2
@@ -446,13 +446,25 @@ inline PRESERVE_NONE WeaselJsonStatus n_object3(Parser3 *self, char *buf,
|
|||||||
assert(!self->inKey);
|
assert(!self->inKey);
|
||||||
self->inKey = true;
|
self->inKey = true;
|
||||||
self->pop();
|
self->pop();
|
||||||
if (auto s = self->push({N_STRING, T_COLON, N_VALUE, N_OBJECT3})) {
|
if (auto s = skipWhitespace(buf, bufEnd)) {
|
||||||
|
if (auto s2 = self->push({N_STRING, T_COLON, N_VALUE, N_OBJECT3})) {
|
||||||
|
return s2;
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
if (*buf != '"') [[unlikely]] {
|
||||||
|
return WeaselJson_REJECT;
|
||||||
|
}
|
||||||
|
++buf;
|
||||||
|
self->dataBegin = self->writeBuf = buf;
|
||||||
|
self->strDfa.reset();
|
||||||
|
if (auto s = self->push({N_STRING2, T_COLON, N_VALUE, N_OBJECT3})) {
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
if (buf == bufEnd) {
|
if (buf == bufEnd) {
|
||||||
return WeaselJson_AGAIN;
|
return WeaselJson_AGAIN;
|
||||||
}
|
}
|
||||||
MUSTTAIL return n_string(self, buf, bufEnd);
|
MUSTTAIL return n_string2(self, buf, bufEnd);
|
||||||
default:
|
default:
|
||||||
[[unlikely]] return WeaselJson_REJECT;
|
[[unlikely]] return WeaselJson_REJECT;
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -270,9 +270,10 @@ TEST_CASE("bench3") {
|
|||||||
bench.batch(json.size());
|
bench.batch(json.size());
|
||||||
bench.unit("byte");
|
bench.unit("byte");
|
||||||
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, 0);
|
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, 0);
|
||||||
|
std::string copy;
|
||||||
for (size_t stride = 128; stride <= json.size(); stride *= 2) {
|
for (size_t stride = 128; stride <= json.size(); stride *= 2) {
|
||||||
bench.run("parser3 (stride: " + std::to_string(stride) + ")", [&]() {
|
bench.run("parser3 (stride: " + std::to_string(stride) + ")", [&]() {
|
||||||
auto copy = json;
|
copy = json;
|
||||||
WeaselJsonParser_reset(parser);
|
WeaselJsonParser_reset(parser);
|
||||||
for (size_t i = 0; i < copy.size(); i += stride) {
|
for (size_t i = 0; i < copy.size(); i += stride) {
|
||||||
if (WeaselJsonParser_parse(parser, copy.data() + i,
|
if (WeaselJsonParser_parse(parser, copy.data() + i,
|
||||||
@@ -383,10 +384,11 @@ TEST_CASE("bench input types") {
|
|||||||
bench.doNotOptimizeAway(doc);
|
bench.doNotOptimizeAway(doc);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
std::string copy;
|
||||||
{
|
{
|
||||||
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, 0);
|
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, 0);
|
||||||
bench.run("parser3 " + name, [&]() {
|
bench.run("parser3 " + name, [&]() {
|
||||||
auto copy = json;
|
copy = json;
|
||||||
WeaselJsonParser_reset(parser);
|
WeaselJsonParser_reset(parser);
|
||||||
if (WeaselJsonParser_parse(parser, copy.data(), copy.size()) !=
|
if (WeaselJsonParser_parse(parser, copy.data(), copy.size()) !=
|
||||||
WeaselJson_AGAIN) {
|
WeaselJson_AGAIN) {
|
||||||
@@ -401,7 +403,7 @@ TEST_CASE("bench input types") {
|
|||||||
{
|
{
|
||||||
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, WeaselJsonRaw);
|
auto *parser = WeaselJsonParser_create(1024, &c, nullptr, WeaselJsonRaw);
|
||||||
bench.run("parser3 (raw) " + name, [&]() {
|
bench.run("parser3 (raw) " + name, [&]() {
|
||||||
auto copy = json;
|
copy = json;
|
||||||
WeaselJsonParser_reset(parser);
|
WeaselJsonParser_reset(parser);
|
||||||
if (WeaselJsonParser_parse(parser, copy.data(), copy.size()) !=
|
if (WeaselJsonParser_parse(parser, copy.data(), copy.size()) !=
|
||||||
WeaselJson_AGAIN) {
|
WeaselJson_AGAIN) {
|
||||||
|
|||||||
Reference in New Issue
Block a user