Skip to content

Commit c25928e

Browse files
authored
Merge pull request simdjson#950 from simdjson/jkeiser/tie-type
replace get<T>.tie(v,e) with get(v)
2 parents a5ccff7 + a7fc7d4 commit c25928e

27 files changed

+557
-478
lines changed

benchmark/bench_dom_api.cpp

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,15 @@ static void numbers_scan(State& state) {
1818
dom::parser parser;
1919
dom::array arr;
2020
simdjson::error_code error;
21-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
22-
if(error) {
23-
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
21+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
22+
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
2423
return;
2524
}
2625
for (UNUSED auto _ : state) {
2726
std::vector<double> container;
2827
for (auto e : arr) {
2928
double x;
30-
e.get<double>().tie(x,error);
31-
if(error) { cerr << "found a node that is not an number?" << endl; break;}
29+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
3230
container.push_back(x);
3331
}
3432
benchmark::DoNotOptimize(container.data());
@@ -42,9 +40,8 @@ static void numbers_size_scan(State& state) {
4240
dom::parser parser;
4341
dom::array arr;
4442
simdjson::error_code error;
45-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
46-
if(error) {
47-
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
43+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
44+
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
4845
return;
4946
}
5047
for (UNUSED auto _ : state) {
@@ -53,8 +50,7 @@ static void numbers_size_scan(State& state) {
5350
size_t pos = 0;
5451
for (auto e : arr) {
5552
double x;
56-
e.get<double>().tie(x,error);
57-
if(error) { cerr << "found a node that is not an number?" << endl; break;}
53+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
5854
container[pos++] = x;
5955
}
6056
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -70,8 +66,7 @@ static void numbers_type_scan(State& state) {
7066
dom::parser parser;
7167
dom::array arr;
7268
simdjson::error_code error;
73-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
74-
if(error) {
69+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
7570
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
7671
return;
7772
}
@@ -83,7 +78,7 @@ static void numbers_type_scan(State& state) {
8378
cerr << "found a node that is not an number?" << endl; break;
8479
}
8580
double x;
86-
e.get<double>().tie(x,error);
81+
error = e.get(x);
8782
container.push_back(x);
8883
}
8984
benchmark::DoNotOptimize(container.data());
@@ -97,9 +92,8 @@ static void numbers_type_size_scan(State& state) {
9792
dom::parser parser;
9893
dom::array arr;
9994
simdjson::error_code error;
100-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
101-
if(error) {
102-
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
95+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
96+
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
10397
return;
10498
}
10599
for (UNUSED auto _ : state) {
@@ -112,7 +106,7 @@ static void numbers_type_size_scan(State& state) {
112106
cerr << "found a node that is not an number?" << endl; break;
113107
}
114108
double x;
115-
e.get<double>().tie(x,error);
109+
error = e.get(x);
116110
container[pos++] = x;
117111
}
118112
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -129,16 +123,14 @@ static void numbers_load_scan(State& state) {
129123
simdjson::error_code error;
130124
for (UNUSED auto _ : state) {
131125
// this may hit the disk, but probably just once
132-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
133-
if(error) {
134-
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
126+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
127+
cerr << "could not read " << NUMBERS_JSON << " as an array: " << error << endl;
135128
break;
136129
}
137130
std::vector<double> container;
138131
for (auto e : arr) {
139132
double x;
140-
e.get<double>().tie(x,error);
141-
if(error) { cerr << "found a node that is not an number?" << endl; break;}
133+
if ((error = e.get(x))) { cerr << "found a node that is not an number: " << error << endl; break;}
142134
container.push_back(x);
143135
}
144136
benchmark::DoNotOptimize(container.data());
@@ -154,8 +146,7 @@ static void numbers_load_size_scan(State& state) {
154146
simdjson::error_code error;
155147
for (UNUSED auto _ : state) {
156148
// this may hit the disk, but probably just once
157-
parser.load(NUMBERS_JSON).get<dom::array>().tie(arr, error);
158-
if(error) {
149+
if ((error = parser.load(NUMBERS_JSON).get(arr))) {
159150
cerr << "could not read " << NUMBERS_JSON << " as an array" << endl;
160151
break;
161152
}
@@ -164,8 +155,7 @@ static void numbers_load_size_scan(State& state) {
164155
size_t pos = 0;
165156
for (auto e : arr) {
166157
double x;
167-
e.get<double>().tie(x,error);
168-
if(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;}
169159
container[pos++] = x;
170160
}
171161
if(pos != container.size()) { cerr << "bad count" << endl; }
@@ -328,7 +318,7 @@ static void twitter_default_profile(State& state) {
328318
dom::element doc = parser.load(TWITTER_JSON);
329319
for (UNUSED auto _ : state) {
330320
set<string_view> default_users;
331-
for (dom::object tweet : doc["statuses"].get<dom::array>()) {
321+
for (dom::object tweet : doc["statuses"]) {
332322
dom::object user = tweet["user"];
333323
if (user["default_profile"]) {
334324
default_users.insert(user["screen_name"]);
@@ -343,12 +333,13 @@ static void twitter_image_sizes(State& state) {
343333
// Count unique image sizes
344334
dom::parser parser;
345335
dom::element doc = parser.load(TWITTER_JSON);
336+
simdjson::error_code error;
346337
for (UNUSED auto _ : state) {
347338
set<tuple<uint64_t, uint64_t>> image_sizes;
348-
for (dom::object tweet : doc["statuses"].get<dom::array>()) {
349-
auto [media, not_found] = tweet["entities"]["media"];
350-
if (!not_found) {
351-
for (dom::object image : media.get<dom::array>()) {
339+
for (dom::object tweet : doc["statuses"]) {
340+
dom::array media;
341+
if (not (error = tweet["entities"]["media"].get(media))) {
342+
for (dom::object image : media) {
352343
for (auto size : image["sizes"].get<dom::object>()) {
353344
image_sizes.insert({ size.value["w"], size.value["h"] });
354345
}
@@ -365,11 +356,12 @@ BENCHMARK(twitter_image_sizes);
365356
static void error_code_twitter_count(State& state) noexcept {
366357
// Prints the number of results in twitter.json
367358
dom::parser parser;
368-
auto [doc, error1] = parser.load(TWITTER_JSON);
369-
if (error1) { return; }
359+
simdjson::error_code error;
360+
dom::element doc;
361+
if ((error = parser.load(TWITTER_JSON).get(doc))) { return; }
370362
for (UNUSED auto _ : state) {
371-
auto [value, error] = doc["search_metadata"]["count"].get<uint64_t>();
372-
if (error) { return; }
363+
uint64_t value;
364+
if ((error = doc["search_metadata"]["count"].get(value))) { return; }
373365
if (value != 100) { return; }
374366
}
375367
}
@@ -378,21 +370,22 @@ BENCHMARK(error_code_twitter_count);
378370
static void error_code_twitter_default_profile(State& state) noexcept {
379371
// Count unique users with a default profile.
380372
dom::parser parser;
381-
auto [doc, error1] = parser.load(TWITTER_JSON);
382-
if (error1) { std::cerr << error1 << std::endl; return; }
373+
simdjson::error_code error;
374+
dom::element doc;
375+
if ((error = parser.load(TWITTER_JSON).get(doc))) { std::cerr << error << std::endl; return; }
383376
for (UNUSED auto _ : state) {
384377
set<string_view> default_users;
385378

386-
auto [tweets, error] = doc["statuses"].get<dom::array>();
387-
if (error) { return; }
379+
dom::array tweets;
380+
if ((error = doc["statuses"].get(tweets))) { return; }
388381
for (dom::element tweet : tweets) {
389-
auto [user, error2] = tweet["user"].get<dom::object>();
390-
if (error2) { return; }
391-
auto [default_profile, error3] = user["default_profile"].get<bool>();
392-
if (error3) { return; }
382+
dom::object user;
383+
if ((error = tweet["user"].get(user))) { return; }
384+
bool default_profile;
385+
if ((error = user["default_profile"].get(default_profile))) { return; }
393386
if (default_profile) {
394-
auto [screen_name, error4] = user["screen_name"].get<std::string_view>();
395-
if (error4) { return; }
387+
std::string_view screen_name;
388+
if ((error = user["screen_name"].get(screen_name))) { return; }
396389
default_users.insert(screen_name);
397390
}
398391
}
@@ -406,8 +399,9 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
406399
SIMDJSON_DISABLE_DEPRECATED_WARNING
407400
static void iterator_twitter_default_profile(State& state) {
408401
// Count unique users with a default profile.
409-
auto [json, error1] = padded_string::load(TWITTER_JSON);
410-
if (error1) { std::cerr << error1 << 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; }
411405
ParsedJson pj = build_parsed_json(json);
412406
for (UNUSED auto _ : state) {
413407
set<string_view> default_users;
@@ -447,22 +441,23 @@ BENCHMARK(iterator_twitter_default_profile);
447441
static void error_code_twitter_image_sizes(State& state) noexcept {
448442
// Count unique image sizes
449443
dom::parser parser;
450-
auto [doc, error1] = parser.load(TWITTER_JSON);
451-
if (error1) { std::cerr << error1 << std::endl; return; }
444+
simdjson::error_code error;
445+
dom::element doc;
446+
if ((error = parser.load(TWITTER_JSON).get(doc))) { std::cerr << error << std::endl; return; }
452447
for (UNUSED auto _ : state) {
453448
set<tuple<uint64_t, uint64_t>> image_sizes;
454-
auto [statuses, error] = doc["statuses"].get<dom::array>();
455-
if (error) { return; }
449+
dom::array statuses;
450+
if ((error = doc["statuses"].get(statuses))) { return; }
456451
for (dom::element tweet : statuses) {
457-
auto [images, not_found] = tweet["entities"]["media"].get<dom::array>();
458-
if (!not_found) {
452+
dom::array images;
453+
if (not (error = tweet["entities"]["media"].get(images))) {
459454
for (dom::element image : images) {
460-
auto [sizes, error2] = image["sizes"].get<dom::object>();
461-
if (error2) { return; }
455+
dom::object sizes;
456+
if ((error = image["sizes"].get(sizes))) { return; }
462457
for (auto size : sizes) {
463-
auto [width, error3] = size.value["w"].get<uint64_t>();
464-
auto [height, error4] = size.value["h"].get<uint64_t>();
465-
if (error3 || error4) { return; }
458+
uint64_t width, height;
459+
if ((error = size.value["w"].get(width))) { return; }
460+
if ((error = size.value["h"].get(height))) { return; }
466461
image_sizes.insert({ width, height });
467462
}
468463
}
@@ -477,8 +472,9 @@ SIMDJSON_PUSH_DISABLE_WARNINGS
477472
SIMDJSON_DISABLE_DEPRECATED_WARNING
478473
static void iterator_twitter_image_sizes(State& state) {
479474
// Count unique image sizes
480-
auto [json, error1] = padded_string::load(TWITTER_JSON);
481-
if (error1) { std::cerr << error1 << std::endl; return; }
475+
padded_string json;
476+
auto error = padded_string::load(TWITTER_JSON).get(json);
477+
if (error) { std::cerr << error << std::endl; return; }
482478
ParsedJson pj = build_parsed_json(json);
483479
for (UNUSED auto _ : state) {
484480
set<tuple<uint64_t, uint64_t>> image_sizes;
@@ -536,10 +532,14 @@ BENCHMARK(iterator_twitter_image_sizes);
536532

537533
static void print_json(State& state) noexcept {
538534
// Prints the number of results in twitter.json
539-
auto [json, error1] = padded_string::load(TWITTER_JSON);
540-
if (error1) { std::cerr << error1 << std::endl; return; }
541535
dom::parser parser;
542-
if (int error = json_parse(json, parser); error != SUCCESS) { cerr << error_message(error) << endl; return; }
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+
541+
int code = json_parse(json, parser);
542+
if (code) { cerr << error_message(code) << endl; return; }
543543
for (UNUSED auto _ : state) {
544544
std::stringstream s;
545545
if (!parser.print_json(s)) { cerr << "print_json failed" << endl; return; }

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
}

0 commit comments

Comments
 (0)