Combine prime and parse
This commit is contained in:
11
src/parser.h
11
src/parser.h
@@ -71,11 +71,6 @@ struct Parser2 {
|
|||||||
std::ignore = push({N_WHITESPACE, N_VALUE});
|
std::ignore = push({N_WHITESPACE, N_VALUE});
|
||||||
}
|
}
|
||||||
|
|
||||||
void prime(char *buf, int len) {
|
|
||||||
this->buf = buf;
|
|
||||||
this->bufEnd = buf + len;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum Status {
|
enum Status {
|
||||||
// Accept input
|
// Accept input
|
||||||
S_OK,
|
S_OK,
|
||||||
@@ -87,7 +82,11 @@ struct Parser2 {
|
|||||||
S_OVERFLOW,
|
S_OVERFLOW,
|
||||||
};
|
};
|
||||||
|
|
||||||
[[nodiscard]] Status parse() { return keepGoing(this); }
|
[[nodiscard]] Status parse(char *buf, int len) {
|
||||||
|
this->buf = buf;
|
||||||
|
this->bufEnd = buf + len;
|
||||||
|
return keepGoing(this);
|
||||||
|
}
|
||||||
|
|
||||||
Parser2(Parser2 const &) = delete;
|
Parser2(Parser2 const &) = delete;
|
||||||
Parser2 &operator=(Parser2 const &) = delete;
|
Parser2 &operator=(Parser2 const &) = delete;
|
||||||
|
|||||||
12
src/test.cpp
12
src/test.cpp
@@ -542,18 +542,15 @@ TEST_CASE("parser2") {
|
|||||||
Parser2 parser(&c, &state);
|
Parser2 parser(&c, &state);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (; i < copy.length() - 1; ++i) {
|
for (; i < copy.length() - 1; ++i) {
|
||||||
parser.prime(copy.data() + i, 1);
|
REQUIRE(parser.parse(copy.data() + i, 1) == Parser2::S_AGAIN);
|
||||||
REQUIRE(parser.parse() == Parser2::S_AGAIN);
|
|
||||||
}
|
}
|
||||||
parser.prime(copy.data() + i, 1);
|
CHECK(parser.parse(copy.data() + i, 1) == Parser2::S_OK);
|
||||||
CHECK(parser.parse() == Parser2::S_OK);
|
|
||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::string copy = "{\"x\": [], \"y\": {}}";
|
std::string copy = "{\"x\": [], \"y\": {}}";
|
||||||
Parser2 parser(&c, &state);
|
Parser2 parser(&c, &state);
|
||||||
parser.prime(copy.data(), copy.length());
|
CHECK(parser.parse(copy.data(), copy.length()) == Parser2::S_OK);
|
||||||
CHECK(parser.parse() == Parser2::S_OK);
|
|
||||||
puts("");
|
puts("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -578,8 +575,7 @@ TEST_CASE("bench2") {
|
|||||||
bench.run("parser2", [&]() {
|
bench.run("parser2", [&]() {
|
||||||
auto copy = json;
|
auto copy = json;
|
||||||
Parser2 parser(&c, nullptr);
|
Parser2 parser(&c, nullptr);
|
||||||
parser.prime(copy.data(), copy.length());
|
bench.doNotOptimizeAway(parser.parse(copy.data(), copy.length()));
|
||||||
bench.doNotOptimizeAway(parser.parse());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user