1#ifndef SIMDJSON_DOCUMENT_STREAM_H
2#define SIMDJSON_DOCUMENT_STREAM_H
4#include "simdjson/dom/base.h"
5#include "simdjson/dom/parser.h"
7#ifdef SIMDJSON_THREADS_ENABLED
10#include <condition_variable>
16#ifdef SIMDJSON_THREADS_ENABLED
19 stage1_worker() noexcept = default;
20 stage1_worker(const stage1_worker&) = delete;
21 stage1_worker(stage1_worker&&) = delete;
22 stage1_worker operator=(const stage1_worker&) = delete;
33 void run(document_stream * ds, dom::parser * stage1,
size_t next_batch_start);
48 dom::parser * stage1_thread_parser{};
49 size_t _next_batch_start{};
50 document_stream * owner{};
61 std::mutex locking_mutex{};
62 std::condition_variable cond_var{};
137 using difference_type = std::ptrdiff_t;
139 using iterator_category = std::input_iterator_tag;
144 simdjson_inline
iterator()
noexcept;
148 simdjson_inline
reference operator*()
noexcept;
152 inline iterator& operator++()
noexcept;
157 simdjson_inline
bool operator!=(
const iterator &other)
const noexcept;
173 simdjson_inline
size_t current_index()
const noexcept;
193 simdjson_inline std::string_view source()
const noexcept;
240 inline
void start() noexcept;
265 inline
void next() noexcept;
271 inline
void load_batch() noexcept;
274 inline
size_t next_batch_start() const noexcept;
287 size_t batch_start{0};
289#ifdef SIMDJSON_THREADS_ENABLED
293 inline void load_from_stage1_thread() noexcept;
296 inline
void start_stage1_thread() noexcept;
299 inline
void finish_stage1_thread() noexcept;
304 friend struct stage1_worker;
305 std::unique_ptr<stage1_worker> worker{
new(std::nothrow) stage1_worker()};
310 dom::parser stage1_thread_parser{};
313 friend class dom::parser;
315 friend struct internal::simdjson_result_base<dom::document_stream>;
322struct
simdjson_result<dom::document_stream> :
public internal::simdjson_result_base<dom::document_stream> {
328#if SIMDJSON_EXCEPTIONS
332#ifndef SIMDJSON_DISABLE_DEPRECATED_API
333 [[deprecated(
"parse_many() and load_many() may return errors. Use document_stream stream; error = parser.parse_many().get(doc); instead.")]]
335 [[deprecated(
"parse_many() and load_many() may return errors. Use document_stream stream; error = parser.parse_many().get(doc); instead.")]]
An iterator through a forward-only stream of documents.
A forward-only stream of documents.
size_t size_in_bytes() const noexcept
Returns the input size in bytes.
size_t truncated_bytes() const noexcept
After iterating through the stream, this method returns the number of bytes that were not parsed at t...
simdjson_inline iterator begin() noexcept
Start iterating the documents in the stream.
simdjson_inline document_stream(document_stream &&other) noexcept=default
Move one document_stream to another.
simdjson_inline document_stream & operator=(document_stream &&other) noexcept=default
Move one document_stream to another.
simdjson_inline iterator end() noexcept
The end of the stream, for iterator comparison purposes.
simdjson_inline document_stream() noexcept
Construct an uninitialized document_stream.
A persistent document parser.
The top level simdjson namespace, containing everything the library provides.
stream_format
Stream format for parse_many/iterate_many.
@ whitespace_delimited
Whitespace-delimited JSON documents (default, includes NDJSON/JSONL)
error_code
All possible errors returned by simdjson.
@ UNINITIALIZED
unknown error, or uninitialized document
The result of a simdjson operation that could fail.