mirror of
https://github.com/nlohmann/json.git
synced 2026-10-31 18:05:44 +00:00
BSON prefixes every document and array with its size. to_bson() therefore walked the value twice: once to compute every size, once to write. When the output is the vector that to_bson(j) returns, the writer now puts a placeholder in front of each document and array and writes its size there once the document is complete, so one walk is enough. Every key and value is still checked as the size pass checked it, in the same order, so the same exception is thrown; the partial output is discarded with the vector. If a length would not fit BSON's 32-bit size fields, the writer drops what it has written and writes the document in two passes, which reports that error before writing anything, as before. The two passes remain for output adapters (streams, strings, vectors passed by reference), for error_handler_t::replace and ignore (which change sizes), and for integer types wider than 64 bits. Signed-off-by: Niels Lohmann <mail@nlohmann.me>