1#ifndef SIMDJSON_INTERNAL_DOM_PARSER_IMPLEMENTATION_H
2#define SIMDJSON_INTERNAL_DOM_PARSER_IMPLEMENTATION_H
4#include "simdjson/base.h"
5#include "simdjson/error.h"
24 streaming_partial, streaming_final,
25 json_sequence_partial, json_sequence_final,
26 comma_delimited_partial, comma_delimited_final
35 return (mode != stage1_mode::regular);
48class dom_parser_implementation {
64 simdjson_warn_unused
virtual error_code parse(
const uint8_t *buf,
size_t len, dom::document &doc)
noexcept = 0;
80 simdjson_warn_unused
virtual error_code stage1(
const uint8_t *buf,
size_t len,
stage1_mode streaming)
noexcept = 0;
94 simdjson_warn_unused
virtual error_code stage2(dom::document &doc)
noexcept = 0;
107 simdjson_warn_unused
virtual error_code stage2_next(dom::document &doc)
noexcept = 0;
124 simdjson_warn_unused
virtual uint8_t *parse_string(
const uint8_t *src, uint8_t *dst,
bool allow_replacement)
const noexcept = 0;
140 simdjson_warn_unused
virtual uint8_t *parse_wobbly_string(
const uint8_t *src, uint8_t *dst)
const noexcept = 0;
154 virtual error_code set_capacity(
size_t capacity)
noexcept = 0;
165 virtual error_code set_max_depth(
size_t max_depth)
noexcept = 0;
170 virtual ~dom_parser_implementation() =
default;
173 uint32_t n_structural_indexes{0};
175 std::unique_ptr<uint32_t[]> structural_indexes{};
177 uint32_t next_structural_index{0};
184 simdjson_pure simdjson_inline
size_t capacity() const noexcept;
191 simdjson_pure simdjson_inline
size_t max_depth() const noexcept;
201 simdjson_warn_unused inline
error_code allocate(
size_t capacity,
size_t max_depth) noexcept;
217 size_t _max_depth{0};
221 bool _number_as_string{
false};
231 bool _unpadded{
false};
236 simdjson_inline dom_parser_implementation() noexcept;
237 simdjson_inline dom_parser_implementation(dom_parser_implementation &&other) noexcept;
238 simdjson_inline dom_parser_implementation &operator=(dom_parser_implementation &&other) noexcept;
240 simdjson_inline dom_parser_implementation(const dom_parser_implementation &) noexcept = delete;
241 simdjson_inline dom_parser_implementation &operator=(const dom_parser_implementation &other) noexcept = delete;
244simdjson_inline dom_parser_implementation::dom_parser_implementation() noexcept = default;
245simdjson_inline dom_parser_implementation::dom_parser_implementation(dom_parser_implementation &&other) noexcept = default;
246simdjson_inline dom_parser_implementation &dom_parser_implementation::operator=(dom_parser_implementation &&other) noexcept = default;
248simdjson_pure simdjson_inline
size_t dom_parser_implementation::capacity() const noexcept {
252simdjson_pure simdjson_inline
size_t dom_parser_implementation::max_depth() const noexcept {
257inline error_code dom_parser_implementation::allocate(
size_t capacity,
size_t max_depth)
noexcept {
258 if (this->max_depth() != max_depth) {
260 if (err) {
return err; }
262 if (_capacity != capacity) {
264 if (err) {
return err; }
The top level simdjson namespace, containing everything the library provides.
bool is_streaming(stage1_mode mode)
Returns true if mode == streaming_partial or mode == streaming_final.
error_code
All possible errors returned by simdjson.
stage1_mode
This enum is used with the dom_parser_implementation::stage1 function.