mirror of
https://github.com/nlohmann/json.git
synced 2026-10-11 17:07:15 +00:00
Write the head of nested BSON elements in one helper
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
2 files changed
+34
-8
No files matched your search
@@ -1652,6 +1652,21 @@ class binary_writer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief Writes the head of a BSON element with key @a name whose value is
|
||||||
|
the object or array @a j: its type, key, and @a size
|
||||||
|
|
||||||
|
Called while the key is in scope: an object key is a key_type, which
|
||||||
|
may only convert to a temporary string_t, so it cannot be kept by
|
||||||
|
pointer until after the loop over the entries.
|
||||||
|
*/
|
||||||
|
void write_bson_nested_head(const string_t& name, const BasicJsonType& j,
|
||||||
|
const std::size_t size)
|
||||||
|
{
|
||||||
|
write_bson_entry_header(name, j.is_object() ? 0x03 : 0x04);
|
||||||
|
write_number<std::int32_t>(to_bson_length(size), true);
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief an object or array of the BSON document being sized or written
|
/// @brief an object or array of the BSON document being sized or written
|
||||||
struct bson_frame
|
struct bson_frame
|
||||||
{
|
{
|
||||||
@@ -1826,8 +1841,7 @@ class binary_writer
|
|||||||
++current.member;
|
++current.member;
|
||||||
if (el.second.is_structured())
|
if (el.second.is_structured())
|
||||||
{
|
{
|
||||||
write_bson_entry_header(el.first, el.second.is_object() ? 0x03 : 0x04);
|
write_bson_nested_head(el.first, el.second, nested_sizes[next_size++]);
|
||||||
write_number<std::int32_t>(to_bson_length(nested_sizes[next_size++]), true);
|
|
||||||
nested = &el.second;
|
nested = &el.second;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1846,8 +1860,7 @@ class binary_writer
|
|||||||
++current.index;
|
++current.index;
|
||||||
if (el.is_structured())
|
if (el.is_structured())
|
||||||
{
|
{
|
||||||
write_bson_entry_header(index_name, el.is_object() ? 0x03 : 0x04);
|
write_bson_nested_head(index_name, el, nested_sizes[next_size++]);
|
||||||
write_number<std::int32_t>(to_bson_length(nested_sizes[next_size++]), true);
|
|
||||||
nested = ⪙
|
nested = ⪙
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -23161,6 +23161,21 @@ class binary_writer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief Writes the head of a BSON element with key @a name whose value is
|
||||||
|
the object or array @a j: its type, key, and @a size
|
||||||
|
|
||||||
|
Called while the key is in scope: an object key is a key_type, which
|
||||||
|
may only convert to a temporary string_t, so it cannot be kept by
|
||||||
|
pointer until after the loop over the entries.
|
||||||
|
*/
|
||||||
|
void write_bson_nested_head(const string_t& name, const BasicJsonType& j,
|
||||||
|
const std::size_t size)
|
||||||
|
{
|
||||||
|
write_bson_entry_header(name, j.is_object() ? 0x03 : 0x04);
|
||||||
|
write_number<std::int32_t>(to_bson_length(size), true);
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief an object or array of the BSON document being sized or written
|
/// @brief an object or array of the BSON document being sized or written
|
||||||
struct bson_frame
|
struct bson_frame
|
||||||
{
|
{
|
||||||
@@ -23335,8 +23350,7 @@ class binary_writer
|
|||||||
++current.member;
|
++current.member;
|
||||||
if (el.second.is_structured())
|
if (el.second.is_structured())
|
||||||
{
|
{
|
||||||
write_bson_entry_header(el.first, el.second.is_object() ? 0x03 : 0x04);
|
write_bson_nested_head(el.first, el.second, nested_sizes[next_size++]);
|
||||||
write_number<std::int32_t>(to_bson_length(nested_sizes[next_size++]), true);
|
|
||||||
nested = &el.second;
|
nested = &el.second;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -23355,8 +23369,7 @@ class binary_writer
|
|||||||
++current.index;
|
++current.index;
|
||||||
if (el.is_structured())
|
if (el.is_structured())
|
||||||
{
|
{
|
||||||
write_bson_entry_header(index_name, el.is_object() ? 0x03 : 0x04);
|
write_bson_nested_head(index_name, el, nested_sizes[next_size++]);
|
||||||
write_number<std::int32_t>(to_bson_length(nested_sizes[next_size++]), true);
|
|
||||||
nested = ⪙
|
nested = ⪙
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in new issue
Block a user