diff --git a/include/ircd/json/iov.h b/include/ircd/json/iov.h index 9077450cd..7c36ebfcd 100644 --- a/include/ircd/json/iov.h +++ b/include/ircd/json/iov.h @@ -51,7 +51,7 @@ struct ircd::json::iov IRCD_EXCEPTION(error, exists); IRCD_EXCEPTION(error, oversize); - static const size_t MAX_SIZE; + static const size_t max_size; public: bool has(const string_view &key) const; diff --git a/include/ircd/json/object.h b/include/ircd/json/object.h index e183c6019..bf9cf73dd 100644 --- a/include/ircd/json/object.h +++ b/include/ircd/json/object.h @@ -71,6 +71,7 @@ struct ircd::json::object using key_compare = std::less; static const uint max_recursion_depth; + static const size_t max_sorted_members; // fundamental const_iterator end() const; diff --git a/include/ircd/json/value.h b/include/ircd/json/value.h index 88a2a55fc..17265d2b9 100644 --- a/include/ircd/json/value.h +++ b/include/ircd/json/value.h @@ -56,6 +56,8 @@ namespace ircd::json /// struct ircd::json::value { + static const size_t max_string_size; + union { int64_t integer; diff --git a/ircd/json.cc b/ircd/json.cc index 84a9ea2cc..9a78aad29 100644 --- a/ircd/json.cc +++ b/ircd/json.cc @@ -1253,8 +1253,8 @@ ircd::json::_prev(chase &c) // iov.h // -decltype(ircd::json::iov::MAX_SIZE) -ircd::json::iov::MAX_SIZE +decltype(ircd::json::iov::max_size) +ircd::json::iov::max_size { 1024 }; @@ -1271,11 +1271,13 @@ ircd::json::stringify(mutable_buffer &buf, const iov &iov) { const ctx::critical_assertion ca; - thread_local const member *m[iov.MAX_SIZE]; - if(unlikely(size_t(iov.size()) > iov.MAX_SIZE)) + thread_local const member *m[iov.max_size]; + if(unlikely(size_t(iov.size()) > iov.max_size)) throw iov::oversize { - "IOV has %zd members but maximum is %zu", iov.size(), iov.MAX_SIZE + "IOV has %zd members but maximum is %zu", + iov.size(), + iov.max_size }; std::transform(std::begin(iov), std::end(iov), m, [] @@ -1561,7 +1563,7 @@ ircd::json::insert(const strung &s, }; size_t mctr {0}; - thread_local std::array mb; + thread_local std::array mb; for(const object::member &m : object{s}) mb.at(mctr++) = member{m}; @@ -1588,7 +1590,7 @@ ircd::json::remove(const strung &s, }; size_t mctr {0}; - thread_local std::array mb; + thread_local std::array mb; for(const object::member &m : object{s}) if(m.first != key) mb.at(mctr++) = m; @@ -1615,7 +1617,7 @@ ircd::json::remove(const strung &s, }; size_t mctr{0}, i{0}; - thread_local std::array mb; + thread_local std::array mb; for(const string_view &m : array{s}) if(i++ != idx) mb.at(mctr++) = m; @@ -1707,11 +1709,17 @@ const // decltype(ircd::json::object::max_recursion_depth) -const ircd::json::object::max_recursion_depth +ircd::json::object::max_recursion_depth { 32 }; +decltype(ircd::json::object::max_sorted_members) +ircd::json::object::max_sorted_members +{ + iov::max_size +}; + std::ostream & ircd::json::operator<<(std::ostream &s, const object::member &member) { @@ -1754,7 +1762,7 @@ ircd::json::stringify(mutable_buffer &buf, const object &object) try { - using member_array = std::array; + using member_array = std::array; using member_arrays = std::array; static_assert(sizeof(member_arrays) == 1_MiB); // yay reentrance .. joy :/ @@ -2165,7 +2173,7 @@ ircd::json::stringify(mutable_buffer &buf, const member *const &e) try { - using member_array = std::array; + using member_array = std::array; using member_arrays = std::array; static_assert(sizeof(member_arrays) == 256_KiB); @@ -2277,6 +2285,12 @@ static_assert ircd::json::undefined_number != 0 ); +decltype(ircd::json::value::max_string_size) +ircd::json::value::max_string_size +{ + 64_KiB +}; + std::ostream & ircd::json::operator<<(std::ostream &s, const value &v) { @@ -2492,7 +2506,10 @@ ircd::json::serialized(const value &v) } }; - throw type_error("deciding the size of a type[%u] is undefined", int(v.type)); + throw type_error + { + "deciding the size of a type[%u] is undefined", int(v.type) + }; } size_t