25#ifndef JOIN_DATA_VALUE_BUILDER_HPP
26#define JOIN_DATA_VALUE_BUILDER_HPP
56 : _stack (
std::move (cache ()))
93 cache () = std::move (_stack);
102 return emplaceValue (
nullptr);
112 return emplaceValue (value);
122 return emplaceValue (value);
132 return emplaceValue (value);
142 return emplaceValue (value);
152 return emplaceValue (value);
162 return emplaceValue (value);
172 return emplaceValue (std::string (value));
192 _starts[_depth++] = _stack.size ();
209 auto first = _stack.begin () + _starts[--_depth];
210 Array array (std::make_move_iterator (first), std::make_move_iterator (_stack.end ()));
211 _stack.erase (first, _stack.end ());
215 _root = std::move (array);
219 _stack.emplace_back (std::move (array));
241 _starts[_depth++] = _stack.size ();
269 _stack.emplace_back (
key);
287 _stack.emplace_back (
key);
305 _stack.emplace_back (
key);
323 _stack.emplace_back (
key);
341 _stack.emplace_back (
key);
359 _stack.emplace_back (
key);
377 _stack.emplace_back (
key);
395 _stack.emplace_back (
key);
422 if (
JOIN_UNLIKELY ((_stack.size () - _starts[_depth - 1]) & 1))
428 auto first = _stack.begin () + _starts[--_depth];
430 object.reserve ((_stack.end () - first) / 2);
431 for (
auto it = first; it != _stack.end (); it += 2)
433 object.emplace_back (std::move (it[0]), std::move (it[1]));
435 _stack.erase (first, _stack.end ());
439 _root = std::move (
object);
443 _stack.emplace_back (std::move (
object));
463 template <
typename T>
464 int emplaceValue (T&& value)
468 _root =
Value (std::forward<T> (value));
472 _stack.emplace_back (std::forward<T> (value));
481 static std::vector<Value>& cache () noexcept
483 thread_local std::vector<Value> stack;
494 std::vector<Value> _stack;
value builder class, filled by balanced SAX calls.
Definition value_builder.hpp:49
int setKey(std::string_view key)
set string key.
Definition value_builder.hpp:387
int startArray(uint32_t size=0)
start array.
Definition value_builder.hpp:180
int setDouble(double value)
set real value.
Definition value_builder.hpp:160
int stopArray()
stop array.
Definition value_builder.hpp:201
int setKey(double key)
set real key.
Definition value_builder.hpp:369
ValueBuilder & operator=(const ValueBuilder &other)=delete
copy assignment.
int setKey(uint32_t key)
set unsigned integer key.
Definition value_builder.hpp:315
int setBool(bool value)
set boolean value.
Definition value_builder.hpp:110
int setInt(int32_t value)
set integer value.
Definition value_builder.hpp:120
int setNull()
set null value.
Definition value_builder.hpp:100
int setUint(uint32_t value)
set unsigned integer value.
Definition value_builder.hpp:130
void reset() noexcept
reset the parsing state, leaving the root untouched.
Definition value_builder.hpp:451
ValueBuilder(Value &root)
create instance.
Definition value_builder.hpp:55
int setKey(int32_t key)
set integer key.
Definition value_builder.hpp:297
int setKey(uint64_t key)
set unsigned 64 bits integer key.
Definition value_builder.hpp:351
ValueBuilder(ValueBuilder &&other)=delete
move constructor.
int setKey(int64_t key)
set 64 bits integer key.
Definition value_builder.hpp:333
ValueBuilder(const ValueBuilder &other)=delete
copy constructor.
int setKey(bool key)
set boolean key.
Definition value_builder.hpp:279
int setInt64(int64_t value)
set 64 bits integer value.
Definition value_builder.hpp:140
int stopObject()
stop object.
Definition value_builder.hpp:414
const Object & members(const Object &object) const noexcept
get object members in writing order.
Definition value_builder.hpp:251
int setString(std::string_view value)
set string value.
Definition value_builder.hpp:170
~ValueBuilder()
destroy instance.
Definition value_builder.hpp:90
int startObject(uint32_t size=0)
start object.
Definition value_builder.hpp:229
int setUint64(uint64_t value)
set unsigned 64 bits integer value.
Definition value_builder.hpp:150
int setKey(std::nullptr_t key)
set null key.
Definition value_builder.hpp:261
int setKey(const char *key)
set string key.
Definition value_builder.hpp:405
value class.
Definition value.hpp:92
const std::string key(65, 'a')
key.
Definition acceptor.hpp:32
std::vector< Value > Array
array.
Definition value.hpp:53
std::error_code make_error_code(join::Errc code) noexcept
Create an std::error_code object.
Definition error.cpp:195
constexpr size_t saxMaxDepth
max number of nested containers.
Definition sax.hpp:42
thread_local std::error_code lastError
last error.
Definition error.cpp:32
std::vector< Member > Object
object.
Definition value.hpp:86
#define JOIN_UNLIKELY(x)
Definition utils.hpp:51