mirror of
https://github.com/simdjson/simdjson
synced 2026-06-08 17:27:07 +00:00
Fix issue with early destruction
This commit is contained in:
@@ -47,13 +47,13 @@ simdjson_really_inline bool Iter::Run(const padded_string &json) {
|
||||
tweet tweet;
|
||||
|
||||
if (!iter.start_object() || !iter.find_field_raw("created_at")) { return false; }
|
||||
tweet.created_at = iter.consume_raw_json_string().value().unescape(iter);
|
||||
tweet.created_at = iter.consume_string();
|
||||
|
||||
if (!iter.has_next_field() || !iter.find_field_raw("id")) { return false; }
|
||||
tweet.id = iter.consume_uint64();
|
||||
|
||||
if (!iter.has_next_field() || !iter.find_field_raw("text")) { return false; }
|
||||
tweet.text = iter.consume_raw_json_string().value().unescape(iter);
|
||||
tweet.text = iter.consume_string();
|
||||
|
||||
if (!iter.has_next_field() || !iter.find_field_raw("in_reply_to_status_id")) { return false; }
|
||||
if (!iter.is_null()) {
|
||||
@@ -66,7 +66,7 @@ simdjson_really_inline bool Iter::Run(const padded_string &json) {
|
||||
tweet.user.id = iter.consume_uint64();
|
||||
|
||||
if (!iter.has_next_field() || !iter.find_field_raw("screen_name")) { return false; }
|
||||
tweet.user.screen_name = iter.consume_raw_json_string().value().unescape(iter);
|
||||
tweet.user.screen_name = iter.consume_string();
|
||||
|
||||
if (iter.skip_container()) { return false; } // Skip the rest of the user object
|
||||
}
|
||||
|
||||
@@ -2,12 +2,13 @@ namespace simdjson {
|
||||
namespace SIMDJSON_IMPLEMENTATION {
|
||||
namespace ondemand {
|
||||
|
||||
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
|
||||
simdjson_really_inline json_iterator::json_iterator(json_iterator &&other) noexcept
|
||||
: token_iterator(std::forward<token_iterator>(other)),
|
||||
parser{other.parser},
|
||||
current_string_buf_loc{other.current_string_buf_loc},
|
||||
active_lease_depth{other.active_lease_depth}
|
||||
current_string_buf_loc{other.current_string_buf_loc}
|
||||
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
|
||||
, active_lease_depth{other.active_lease_depth}
|
||||
#endif
|
||||
{
|
||||
other.parser = nullptr;
|
||||
}
|
||||
@@ -16,11 +17,12 @@ simdjson_really_inline json_iterator &json_iterator::operator=(json_iterator &&o
|
||||
index = other.index;
|
||||
parser = other.parser;
|
||||
current_string_buf_loc = other.current_string_buf_loc;
|
||||
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
|
||||
active_lease_depth = other.active_lease_depth;
|
||||
#endif
|
||||
other.parser = nullptr;
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
simdjson_really_inline json_iterator::json_iterator(ondemand::parser *_parser) noexcept
|
||||
: token_iterator(_parser->dom_parser.buf, _parser->dom_parser.structural_indexes.get()),
|
||||
|
||||
@@ -18,13 +18,11 @@ class json_iterator_ref;
|
||||
class json_iterator : public token_iterator {
|
||||
public:
|
||||
simdjson_really_inline json_iterator() noexcept = default;
|
||||
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
|
||||
simdjson_really_inline json_iterator(json_iterator &&other) noexcept;
|
||||
simdjson_really_inline json_iterator &operator=(json_iterator &&other) noexcept;
|
||||
#ifdef SIMDJSON_ONDEMAND_SAFETY_RAILS
|
||||
simdjson_really_inline ~json_iterator() noexcept;
|
||||
#else
|
||||
simdjson_really_inline json_iterator(json_iterator &&other) noexcept = default;
|
||||
simdjson_really_inline json_iterator &operator=(json_iterator &&other) noexcept = default;
|
||||
simdjson_really_inline ~json_iterator() noexcept = default;
|
||||
#endif
|
||||
simdjson_really_inline json_iterator(const json_iterator &other) noexcept = delete;
|
||||
|
||||
@@ -40,15 +40,15 @@ simdjson_really_inline simdjson_result<T> value::consume_if_success(simdjson_res
|
||||
}
|
||||
|
||||
simdjson_really_inline simdjson_result<array> value::get_array() noexcept {
|
||||
bool is_empty;
|
||||
SIMDJSON_TRY( iter->start_array(json).get(is_empty) );
|
||||
if (is_empty) { iter.release(); }
|
||||
bool has_value;
|
||||
SIMDJSON_TRY( iter->start_array(json).get(has_value) );
|
||||
if (!has_value) { iter.release(); }
|
||||
return array(std::move(iter));
|
||||
}
|
||||
simdjson_really_inline simdjson_result<object> value::get_object() noexcept {
|
||||
bool is_empty;
|
||||
SIMDJSON_TRY( iter->start_object(json).get(is_empty) );
|
||||
if (is_empty) { iter.release(); }
|
||||
bool has_value;
|
||||
SIMDJSON_TRY( iter->start_object(json).get(has_value) );
|
||||
if (!has_value) { iter.release(); }
|
||||
return object(std::move(iter));
|
||||
}
|
||||
simdjson_really_inline simdjson_result<raw_json_string> value::get_raw_json_string() noexcept {
|
||||
|
||||
Reference in New Issue
Block a user