mirror of
https://github.com/nlohmann/json.git
synced 2026-09-30 14:05:18 +00:00
Address the clang-tidy findings of json_document and json_view
- the input dispatch takes byte ranges by const reference and reads the size once (which also settles a finding of the static analyzer); input adapters are taken by value - the classification of inputs keeps its nested conditional operators, a constant expression of C++11 (NOLINT) - the test's C arrays, fixed seed, and escaped literals are marked, as in the other tests Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
@@ -48,6 +48,7 @@ struct classify_input
|
||||
#else
|
||||
static constexpr bool is_string_view = false;
|
||||
#endif
|
||||
// NOLINTBEGIN(readability-avoid-nested-conditional-operator): a constant expression of C++11
|
||||
static constexpr input_kind value =
|
||||
std::is_array<R>::value ? input_kind::char_array
|
||||
: std::is_pointer<D>::value ? input_kind::c_string
|
||||
@@ -55,6 +56,7 @@ struct classify_input
|
||||
: (is_bytes && (!is_rvalue || is_string_view)) ? input_kind::borrow_range
|
||||
: is_bytes ? input_kind::copy_range
|
||||
: input_kind::adapter;
|
||||
// NOLINTEND(readability-avoid-nested-conditional-operator)
|
||||
};
|
||||
|
||||
/// std::basic_string guarantees a NUL at data()[size()] (the parser's sentinel)
|
||||
@@ -66,7 +68,7 @@ struct is_std_string<std::basic_string<char, Traits, Alloc>> : std::true_type {}
|
||||
|
||||
/// drain a json input adapter (UTF-16/32 inputs arrive as UTF-8)
|
||||
template<typename Adapter>
|
||||
std::string collect_adapter(Adapter&& ia)
|
||||
std::string collect_adapter(Adapter ia)
|
||||
{
|
||||
std::string buf;
|
||||
for (;;)
|
||||
|
||||
@@ -396,7 +396,7 @@ class basic_json_document
|
||||
{
|
||||
return;
|
||||
}
|
||||
using node = detail::view::node;
|
||||
using detail::view::node;
|
||||
document_data& d = *m_data;
|
||||
|
||||
// allocate everything first, so that an exception leaves the document
|
||||
@@ -511,15 +511,16 @@ class basic_json_document
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void read_kind(T&& s, bool ae, bool c, bool tc, std::integral_constant<input_kind, input_kind::borrow_range> /*unused*/)
|
||||
void read_kind(const T& s, bool ae, bool c, bool tc, std::integral_constant<input_kind, input_kind::borrow_range> /*unused*/)
|
||||
{
|
||||
// std::basic_string guarantees data()[size()] == 0: use it as sentinel
|
||||
build(s.size() == 0 ? "" : reinterpret_cast<const char*>(s.data()), static_cast<std::size_t>(s.size()), ae, c, tc, false, // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
|
||||
detail::view::is_std_string<typename std::decay<T>::type>::value || s.size() == 0);
|
||||
const auto size = static_cast<std::size_t>(s.size());
|
||||
build(size == 0 ? "" : reinterpret_cast<const char*>(s.data()), size, ae, c, tc, false, // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
|
||||
detail::view::is_std_string<T>::value || size == 0);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void read_kind(T&& s, bool ae, bool c, bool tc, std::integral_constant<input_kind, input_kind::copy_range> /*unused*/)
|
||||
void read_kind(const T& s, bool ae, bool c, bool tc, std::integral_constant<input_kind, input_kind::copy_range> /*unused*/)
|
||||
{
|
||||
build_owned(std::string(reinterpret_cast<const char*>(s.data()), static_cast<std::size_t>(s.size())), ae, c, tc); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
|
||||
}
|
||||
@@ -561,9 +562,9 @@ class basic_json_document
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static std::string collect_impl(T&& s, std::true_type /*contiguous*/)
|
||||
static std::string collect_impl(const T& s, std::true_type /*contiguous*/)
|
||||
{
|
||||
return std::string(reinterpret_cast<const char*>(s.data()), static_cast<std::size_t>(s.size())); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
|
||||
return {reinterpret_cast<const char*>(s.data()), static_cast<std::size_t>(s.size())}; // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
@@ -572,7 +573,7 @@ class basic_json_document
|
||||
return detail::view::collect_adapter(detail::input_adapter(std::forward<T>(s)));
|
||||
}
|
||||
|
||||
std::unique_ptr<document_data, document_data::deleter> m_data{};
|
||||
std::unique_ptr<document_data, document_data::deleter> m_data{}; // NOLINT(readability-redundant-member-init)
|
||||
};
|
||||
|
||||
/// a parsed JSON text for json
|
||||
|
||||
Reference in New Issue
Block a user