Skip to content

Commit 3e35729

Browse files
authored
Merge pull request simdjson#968 from simdjson/issue961
Fixing issue 961
2 parents 7e94309 + 544fa57 commit 3e35729

File tree

4 files changed

+34
-33
lines changed

4 files changed

+34
-33
lines changed

doc/basics.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,11 @@ Using the Parsed JSON
9898

9999
Once you have an element, you can navigate it with idiomatic C++ iterators, operators and casts.
100100

101-
* **Extracting Values:** You can cast a JSON element to a native type: `double(element)` or
101+
* **Extracting Values (with exceptions):** You can cast a JSON element to a native type: `double(element)` or
102102
`double x = json_element`. This works for double, uint64_t, int64_t, bool,
103-
dom::object and dom::array. An exception is thrown if the cast is not possible. You can also use is<*typename*>() to test if it is a
104-
given type, or use the `type()` method: e.g., `element.type() == dom::element_type::DOUBLE`. Instead of casting, you can use get<*typename*>() to get the value: casts and get<*typename*>() can be used interchangeably. You can use a variant usage of get<*typename*>() with error codes to avoid exceptions: e.g.,
103+
dom::object and dom::array. An exception is thrown if the cast is not possible.
104+
* **Extracting Values (without expceptions):** You can use a variant usage of `get()` with error codes to avoid exceptions. You first declare the variable of the appropriate type (`double`, `uint64_t`, `int64_t`, `bool`,
105+
`dom::object` and `dom::array`) and pass it by reference to `get()` which gives you back an error code: e.g.,
105106
```c++
106107
simdjson::error_code error;
107108
simdjson::padded_string numberstring = "1.2"_padded; // our JSON input ("1.2")

include/simdjson/dom/element.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class element {
9090
* Returns INCORRECT_TYPE if the JSON element is not an integer, or NUMBER_OUT_OF_RANGE
9191
* if it is negative.
9292
*/
93-
inline simdjson_result<int64_t> get_int64_t() const noexcept;
93+
inline simdjson_result<int64_t> get_int64() const noexcept;
9494
/**
9595
* Cast this element to an unsigned integer.
9696
*
@@ -100,7 +100,7 @@ class element {
100100
* Returns INCORRECT_TYPE if the JSON element is not an integer, or NUMBER_OUT_OF_RANGE
101101
* if it is too large.
102102
*/
103-
inline simdjson_result<uint64_t> get_uint64_t() const noexcept;
103+
inline simdjson_result<uint64_t> get_uint64() const noexcept;
104104
/**
105105
* Cast this element to an double floating-point.
106106
*
@@ -143,13 +143,13 @@ class element {
143143
*
144144
* Equivalent to is<int64_t>().
145145
*/
146-
inline bool is_int64_t() const noexcept;
146+
inline bool is_int64() const noexcept;
147147
/**
148148
* Whether this element is a json number that fits in an unsigned 64-bit integer.
149149
*
150150
* Equivalent to is<uint64_t>().
151151
*/
152-
inline bool is_uint64_t() const noexcept;
152+
inline bool is_uint64() const noexcept;
153153
/**
154154
* Whether this element is a json number that fits in a double.
155155
*
@@ -465,16 +465,16 @@ struct simdjson_result<dom::element> : public internal::simdjson_result_base<dom
465465
really_inline simdjson_result<dom::object> get_object() const noexcept;
466466
really_inline simdjson_result<const char *> get_c_str() const noexcept;
467467
really_inline simdjson_result<std::string_view> get_string() const noexcept;
468-
really_inline simdjson_result<int64_t> get_int64_t() const noexcept;
469-
really_inline simdjson_result<uint64_t> get_uint64_t() const noexcept;
468+
really_inline simdjson_result<int64_t> get_int64() const noexcept;
469+
really_inline simdjson_result<uint64_t> get_uint64() const noexcept;
470470
really_inline simdjson_result<double> get_double() const noexcept;
471471
really_inline simdjson_result<bool> get_bool() const noexcept;
472472

473473
really_inline bool is_array() const noexcept;
474474
really_inline bool is_object() const noexcept;
475475
really_inline bool is_string() const noexcept;
476-
really_inline bool is_int64_t() const noexcept;
477-
really_inline bool is_uint64_t() const noexcept;
476+
really_inline bool is_int64() const noexcept;
477+
really_inline bool is_uint64() const noexcept;
478478
really_inline bool is_double() const noexcept;
479479
really_inline bool is_bool() const noexcept;
480480
really_inline bool is_null() const noexcept;

include/simdjson/inline/element.h

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ really_inline simdjson_result<std::string_view> simdjson_result<dom::element>::g
5454
if (error()) { return error(); }
5555
return first.get_string();
5656
}
57-
really_inline simdjson_result<int64_t> simdjson_result<dom::element>::get_int64_t() const noexcept {
57+
really_inline simdjson_result<int64_t> simdjson_result<dom::element>::get_int64() const noexcept {
5858
if (error()) { return error(); }
59-
return first.get_int64_t();
59+
return first.get_int64();
6060
}
61-
really_inline simdjson_result<uint64_t> simdjson_result<dom::element>::get_uint64_t() const noexcept {
61+
really_inline simdjson_result<uint64_t> simdjson_result<dom::element>::get_uint64() const noexcept {
6262
if (error()) { return error(); }
63-
return first.get_uint64_t();
63+
return first.get_uint64();
6464
}
6565
really_inline simdjson_result<double> simdjson_result<dom::element>::get_double() const noexcept {
6666
if (error()) { return error(); }
@@ -80,11 +80,11 @@ really_inline bool simdjson_result<dom::element>::is_object() const noexcept {
8080
really_inline bool simdjson_result<dom::element>::is_string() const noexcept {
8181
return !error() && first.is_string();
8282
}
83-
really_inline bool simdjson_result<dom::element>::is_int64_t() const noexcept {
84-
return !error() && first.is_int64_t();
83+
really_inline bool simdjson_result<dom::element>::is_int64() const noexcept {
84+
return !error() && first.is_int64();
8585
}
86-
really_inline bool simdjson_result<dom::element>::is_uint64_t() const noexcept {
87-
return !error() && first.is_uint64_t();
86+
really_inline bool simdjson_result<dom::element>::is_uint64() const noexcept {
87+
return !error() && first.is_uint64();
8888
}
8989
really_inline bool simdjson_result<dom::element>::is_double() const noexcept {
9090
return !error() && first.is_double();
@@ -198,7 +198,7 @@ inline simdjson_result<std::string_view> element::get_string() const noexcept {
198198
return INCORRECT_TYPE;
199199
}
200200
}
201-
inline simdjson_result<uint64_t> element::get_uint64_t() const noexcept {
201+
inline simdjson_result<uint64_t> element::get_uint64() const noexcept {
202202
if(unlikely(!tape.is_uint64())) { // branch rarely taken
203203
if(tape.is_int64()) {
204204
int64_t result = tape.next_tape_value<int64_t>();
@@ -211,7 +211,7 @@ inline simdjson_result<uint64_t> element::get_uint64_t() const noexcept {
211211
}
212212
return tape.next_tape_value<int64_t>();
213213
}
214-
inline simdjson_result<int64_t> element::get_int64_t() const noexcept {
214+
inline simdjson_result<int64_t> element::get_int64() const noexcept {
215215
if(unlikely(!tape.is_int64())) { // branch rarely taken
216216
if(tape.is_uint64()) {
217217
uint64_t result = tape.next_tape_value<uint64_t>();
@@ -284,16 +284,16 @@ template<> inline simdjson_result<array> element::get<array>() const noexcept {
284284
template<> inline simdjson_result<object> element::get<object>() const noexcept { return get_object(); }
285285
template<> inline simdjson_result<const char *> element::get<const char *>() const noexcept { return get_c_str(); }
286286
template<> inline simdjson_result<std::string_view> element::get<std::string_view>() const noexcept { return get_string(); }
287-
template<> inline simdjson_result<int64_t> element::get<int64_t>() const noexcept { return get_int64_t(); }
288-
template<> inline simdjson_result<uint64_t> element::get<uint64_t>() const noexcept { return get_uint64_t(); }
287+
template<> inline simdjson_result<int64_t> element::get<int64_t>() const noexcept { return get_int64(); }
288+
template<> inline simdjson_result<uint64_t> element::get<uint64_t>() const noexcept { return get_uint64(); }
289289
template<> inline simdjson_result<double> element::get<double>() const noexcept { return get_double(); }
290290
template<> inline simdjson_result<bool> element::get<bool>() const noexcept { return get_bool(); }
291291

292292
inline bool element::is_array() const noexcept { return is<array>(); }
293293
inline bool element::is_object() const noexcept { return is<object>(); }
294294
inline bool element::is_string() const noexcept { return is<std::string_view>(); }
295-
inline bool element::is_int64_t() const noexcept { return is<int64_t>(); }
296-
inline bool element::is_uint64_t() const noexcept { return is<uint64_t>(); }
295+
inline bool element::is_int64() const noexcept { return is<int64_t>(); }
296+
inline bool element::is_uint64() const noexcept { return is<uint64_t>(); }
297297
inline bool element::is_double() const noexcept { return is<double>(); }
298298
inline bool element::is_bool() const noexcept { return is<bool>(); }
299299

tests/cast_tester.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -224,35 +224,35 @@ template<> simdjson_result<array> cast_tester<array>::named_get(element element)
224224
template<> simdjson_result<object> cast_tester<object>::named_get(element element) { return element.get_object(); }
225225
template<> simdjson_result<const char *> cast_tester<const char *>::named_get(element element) { return element.get_c_str(); }
226226
template<> simdjson_result<std::string_view> cast_tester<std::string_view>::named_get(element element) { return element.get_string(); }
227-
template<> simdjson_result<uint64_t> cast_tester<uint64_t>::named_get(element element) { return element.get_uint64_t(); }
228-
template<> simdjson_result<int64_t> cast_tester<int64_t>::named_get(element element) { return element.get_int64_t(); }
227+
template<> simdjson_result<uint64_t> cast_tester<uint64_t>::named_get(element element) { return element.get_uint64(); }
228+
template<> simdjson_result<int64_t> cast_tester<int64_t>::named_get(element element) { return element.get_int64(); }
229229
template<> simdjson_result<double> cast_tester<double>::named_get(element element) { return element.get_double(); }
230230
template<> simdjson_result<bool> cast_tester<bool>::named_get(element element) { return element.get_bool(); }
231231

232232
template<> simdjson_result<array> cast_tester<array>::named_get(simdjson_result<element> element) { return element.get_array(); }
233233
template<> simdjson_result<object> cast_tester<object>::named_get(simdjson_result<element> element) { return element.get_object(); }
234234
template<> simdjson_result<const char *> cast_tester<const char *>::named_get(simdjson_result<element> element) { return element.get_c_str(); }
235235
template<> simdjson_result<std::string_view> cast_tester<std::string_view>::named_get(simdjson_result<element> element) { return element.get_string(); }
236-
template<> simdjson_result<uint64_t> cast_tester<uint64_t>::named_get(simdjson_result<element> element) { return element.get_uint64_t(); }
237-
template<> simdjson_result<int64_t> cast_tester<int64_t>::named_get(simdjson_result<element> element) { return element.get_int64_t(); }
236+
template<> simdjson_result<uint64_t> cast_tester<uint64_t>::named_get(simdjson_result<element> element) { return element.get_uint64(); }
237+
template<> simdjson_result<int64_t> cast_tester<int64_t>::named_get(simdjson_result<element> element) { return element.get_int64(); }
238238
template<> simdjson_result<double> cast_tester<double>::named_get(simdjson_result<element> element) { return element.get_double(); }
239239
template<> simdjson_result<bool> cast_tester<bool>::named_get(simdjson_result<element> element) { return element.get_bool(); }
240240

241241
template<> bool cast_tester<array>::named_is(element element) { return element.is_array(); }
242242
template<> bool cast_tester<object>::named_is(element element) { return element.is_object(); }
243243
template<> bool cast_tester<const char *>::named_is(element element) { return element.is_string(); }
244244
template<> bool cast_tester<std::string_view>::named_is(element element) { return element.is_string(); }
245-
template<> bool cast_tester<uint64_t>::named_is(element element) { return element.is_uint64_t(); }
246-
template<> bool cast_tester<int64_t>::named_is(element element) { return element.is_int64_t(); }
245+
template<> bool cast_tester<uint64_t>::named_is(element element) { return element.is_uint64(); }
246+
template<> bool cast_tester<int64_t>::named_is(element element) { return element.is_int64(); }
247247
template<> bool cast_tester<double>::named_is(element element) { return element.is_double(); }
248248
template<> bool cast_tester<bool>::named_is(element element) { return element.is_bool(); }
249249

250250
template<> bool cast_tester<array>::named_is(simdjson_result<element> element) { return element.is_array(); }
251251
template<> bool cast_tester<object>::named_is(simdjson_result<element> element) { return element.is_object(); }
252252
template<> bool cast_tester<const char *>::named_is(simdjson_result<element> element) { return element.is_string(); }
253253
template<> bool cast_tester<std::string_view>::named_is(simdjson_result<element> element) { return element.is_string(); }
254-
template<> bool cast_tester<uint64_t>::named_is(simdjson_result<element> element) { return element.is_uint64_t(); }
255-
template<> bool cast_tester<int64_t>::named_is(simdjson_result<element> element) { return element.is_int64_t(); }
254+
template<> bool cast_tester<uint64_t>::named_is(simdjson_result<element> element) { return element.is_uint64(); }
255+
template<> bool cast_tester<int64_t>::named_is(simdjson_result<element> element) { return element.is_int64(); }
256256
template<> bool cast_tester<double>::named_is(simdjson_result<element> element) { return element.is_double(); }
257257
template<> bool cast_tester<bool>::named_is(simdjson_result<element> element) { return element.is_bool(); }
258258

0 commit comments

Comments
 (0)