Fix yyjson double reading
This commit is contained in:
parent
5add8ac255
commit
25d1c7e622
|
@ -7,12 +7,23 @@
|
|||
namespace kostya {
|
||||
|
||||
class yyjson {
|
||||
public:
|
||||
simdjson_really_inline double get_double(yyjson_val *obj, std::string_view key) {
|
||||
yyjson_val *val = yyjson_obj_getn(obj, key.data(), key.length());
|
||||
return yyjson_get_real(val);
|
||||
if (yyjson_get_type(val) != YYJSON_TYPE_NUM) { return 0; }
|
||||
|
||||
switch (yyjson_get_subtype(val)) {
|
||||
case YYJSON_SUBTYPE_UINT:
|
||||
return yyjson_get_uint(val);
|
||||
case YYJSON_SUBTYPE_SINT:
|
||||
return yyjson_get_sint(val);
|
||||
case YYJSON_SUBTYPE_REAL:
|
||||
return yyjson_get_real(val);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
bool run(const simdjson::padded_string &json, std::vector<point> &points) {
|
||||
yyjson_doc *doc = yyjson_read(json.data(), json.size(), 0);
|
||||
if (!doc) { return false; }
|
||||
|
|
|
@ -11,7 +11,18 @@ class yyjson {
|
|||
|
||||
simdjson_really_inline double get_double(yyjson_val *obj, std::string_view key) {
|
||||
yyjson_val *val = yyjson_obj_getn(obj, key.data(), key.length());
|
||||
return yyjson_get_real(val);
|
||||
if (yyjson_get_type(val) != YYJSON_TYPE_NUM) { return 0; }
|
||||
|
||||
switch (yyjson_get_subtype(val)) {
|
||||
case YYJSON_SUBTYPE_UINT:
|
||||
return yyjson_get_uint(val);
|
||||
case YYJSON_SUBTYPE_SINT:
|
||||
return yyjson_get_sint(val);
|
||||
case YYJSON_SUBTYPE_REAL:
|
||||
return yyjson_get_real(val);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
|
|
Loading…
Reference in New Issue