Remove on_{begin,end}_{string,number}
And add `done` arg to data callback
This commit is contained in:
@@ -52,6 +52,7 @@ struct ReadValueState {
|
||||
return;
|
||||
}
|
||||
}
|
||||
bool startedData = false;
|
||||
};
|
||||
|
||||
inline WeaselJsonCallbacks readValueCallbacks() {
|
||||
@@ -66,17 +67,17 @@ inline WeaselJsonCallbacks readValueCallbacks() {
|
||||
state->isKeyStack.pop_back();
|
||||
state->on_end_value();
|
||||
};
|
||||
result.on_begin_string = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
state->valueStack.emplace_back(std::string());
|
||||
};
|
||||
result.on_string_data = +[](void *p, const char *buf, int len) {
|
||||
result.on_string_data = +[](void *p, const char *buf, int len, int done) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
if (!state->startedData) {
|
||||
state->startedData = true;
|
||||
state->valueStack.emplace_back(std::string());
|
||||
}
|
||||
std::get<std::string>(state->valueStack.back()).append(buf, len);
|
||||
};
|
||||
result.on_end_string = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
state->on_end_value();
|
||||
if (done) {
|
||||
state->startedData = false;
|
||||
state->on_end_value();
|
||||
}
|
||||
};
|
||||
result.on_begin_array = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
@@ -86,17 +87,17 @@ inline WeaselJsonCallbacks readValueCallbacks() {
|
||||
auto *state = (ReadValueState *)p;
|
||||
state->on_end_value();
|
||||
};
|
||||
result.on_begin_number = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
state->valueStack.emplace_back(JsonNumber());
|
||||
};
|
||||
result.on_number_data = +[](void *p, const char *buf, int len) {
|
||||
result.on_number_data = +[](void *p, const char *buf, int len, int done) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
if (!state->startedData) {
|
||||
state->startedData = true;
|
||||
state->valueStack.emplace_back(JsonNumber());
|
||||
}
|
||||
std::get<JsonNumber>(state->valueStack.back()).append(buf, len);
|
||||
};
|
||||
result.on_end_number = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
state->on_end_value();
|
||||
if (done) {
|
||||
state->startedData = false;
|
||||
state->on_end_value();
|
||||
}
|
||||
};
|
||||
result.on_true_literal = +[](void *p) {
|
||||
auto *state = (ReadValueState *)p;
|
||||
|
||||
Reference in New Issue
Block a user