📝 documentation

parent 10bad938
...@@ -5543,8 +5543,9 @@ class binary_reader ...@@ -5543,8 +5543,9 @@ class binary_reader
/*! /*!
@brief reads a UBJSON string @brief reads a UBJSON string
This function first reads starting bytes to determine the expected This function is either called after reading the 'S' byte explicitly
string length and then copies this number of bytes into a string. indicating a string, or in case of an object key where the 'S' byte can be
left out.
@param[in] get_char whether a new character should be retrieved from the @param[in] get_char whether a new character should be retrieved from the
input (true, default) or whether the last read input (true, default) or whether the last read
...@@ -5559,7 +5560,7 @@ class binary_reader ...@@ -5559,7 +5560,7 @@ class binary_reader
{ {
if (get_char) if (get_char)
{ {
get(); get(); // TODO: may we ignore N here?
} }
check_eof(); check_eof();
...@@ -5584,6 +5585,14 @@ class binary_reader ...@@ -5584,6 +5585,14 @@ class binary_reader
} }
} }
/*!
@brief determine the type and size for a container
In the optimized UBJSON format, a type and a size can be provided to allow
for a more compact representation.
@return pair of the size and the type
*/
std::pair<std::size_t, int> get_ubjson_size_type() std::pair<std::size_t, int> get_ubjson_size_type()
{ {
std::size_t sz = std::string::npos; std::size_t sz = std::string::npos;
...@@ -5593,14 +5602,16 @@ class binary_reader ...@@ -5593,14 +5602,16 @@ class binary_reader
if (current == '$') if (current == '$')
{ {
get(); // must not ignore 'N', because 'N' maybe the type tc = get(); // must not ignore 'N', because 'N' maybe the type
check_eof(); check_eof();
tc = current;
get_ignore_noop(); get_ignore_noop();
if (current != '#') if (current != '#')
{ {
assert(false); std::stringstream ss;
ss << std::setw(2) << std::uppercase << std::setfill('0') << std::hex << current;
JSON_THROW(parse_error::create(112, chars_read,
"expected '#' after UBJSON type information; last byte: 0x" + ss.str()));
} }
sz = parse_ubjson_internal(); sz = parse_ubjson_internal();
} }
...@@ -5646,7 +5657,13 @@ class binary_reader ...@@ -5646,7 +5657,13 @@ class binary_reader
{ {
get(); get();
check_eof(); check_eof();
assert(0 <= current and current <= 127); if (JSON_UNLIKELY(not(0 <= current and current <= 127)))
{
std::stringstream ss;
ss << std::setw(2) << std::uppercase << std::setfill('0') << std::hex << current;
JSON_THROW(parse_error::create(113, chars_read,
"byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + ss.str()));
}
return std::string(1, static_cast<char>(current)); return std::string(1, static_cast<char>(current));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment