mirror of
https://github.com/nlohmann/json.git
synced 2026-11-03 19:29:22 +00:00
Merge develop into fix/bjdata-count-size-max
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
4 files changed
+28
-20
No files matched your search
@@ -1168,20 +1168,20 @@ indent_done:
|
|||||||
if (negative)
|
if (negative)
|
||||||
{
|
{
|
||||||
++p;
|
++p;
|
||||||
|
if (NLOHMANN_VIEW_UNLIKELY(cur() < '0' || cur() > '9'))
|
||||||
|
{
|
||||||
|
return fail(error_code::number_after_minus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const unsigned char* const int_start = p;
|
const unsigned char* const int_start = p;
|
||||||
if (cur() == '0')
|
if (cur() == '0')
|
||||||
{
|
{
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
else if (!negative || NLOHMANN_VIEW_LIKELY(cur() >= '1' && cur() <= '9'))
|
|
||||||
{
|
|
||||||
// (without a sign, the dispatch saw a digit)
|
|
||||||
p = skip_digits(p + 1, e);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return fail(error_code::number_after_minus);
|
// (a digit: the dispatch or the check after the sign saw it)
|
||||||
|
p = skip_digits(p + 1, e);
|
||||||
}
|
}
|
||||||
const auto int_digits = static_cast<std::size_t>(p - int_start);
|
const auto int_digits = static_cast<std::size_t>(p - int_start);
|
||||||
std::size_t frac_digits = 0;
|
std::size_t frac_digits = 0;
|
||||||
|
|||||||
@@ -251,8 +251,12 @@ std::string diagnostics(const error_site site)
|
|||||||
std::string context;
|
std::string context;
|
||||||
#if JSON_DIAGNOSTICS
|
#if JSON_DIAGNOSTICS
|
||||||
std::vector<std::string> tokens;
|
std::vector<std::string> tokens;
|
||||||
// a value that is not found leaves no tokens, like the root
|
const bool found = edited ? value_path<true>(d, site.value(), tokens) : value_path<false>(d, site.value(), tokens);
|
||||||
static_cast<void>(edited ? value_path<true>(d, site.value(), tokens) : value_path<false>(d, site.value(), tokens));
|
if (!found)
|
||||||
|
{
|
||||||
|
// a value that is not found has no path, and with it no bytes
|
||||||
|
return context;
|
||||||
|
}
|
||||||
if (!tokens.empty())
|
if (!tokens.empty())
|
||||||
{
|
{
|
||||||
// the root value has no path, but still has a byte range
|
// the root value has no path, but still has a byte range
|
||||||
|
|||||||
Generated
+12
-8
@@ -2473,20 +2473,20 @@ indent_done:
|
|||||||
if (negative)
|
if (negative)
|
||||||
{
|
{
|
||||||
++p;
|
++p;
|
||||||
|
if (NLOHMANN_VIEW_UNLIKELY(cur() < '0' || cur() > '9'))
|
||||||
|
{
|
||||||
|
return fail(error_code::number_after_minus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const unsigned char* const int_start = p;
|
const unsigned char* const int_start = p;
|
||||||
if (cur() == '0')
|
if (cur() == '0')
|
||||||
{
|
{
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
else if (!negative || NLOHMANN_VIEW_LIKELY(cur() >= '1' && cur() <= '9'))
|
|
||||||
{
|
|
||||||
// (without a sign, the dispatch saw a digit)
|
|
||||||
p = skip_digits(p + 1, e);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return fail(error_code::number_after_minus);
|
// (a digit: the dispatch or the check after the sign saw it)
|
||||||
|
p = skip_digits(p + 1, e);
|
||||||
}
|
}
|
||||||
const auto int_digits = static_cast<std::size_t>(p - int_start);
|
const auto int_digits = static_cast<std::size_t>(p - int_start);
|
||||||
std::size_t frac_digits = 0;
|
std::size_t frac_digits = 0;
|
||||||
@@ -5080,8 +5080,12 @@ std::string diagnostics(const error_site site)
|
|||||||
std::string context;
|
std::string context;
|
||||||
#if JSON_DIAGNOSTICS
|
#if JSON_DIAGNOSTICS
|
||||||
std::vector<std::string> tokens;
|
std::vector<std::string> tokens;
|
||||||
// a value that is not found leaves no tokens, like the root
|
const bool found = edited ? value_path<true>(d, site.value(), tokens) : value_path<false>(d, site.value(), tokens);
|
||||||
static_cast<void>(edited ? value_path<true>(d, site.value(), tokens) : value_path<false>(d, site.value(), tokens));
|
if (!found)
|
||||||
|
{
|
||||||
|
// a value that is not found has no path, and with it no bytes
|
||||||
|
return context;
|
||||||
|
}
|
||||||
if (!tokens.empty())
|
if (!tokens.empty())
|
||||||
{
|
{
|
||||||
// the root value has no path, but still has a byte range
|
// the root value has no path, but still has a byte range
|
||||||
|
|||||||
@@ -505,8 +505,8 @@ struct locale_switching_token
|
|||||||
{
|
{
|
||||||
using value_type = char;
|
using value_type = char;
|
||||||
|
|
||||||
locale_switching_token(std::string text_, const char* switch_to_)
|
locale_switching_token(std::string text_, std::string switch_to_)
|
||||||
: text(std::move(text_)), switch_to(switch_to_)
|
: text(std::move(text_)), switch_to(std::move(switch_to_))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
std::size_t size() const
|
std::size_t size() const
|
||||||
@@ -523,13 +523,13 @@ struct locale_switching_token
|
|||||||
{
|
{
|
||||||
if (!switched)
|
if (!switched)
|
||||||
{
|
{
|
||||||
switched = std::setlocale(LC_NUMERIC, switch_to) != nullptr;
|
switched = std::setlocale(LC_NUMERIC, switch_to.c_str()) != nullptr;
|
||||||
}
|
}
|
||||||
return &text[0];
|
return &text[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string text;
|
std::string text;
|
||||||
const char* switch_to;
|
std::string switch_to;
|
||||||
bool switched = false;
|
bool switched = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user