Skip to content

Commit a7fc7d4

Browse files
committed
Switch from get(v,e) to e = get(v)
1 parent f336103 commit a7fc7d4

27 files changed

+346
-309
lines changed

benchmark/bench_dom_api.cpp

Lines changed: 36 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ static void numbers_scan(State& state) {
1818
dom::parser parser;
1919
dom::array arr;
2020
simdjson::error_code error;
21-
if (!parser.load(NUMBERS_JSON).get(arr, error)) {
21+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
2222
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
2323
return;
2424
}
2525
for (UNUSED auto _ : state) {
2626
std::vector<double> container;
2727
for (auto e : arr) {
2828
double x;
29-
if (!e.get(x,error)) { cerr << "found a node that is not an number: " << error << endl; break;}
29+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
3030
container.push_back(x);
3131
}
3232
benchmark::DoNotOptimize(container.data());
@@ -40,7 +40,7 @@ static void numbers_size_scan(State& state) {
4040
dom::parser parser;
4141
dom::array arr;
4242
simdjson::error_code error;
43-
if(!parser.load(NUMBERS_JSON).get(arr, error)) {
43+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
4444
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
4545
return;
4646
}
@@ -50,7 +50,7 @@ static void numbers_size_scan(State& state) {
5050
size_t pos = 0;
5151
for (auto e : arr) {
5252
double x;
53-
if (!e.get(x,error)) { cerr << "found a node that is not an number: " << error << endl; break;}
53+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
5454
container[pos++] = x;
5555
}
5656
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -66,7 +66,7 @@ static void numbers_type_scan(State& state) {
6666
dom::parser parser;
6767
dom::array arr;
6868
simdjson::error_code error;
69-
if(!parser.load(NUMBERS_JSON).get(arr, error)) {
69+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
7070
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
7171
return;
7272
}
@@ -78,7 +78,7 @@ static void numbers_type_scan(State& state) {
7878
cerr << "found a node that is not an number?" << endl; break;
7979
}
8080
double x;
81-
e.get(x,error);
81+
error = e.get(x);
8282
container.push_back(x);
8383
}
8484
benchmark::DoNotOptimize(container.data());
@@ -92,7 +92,7 @@ static void numbers_type_size_scan(State& state) {
9292
dom::parser parser;
9393
dom::array arr;
9494
simdjson::error_code error;
95-
if (!parser.load(NUMBERS_JSON).get(arr, error)) {
95+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
9696
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
9797
return;
9898
}
@@ -106,7 +106,7 @@ static void numbers_type_size_scan(State& state) {
106106
cerr << "found a node that is not an number?" << endl; break;
107107
}
108108
double x;
109-
e.get(x,error);
109+
error = e.get(x);
110110
container[pos++] = x;
111111
}
112112
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -123,14 +123,14 @@ static void numbers_load_scan(State& state) {
123123
simdjson::error_code error;
124124
for (UNUSED auto _ : state) {
125125
// this may hit the disk, but probably just once
126-
if (!parser.load(NUMBERS_JSON).get(arr, error)) {
126+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
127127
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
128128
break;
129129
}
130130
std::vector<double> container;
131131
for (auto e : arr) {
132132
double x;
133-
if (!e.get(x,error)) { cerr << "found a node that is not an number: " << error << endl; break;}
133+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
134134
container.push_back(x);
135135
}
136136
benchmark::DoNotOptimize(container.data());
@@ -146,7 +146,7 @@ static void numbers_load_size_scan(State& state) {
146146
simdjson::error_code error;
147147
for (UNUSED auto _ : state) {
148148
// this may hit the disk, but probably just once
149-
if(!parser.load(NUMBERS_JSON).get(arr, error)) {
149+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
150150
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
151151
break;
152152
}
@@ -155,7 +155,7 @@ static void numbers_load_size_scan(State& state) {
155155
size_t pos = 0;
156156
for (auto e : arr) {
157157
double x;
158-
if(!e.get(x,error)) { cerr << "found a node that is not an number?" << endl; break;}
158+
if ((error = e.get(x))) { cerr << "found a node that is not an number?" << endl; break;}
159159
container[pos++] = x;
160160
}
161161
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -338,7 +338,7 @@ static void twitter_image_sizes(State& state) {
338338
set<tuple<uint64_t, uint64_t>> image_sizes;
339339
for (dom::object tweet : doc["statuses"]) {
340340
dom::array media;
341-
if (tweet["entities"]["media"].get(media, error)) {
341+
if (not (error = tweet["entities"]["media"].get(media))) {
342342
for (dom::object image : media) {
343343
for (auto size : image["sizes"].get<dom::object>()) {
344344
image_sizes.insert({ size.value["w"], size.value["h"] });
@@ -358,10 +358,10 @@ static void error_code_twitter_count(State& state) noexcept {
358358
dom::parser parser;
359359
simdjson::error_code error;
360360
dom::element doc;
361-
if (!parser.load(TWITTER_JSON).get(doc, error)) { return; }
361+
if ((error = parser.load(TWITTER_JSON).get(doc))) { return; }
362362
for (UNUSED auto _ : state) {
363363
uint64_t value;
364-
if (!doc["search_metadata"]["count"].get(value, error)) { return; }
364+
if ((error = doc["search_metadata"]["count"].get(value))) { return; }
365365
if (value != 100) { return; }
366366
}
367367
}
@@ -372,20 +372,20 @@ static void error_code_twitter_default_profile(State& state) noexcept {
372372
dom::parser parser;
373373
simdjson::error_code error;
374374
dom::element doc;
375-
if (!parser.load(TWITTER_JSON).get(doc, error)) { std::cerr << error << std::endl; return; }
375+
if ((error = parser.load(TWITTER_JSON).get(doc))) { std::cerr << error << std::endl; return; }
376376
for (UNUSED auto _ : state) {
377377
set<string_view> default_users;
378378

379379
dom::array tweets;
380-
if (!doc["statuses"].get(tweets, error)) { return; }
380+
if ((error = doc["statuses"].get(tweets))) { return; }
381381
for (dom::element tweet : tweets) {
382382
dom::object user;
383-
if (!tweet["user"].get(user, error)) { return; }
383+
if ((error = tweet["user"].get(user))) { return; }
384384
bool default_profile;
385-
if (!user["default_profile"].get(default_profile, error)) { return; }
385+
if ((error = user["default_profile"].get(default_profile))) { return; }
386386
if (default_profile) {
387387
std::string_view screen_name;
388-
if (!user["screen_name"].get(screen_name, error)) { return; }
388+
if ((error = user["screen_name"].get(screen_name))) { return; }
389389
default_users.insert(screen_name);
390390
}
391391
}
@@ -399,9 +399,9 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
399399
SIMDJSON_DISABLE_DEPRECATED_WARNING
400400
static void iterator_twitter_default_profile(State& state) {
401401
// Count unique users with a default profile.
402-
simdjson::padded_string json;
403-
simdjson::error_code error;
404-
if (!padded_string::load(TWITTER_JSON).tie(json, error)) { std::cerr << error << std::endl; return; }
402+
padded_string json;
403+
auto error = padded_string::load(TWITTER_JSON).get(json);
404+
if (error) { std::cerr << error << std::endl; return; }
405405
ParsedJson pj = build_parsed_json(json);
406406
for (UNUSED auto _ : state) {
407407
set<string_view> default_users;
@@ -443,20 +443,21 @@ static void error_code_twitter_image_sizes(State& state) noexcept {
443443
dom::parser parser;
444444
simdjson::error_code error;
445445
dom::element doc;
446-
if (!parser.load(TWITTER_JSON).get(doc, error)) { std::cerr << error << std::endl; return; }
446+
if ((error = parser.load(TWITTER_JSON).get(doc))) { std::cerr << error << std::endl; return; }
447447
for (UNUSED auto _ : state) {
448448
set<tuple<uint64_t, uint64_t>> image_sizes;
449449
dom::array statuses;
450-
if (!doc["statuses"].get(statuses, error)) { return; }
450+
if ((error = doc["statuses"].get(statuses))) { return; }
451451
for (dom::element tweet : statuses) {
452452
dom::array images;
453-
if (tweet["entities"]["media"].get(images, error)) {
453+
if (not (error = tweet["entities"]["media"].get(images))) {
454454
for (dom::element image : images) {
455455
dom::object sizes;
456-
if (!image["sizes"].get(sizes, error)) { return; }
456+
if ((error = image["sizes"].get(sizes))) { return; }
457457
for (auto size : sizes) {
458458
uint64_t width, height;
459-
if (!size.value["w"].get(width, error) || !size.value["h"].get(height, error)) { return; }
459+
if ((error = size.value["w"].get(width))) { return; }
460+
if ((error = size.value["h"].get(height))) { return; }
460461
image_sizes.insert({ width, height });
461462
}
462463
}
@@ -471,9 +472,9 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
471472
SIMDJSON_DISABLE_DEPRECATED_WARNING
472473
static void iterator_twitter_image_sizes(State& state) {
473474
// Count unique image sizes
474-
simdjson::error_code error;
475475
padded_string json;
476-
if (!padded_string::load(TWITTER_JSON).tie(json, error)) { std::cerr << error << std::endl; return; }
476+
auto error = padded_string::load(TWITTER_JSON).get(json);
477+
if (error) { std::cerr << error << std::endl; return; }
477478
ParsedJson pj = build_parsed_json(json);
478479
for (UNUSED auto _ : state) {
479480
set<tuple<uint64_t, uint64_t>> image_sizes;
@@ -531,10 +532,12 @@ BENCHMARK(iterator_twitter_image_sizes);
531532

532533
static void print_json(State& state) noexcept {
533534
// Prints the number of results in twitter.json
534-
simdjson::error_code error;
535-
padded_string json;
536-
if (!padded_string::load(TWITTER_JSON).tie(json, error)) { std::cerr << error << std::endl; return; }
537535
dom::parser parser;
536+
537+
padded_string json;
538+
auto error = padded_string::load(TWITTER_JSON).get(json);
539+
if (error) { std::cerr << error << std::endl; return; }
540+
538541
int code = json_parse(json, parser);
539542
if (code) { cerr << error_message(code) << endl; return; }
540543
for (UNUSED auto _ : state) {

benchmark/bench_parse_call.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ const char *GSOC_JSON = SIMDJSON_BENCHMARK_DATA_DIR "gsoc-2018.json";
1313
static void parse_twitter(State& state) {
1414
dom::parser parser;
1515
padded_string docdata;
16-
simdjson::error_code error;
17-
padded_string::load(TWITTER_JSON).tie(docdata, error);
16+
auto error = padded_string::load(TWITTER_JSON).get(docdata);
1817
if(error) {
1918
cerr << "could not parse twitter.json" << error << endl;
2019
return;
@@ -29,8 +28,8 @@ static void parse_twitter(State& state) {
2928
for (UNUSED auto _ : state) {
3029
dom::element doc;
3130
bytes += docdata.size();
32-
parser.parse(docdata).tie(doc,error);
33-
if(error) {
31+
;
32+
if ((error = parser.parse(docdata).get(doc))) {
3433
cerr << "could not parse twitter.json" << error << endl;
3534
return;
3635
}
@@ -50,8 +49,7 @@ BENCHMARK(parse_twitter)->Repetitions(10)->ComputeStatistics("max", [](const std
5049
static void parse_gsoc(State& state) {
5150
dom::parser parser;
5251
padded_string docdata;
53-
simdjson::error_code error;
54-
padded_string::load(GSOC_JSON).tie(docdata, error);
52+
auto error = padded_string::load(GSOC_JSON).get(docdata);
5553
if(error) {
5654
cerr << "could not parse gsoc-2018.json" << error << endl;
5755
return;
@@ -64,10 +62,9 @@ static void parse_gsoc(State& state) {
6462
}
6563
size_t bytes = 0;
6664
for (UNUSED auto _ : state) {
67-
dom::element doc;
6865
bytes += docdata.size();
69-
parser.parse(docdata).tie(doc,error);
70-
if(error) {
66+
dom::element doc;
67+
if ((error = parser.parse(docdata).get(doc))) {
7168
cerr << "could not parse gsoc-2018.json" << error << endl;
7269
return;
7370
}

benchmark/benchmarker.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,7 @@ struct benchmarker {
267267
benchmarker(const char *_filename, event_collector& _collector)
268268
: filename(_filename), collector(_collector), stats(NULL) {
269269
verbose() << "[verbose] loading " << filename << endl;
270-
simdjson::error_code error;
271-
padded_string::load(filename).tie(this->json, error);
270+
auto error = padded_string::load(filename).get(json);
272271
if (error) {
273272
exit_error(string("Could not load the file ") + filename);
274273
}

benchmark/distinctuseridcompetition.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void print_vec(const std::vector<int64_t> &v) {
5050
} else if (element.is<simdjson::dom::object>()) {
5151
auto [object, error] = element.get<simdjson::dom::object>();
5252
int64_t id;
53-
object["user"]["id"].get(id,error);
53+
error = object["user"]["id"].get(id);
5454
if(!error) {
5555
v.push_back(id);
5656
}
@@ -77,17 +77,17 @@ void simdjson_recurse(std::vector<int64_t> & v, simdjson::dom::object object) {
7777
simdjson::error_code error;
7878
simdjson::dom::object child_object;
7979
simdjson::dom::object child_array;
80-
if (value.get(child_object, error)) {
80+
if (not (error = value.get(child_object))) {
8181
for (auto [child_key, child_value] : child_object) {
8282
if((child_key.size() == 2) && (memcmp(child_key.data(), "id", 2) == 0)) {
8383
int64_t x;
84-
if (child_value.get(x, error)) {
84+
if (not (error = child_value.get(x))) {
8585
v.push_back(x);
8686
}
8787
}
8888
simdjson_recurse(v, child_value);
8989
}
90-
} else if (value.get(child_array, error)) {
90+
} else if (not (error = value.get(child_array))) {
9191
simdjson_recurse(v, child_array);
9292
}
9393
// end of: we are in an object under the key "user"
@@ -100,9 +100,9 @@ really_inline void simdjson_recurse(std::vector<int64_t> & v, simdjson::dom::ele
100100
UNUSED simdjson::error_code error;
101101
simdjson::dom::array array;
102102
simdjson::dom::object object;
103-
if (element.get(array, error)) {
103+
if (not (error = element.get(array))) {
104104
simdjson_recurse(v, array);
105-
} else if (element.get(object, error)) {
105+
} else if (not (error = element.get(object))) {
106106
simdjson_recurse(v, object);
107107
}
108108
}
@@ -120,8 +120,8 @@ simdjson_compute_stats(const simdjson::padded_string &p) {
120120
std::vector<int64_t> answer;
121121
simdjson::dom::parser parser;
122122
simdjson::dom::element doc;
123-
simdjson::error_code error;
124-
if (parser.parse(p).tie(doc, error)) {
123+
auto error = parser.parse(p).get(doc);
124+
if (!error) {
125125
simdjson_recurse(answer, doc);
126126
remove_duplicates(answer);
127127
}
@@ -385,7 +385,7 @@ int main(int argc, char *argv[]) {
385385
volume, !just_data);
386386
simdjson::dom::parser parser;
387387
simdjson::dom::element doc;
388-
parser.parse(p).tie(doc, error);
388+
error = parser.parse(p).get(doc);
389389
BEST_TIME("simdjson (just dom) ", simdjson_just_dom(doc).size(), size,
390390
, repeat, volume, !just_data);
391391
char *buffer = (char *)malloc(p.size() + 1);

benchmark/parseandstatcompetition.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ really_inline void simdjson_process_atom(stat_t &s,
5555
} else if (element.is<bool>()) {
5656
simdjson::error_code error;
5757
bool v;
58-
if (element.get(v, error) && v) {
58+
if (not (error = element.get(v)) && v) {
5959
s.true_count++;
6060
} else {
6161
s.false_count++;
@@ -70,7 +70,7 @@ void simdjson_recurse(stat_t &s, simdjson::dom::element element) {
7070
if (element.is<simdjson::dom::array>()) {
7171
s.array_count++;
7272
dom::array array;
73-
if (!element.get(array, error)) {
73+
if ((error = element.get(array))) {
7474
std::cerr << error << std::endl;
7575
abort();
7676
}
@@ -85,7 +85,7 @@ void simdjson_recurse(stat_t &s, simdjson::dom::element element) {
8585
} else if (element.is<simdjson::dom::object>()) {
8686
s.object_count++;
8787
dom::object object;
88-
if (!element.get(object, error)) {
88+
if ((error = element.get(object))) {
8989
std::cerr << error << std::endl;
9090
abort();
9191
}

benchmark/statisticalmodel.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ really_inline void simdjson_process_atom(stat_t &s,
5252
} else if (element.is<bool>()) {
5353
simdjson::error_code err;
5454
bool v;
55-
element.get(v,err);
55+
err = element.get(v);
5656
if (v) {
5757
s.true_count++;
5858
} else {
@@ -68,7 +68,7 @@ void simdjson_recurse(stat_t &s, simdjson::dom::element element) {
6868
if (element.is<simdjson::dom::array>()) {
6969
s.array_count++;
7070
simdjson::dom::array array;
71-
if (!element.get(array, error)) { std::cerr << error << std::endl; abort(); }
71+
if ((error = element.get(array))) { std::cerr << error << std::endl; abort(); }
7272
for (auto child : array) {
7373
if (child.is<simdjson::dom::array>() || child.is<simdjson::dom::object>()) {
7474
simdjson_recurse(s, child);
@@ -79,7 +79,7 @@ void simdjson_recurse(stat_t &s, simdjson::dom::element element) {
7979
} else if (element.is<simdjson::dom::object>()) {
8080
s.object_count++;
8181
simdjson::dom::object object;
82-
if (!element.get(object, error)) { std::cerr << error << std::endl; abort(); }
82+
if ((error = element.get(object))) { std::cerr << error << std::endl; abort(); }
8383
for (auto field : object) {
8484
s.string_count++; // for key
8585
if (field.value.is<simdjson::dom::array>() || field.value.is<simdjson::dom::object>()) {

0 commit comments

Comments
 (0)