mirror of
https://github.com/matrix-construct/construct
synced 2025-03-16 22:41:46 +01:00
ircd::json: Eliminate double-references; optimize ABI.
ircd::json: Inline trivial functions; value optimize.
This commit is contained in:
parent
45a3b8765f
commit
b0217fd371
9 changed files with 245 additions and 253 deletions
|
@ -19,12 +19,12 @@ namespace ircd::json
|
|||
bool operator!(const array &);
|
||||
size_t size(const array &);
|
||||
|
||||
size_t serialized(const string_view *const &begin, const string_view *const &end);
|
||||
size_t serialized(const std::string *const &begin, const std::string *const &end);
|
||||
size_t serialized(const string_view *begin, const string_view *end);
|
||||
size_t serialized(const std::string *begin, const std::string *end);
|
||||
size_t serialized(const array &);
|
||||
|
||||
string_view stringify(mutable_buffer &buf, const string_view *const &begin, const string_view *const &end);
|
||||
string_view stringify(mutable_buffer &buf, const std::string *const &begin, const std::string *const &end);
|
||||
string_view stringify(mutable_buffer &buf, const string_view *begin, const string_view *end);
|
||||
string_view stringify(mutable_buffer &buf, const std::string *begin, const std::string *end);
|
||||
string_view stringify(mutable_buffer &, const array &);
|
||||
std::ostream &operator<<(std::ostream &, const array &);
|
||||
}
|
||||
|
@ -62,8 +62,8 @@ struct ircd::json::array
|
|||
size_t size() const;
|
||||
|
||||
template<class T> T at(const size_t &i) const;
|
||||
string_view at(const size_t &i) const;
|
||||
string_view operator[](const size_t &i) const;
|
||||
string_view at(const size_t i) const;
|
||||
string_view operator[](const size_t i) const;
|
||||
|
||||
explicit operator std::string() const;
|
||||
|
||||
|
@ -109,3 +109,21 @@ const
|
|||
assert(sv.size() > 2 || sv.empty() || sv == empty_array || sv == empty_object);
|
||||
return sv.size() <= 2 || sv == literal_null;
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::size(const array &array)
|
||||
{
|
||||
return array.size();
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator!(const array &array)
|
||||
{
|
||||
return empty(array);
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::empty(const array &array)
|
||||
{
|
||||
return array.empty();
|
||||
}
|
||||
|
|
|
@ -22,13 +22,13 @@ namespace ircd::json
|
|||
bool operator<(const member &a, const member &b);
|
||||
bool operator<(const member &a, const string_view &b);
|
||||
|
||||
bool sorted(const member *const &begin, const member *const &end);
|
||||
bool sorted(const member *begin, const member *end);
|
||||
|
||||
size_t serialized(const member *const &begin, const member *const &end);
|
||||
size_t serialized(const member *begin, const member *end);
|
||||
size_t serialized(const members &);
|
||||
size_t serialized(const member &);
|
||||
|
||||
string_view stringify(mutable_buffer &, const member *const &begin, const member *const &end);
|
||||
string_view stringify(mutable_buffer &, const member *begin, const member *end);
|
||||
string_view stringify(mutable_buffer &, const members &);
|
||||
string_view stringify(mutable_buffer &, const member &);
|
||||
|
||||
|
@ -86,3 +86,65 @@ ircd::json::member::member(const string_view &k)
|
|||
k, value{}
|
||||
}
|
||||
{}
|
||||
|
||||
inline ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const members &list)
|
||||
{
|
||||
return stringify(buf, std::begin(list), std::end(list));
|
||||
}
|
||||
|
||||
inline ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const member &m)
|
||||
{
|
||||
return stringify(buf, &m, &m + 1);
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::serialized(const members &m)
|
||||
{
|
||||
return serialized(std::begin(m), std::end(m));
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::serialized(const member &member)
|
||||
{
|
||||
return serialized(member.first) + 1 + serialized(member.second);
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator<(const member &a, const member &b)
|
||||
{
|
||||
return a.first < b.first;
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator!=(const member &a, const member &b)
|
||||
{
|
||||
return a.first != b.first;
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator==(const member &a, const member &b)
|
||||
{
|
||||
return a.first == b.first;
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator<(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} < b;
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator!=(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} != b;
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator==(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} == b;
|
||||
}
|
||||
|
|
|
@ -257,6 +257,13 @@ catch(const bad_lex_cast &e)
|
|||
return def;
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::object::size()
|
||||
const
|
||||
{
|
||||
return count();
|
||||
}
|
||||
|
||||
inline ircd::json::object::const_iterator
|
||||
ircd::json::object::end()
|
||||
const
|
||||
|
@ -272,3 +279,21 @@ const
|
|||
assert(sv.size() > 2 || (sv.empty() || sv == empty_object));
|
||||
return sv.size() <= 2 || sv == literal_null;
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::size(const object &object)
|
||||
{
|
||||
return object.size();
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator!(const object &object)
|
||||
{
|
||||
return empty(object);
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::empty(const object &object)
|
||||
{
|
||||
return object.empty();
|
||||
}
|
||||
|
|
|
@ -20,10 +20,10 @@ namespace ircd::json
|
|||
bool operator<(const object::member &, const object::member &);
|
||||
bool operator>(const object::member &, const object::member &);
|
||||
|
||||
bool sorted(const object::member *const &, const object::member *const &);
|
||||
size_t serialized(const object::member *const &, const object::member *const &);
|
||||
bool sorted(const object::member *, const object::member *);
|
||||
size_t serialized(const object::member *, const object::member *);
|
||||
size_t serialized(const object::member &);
|
||||
string_view stringify(mutable_buffer &, const object::member *const &, const object::member *const &);
|
||||
string_view stringify(mutable_buffer &, const object::member *, const object::member *);
|
||||
string_view stringify(mutable_buffer &, const object::member &);
|
||||
std::ostream &operator<<(std::ostream &, const object::member &);
|
||||
}
|
||||
|
|
|
@ -316,6 +316,18 @@ ircd::json::stack::member::append(const json::tuple<T...> &t)
|
|||
});
|
||||
}
|
||||
|
||||
inline void
|
||||
ircd::json::stack::member::_pre_append()
|
||||
{
|
||||
assert(!vc);
|
||||
}
|
||||
|
||||
inline void
|
||||
ircd::json::stack::member::_post_append()
|
||||
{
|
||||
vc |= true;
|
||||
}
|
||||
|
||||
template<class... T>
|
||||
void
|
||||
ircd::json::stack::array::append(const json::tuple<T...> &t)
|
||||
|
@ -332,6 +344,12 @@ ircd::json::stack::array::append(const json::tuple<T...> &t)
|
|||
});
|
||||
}
|
||||
|
||||
inline void
|
||||
ircd::json::stack::array::_post_append()
|
||||
{
|
||||
++vc;
|
||||
}
|
||||
|
||||
template<class... T>
|
||||
void
|
||||
ircd::json::stack::object::append(const json::tuple<T...> &t)
|
||||
|
|
|
@ -65,3 +65,17 @@ ircd::json::strung::strung(T&&... t)
|
|||
})
|
||||
}
|
||||
{}
|
||||
|
||||
inline ircd::json::strung::operator
|
||||
json::array()
|
||||
const
|
||||
{
|
||||
return string_view{*this};
|
||||
}
|
||||
|
||||
inline ircd::json::strung::operator
|
||||
json::object()
|
||||
const
|
||||
{
|
||||
return string_view{*this};
|
||||
}
|
||||
|
|
|
@ -22,11 +22,11 @@ namespace ircd::json
|
|||
|
||||
size_t serialized(const bool &);
|
||||
size_t serialized(const value &);
|
||||
size_t serialized(const value *const &begin, const value *const &end);
|
||||
size_t serialized(const value *begin, const value *end);
|
||||
size_t serialized(const values &);
|
||||
|
||||
string_view stringify(mutable_buffer &, const value &);
|
||||
string_view stringify(mutable_buffer &, const value *const &begin, const value *const &end);
|
||||
string_view stringify(mutable_buffer &, const value *begin, const value *end);
|
||||
std::ostream &operator<<(std::ostream &, const value &);
|
||||
|
||||
bool operator==(const value &a, const value &b);
|
||||
|
@ -366,6 +366,18 @@ ircd::json::operator!=(const value &a, const value &b)
|
|||
return !operator==(a, b);
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::serialized(const bool &b)
|
||||
{
|
||||
constexpr const size_t tf[2]
|
||||
{
|
||||
_constexpr_strlen("false"),
|
||||
_constexpr_strlen("true"),
|
||||
};
|
||||
|
||||
return tf[b];
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::defined(const value &a)
|
||||
{
|
||||
|
|
|
@ -47,8 +47,8 @@ struct ircd::json::vector
|
|||
const_iterator begin() const;
|
||||
|
||||
const_iterator find(size_t i) const;
|
||||
value_type at(const size_t &i) const;
|
||||
value_type operator[](const size_t &i) const;
|
||||
value_type at(const size_t i) const;
|
||||
value_type operator[](const size_t i) const;
|
||||
|
||||
bool empty() const;
|
||||
operator bool() const;
|
||||
|
@ -60,9 +60,49 @@ struct ircd::json::vector
|
|||
|
||||
#include "vector_iterator.h"
|
||||
|
||||
inline size_t
|
||||
ircd::json::vector::size()
|
||||
const
|
||||
{
|
||||
return count();
|
||||
}
|
||||
|
||||
inline ircd::json::vector::operator
|
||||
bool()
|
||||
const
|
||||
{
|
||||
return !empty();
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::vector::empty()
|
||||
const
|
||||
{
|
||||
const string_view &sv{*this};
|
||||
return sv.empty();
|
||||
}
|
||||
|
||||
inline ircd::json::vector::const_iterator
|
||||
ircd::json::vector::end()
|
||||
const
|
||||
{
|
||||
return { string_view::end(), string_view::end() };
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::operator!(const vector &v)
|
||||
{
|
||||
return v.empty();
|
||||
}
|
||||
|
||||
inline size_t
|
||||
ircd::json::size(const vector &v)
|
||||
{
|
||||
return v.size();
|
||||
}
|
||||
|
||||
inline bool
|
||||
ircd::json::empty(const vector &v)
|
||||
{
|
||||
return v.empty();
|
||||
}
|
||||
|
|
277
ircd/json.cc
277
ircd/json.cc
|
@ -1675,12 +1675,6 @@ ircd::json::stack::array::_pre_append()
|
|||
s->rethrow_exception();
|
||||
}
|
||||
|
||||
void
|
||||
ircd::json::stack::array::_post_append()
|
||||
{
|
||||
++vc;
|
||||
}
|
||||
|
||||
//
|
||||
// member
|
||||
//
|
||||
|
@ -1848,18 +1842,6 @@ ircd::json::stack::member::append(const json::value &value)
|
|||
});
|
||||
}
|
||||
|
||||
void
|
||||
ircd::json::stack::member::_pre_append()
|
||||
{
|
||||
assert(!vc);
|
||||
}
|
||||
|
||||
void
|
||||
ircd::json::stack::member::_post_append()
|
||||
{
|
||||
vc |= true;
|
||||
}
|
||||
|
||||
//
|
||||
// stack::checkpoint
|
||||
//
|
||||
|
@ -2395,59 +2377,11 @@ ircd::json::iov::defaults::defaults(iov &iov,
|
|||
{
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// json/strung.h
|
||||
//
|
||||
|
||||
ircd::json::strung::operator
|
||||
json::array()
|
||||
const
|
||||
{
|
||||
return string_view{*this};
|
||||
}
|
||||
|
||||
ircd::json::strung::operator
|
||||
json::object()
|
||||
const
|
||||
{
|
||||
return string_view{*this};
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// json/vector.h
|
||||
//
|
||||
|
||||
bool
|
||||
ircd::json::operator!(const vector &v)
|
||||
{
|
||||
return v.empty();
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::size(const vector &v)
|
||||
{
|
||||
return v.size();
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::empty(const vector &v)
|
||||
{
|
||||
return v.empty();
|
||||
}
|
||||
|
||||
//
|
||||
// vector::vector
|
||||
//
|
||||
|
||||
size_t
|
||||
ircd::json::vector::size()
|
||||
const
|
||||
{
|
||||
return count();
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::vector::count()
|
||||
const
|
||||
|
@ -2455,39 +2389,22 @@ const
|
|||
return std::distance(begin(), end());
|
||||
}
|
||||
|
||||
ircd::json::vector::operator
|
||||
bool()
|
||||
const
|
||||
{
|
||||
return !empty();
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::vector::empty()
|
||||
const
|
||||
{
|
||||
const string_view &sv
|
||||
{
|
||||
*static_cast<const string_view *>(this)
|
||||
};
|
||||
|
||||
return sv.empty();
|
||||
}
|
||||
|
||||
ircd::json::vector::value_type
|
||||
ircd::json::vector::operator[](const size_t &i)
|
||||
ircd::json::vector::operator[](const size_t i)
|
||||
const
|
||||
{
|
||||
const auto it(find(i));
|
||||
return it != end()? *it : object{};
|
||||
return it != end()?
|
||||
*it:
|
||||
object{};
|
||||
}
|
||||
|
||||
ircd::json::vector::value_type
|
||||
ircd::json::vector::at(const size_t &i)
|
||||
ircd::json::vector::at(const size_t i)
|
||||
const
|
||||
{
|
||||
const auto it(find(i));
|
||||
if(it == end())
|
||||
if(unlikely(it == end()))
|
||||
throw not_found
|
||||
{
|
||||
"indice %zu", i
|
||||
|
@ -2640,24 +2557,6 @@ ircd::json::sorted(const object &object)
|
|||
return true;
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::size(const object &object)
|
||||
{
|
||||
return object.size();
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator!(const object &object)
|
||||
{
|
||||
return empty(object);
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::empty(const object &object)
|
||||
{
|
||||
return object.empty();
|
||||
}
|
||||
|
||||
//
|
||||
// object
|
||||
//
|
||||
|
@ -2681,7 +2580,14 @@ ircd::json::object::get(const string_view &key,
|
|||
const string_view &def)
|
||||
const
|
||||
{
|
||||
return get<string_view>(key, def);
|
||||
const auto it
|
||||
{
|
||||
find(key)
|
||||
};
|
||||
|
||||
return it != end()?
|
||||
it->second:
|
||||
def;
|
||||
}
|
||||
|
||||
ircd::json::object::operator std::string()
|
||||
|
@ -2712,13 +2618,6 @@ const
|
|||
return find(key) != end();
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::object::size()
|
||||
const
|
||||
{
|
||||
return count();
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::object::count()
|
||||
const
|
||||
|
@ -2887,8 +2786,8 @@ ircd::json::serialized(const object::member &member)
|
|||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const object::member *const &b,
|
||||
const object::member *const &e)
|
||||
const object::member *const b,
|
||||
const object::member *const e)
|
||||
{
|
||||
const size_t mc(object_member_arrays_ctr);
|
||||
assert(mc < object_member_arrays.size());
|
||||
|
@ -2935,8 +2834,8 @@ ircd::json::_stringify(mutable_buffer &buf,
|
|||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const object::member *const &begin,
|
||||
const object::member *const &end)
|
||||
ircd::json::serialized(const object::member *const begin,
|
||||
const object::member *const end)
|
||||
{
|
||||
const size_t ret(1 + (begin == end));
|
||||
return std::accumulate(begin, end, ret, []
|
||||
|
@ -2947,8 +2846,8 @@ ircd::json::serialized(const object::member *const &begin,
|
|||
}
|
||||
|
||||
bool
|
||||
ircd::json::sorted(const object::member *const &begin,
|
||||
const object::member *const &end)
|
||||
ircd::json::sorted(const object::member *const begin,
|
||||
const object::member *const end)
|
||||
{
|
||||
return std::is_sorted(begin, end, []
|
||||
(const object::member &a, const object::member &b)
|
||||
|
@ -2992,52 +2891,34 @@ ircd::json::serialized(const array &v)
|
|||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const std::string *const &b,
|
||||
const std::string *const &e)
|
||||
const std::string *const b,
|
||||
const std::string *const e)
|
||||
{
|
||||
return array::stringify(buf, b, e);
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const std::string *const &b,
|
||||
const std::string *const &e)
|
||||
ircd::json::serialized(const std::string *const b,
|
||||
const std::string *const e)
|
||||
{
|
||||
return array::serialized(b, e);
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const string_view *const &b,
|
||||
const string_view *const &e)
|
||||
const string_view *const b,
|
||||
const string_view *const e)
|
||||
{
|
||||
return array::stringify(buf, b, e);
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const string_view *const &b,
|
||||
const string_view *const &e)
|
||||
ircd::json::serialized(const string_view *const b,
|
||||
const string_view *const e)
|
||||
{
|
||||
return array::serialized(b, e);
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::size(const array &array)
|
||||
{
|
||||
return array.size();
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator!(const array &array)
|
||||
{
|
||||
return empty(array);
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::empty(const array &array)
|
||||
{
|
||||
return array.empty();
|
||||
}
|
||||
|
||||
//
|
||||
// array::array
|
||||
//
|
||||
|
@ -3132,7 +3013,7 @@ const
|
|||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::array::operator[](const size_t &i)
|
||||
ircd::json::array::operator[](const size_t i)
|
||||
const
|
||||
{
|
||||
const auto it(find(i));
|
||||
|
@ -3140,7 +3021,7 @@ const
|
|||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::array::at(const size_t &i)
|
||||
ircd::json::array::at(const size_t i)
|
||||
const
|
||||
{
|
||||
const auto it(find(i));
|
||||
|
@ -3216,20 +3097,6 @@ ircd::json::array::const_iterator::operator++()
|
|||
// json/member.h
|
||||
//
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const members &list)
|
||||
{
|
||||
return stringify(buf, std::begin(list), std::end(list));
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const member &m)
|
||||
{
|
||||
return stringify(buf, &m, &m + 1);
|
||||
}
|
||||
|
||||
namespace ircd::json
|
||||
{
|
||||
using member_array = std::array<const member *, object::max_sorted_members>;
|
||||
|
@ -3242,8 +3109,8 @@ namespace ircd::json
|
|||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const member *const &b,
|
||||
const member *const &e)
|
||||
const member *const b,
|
||||
const member *const e)
|
||||
{
|
||||
static const auto less_member
|
||||
{
|
||||
|
@ -3300,14 +3167,8 @@ ircd::json::stringify(mutable_buffer &buf,
|
|||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const members &m)
|
||||
{
|
||||
return serialized(std::begin(m), std::end(m));
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const member *const &begin,
|
||||
const member *const &end)
|
||||
ircd::json::serialized(const member *const begin,
|
||||
const member *const end)
|
||||
{
|
||||
const size_t ret(1 + (begin == end));
|
||||
return std::accumulate(begin, end, ret, []
|
||||
|
@ -3317,15 +3178,9 @@ ircd::json::serialized(const member *const &begin,
|
|||
});
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const member &member)
|
||||
{
|
||||
return serialized(member.first) + 1 + serialized(member.second);
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::sorted(const member *const &begin,
|
||||
const member *const &end)
|
||||
ircd::json::sorted(const member *const begin,
|
||||
const member *const end)
|
||||
{
|
||||
return std::is_sorted(begin, end, []
|
||||
(const member &a, const member &b)
|
||||
|
@ -3334,42 +3189,6 @@ ircd::json::sorted(const member *const &begin,
|
|||
});
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator<(const member &a, const member &b)
|
||||
{
|
||||
return a.first < b.first;
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator!=(const member &a, const member &b)
|
||||
{
|
||||
return a.first != b.first;
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator==(const member &a, const member &b)
|
||||
{
|
||||
return a.first == b.first;
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator<(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} < b;
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator!=(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} != b;
|
||||
}
|
||||
|
||||
bool
|
||||
ircd::json::operator==(const member &a, const string_view &b)
|
||||
{
|
||||
return string_view{a.first.string, a.first.len} == b;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// json/string.h
|
||||
|
@ -4124,8 +3943,8 @@ ircd::json::operator<<(std::ostream &s, const value &v)
|
|||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const value *const &b,
|
||||
const value *const &e)
|
||||
const value *const b,
|
||||
const value *const e)
|
||||
{
|
||||
static const auto print_value
|
||||
{
|
||||
|
@ -4249,8 +4068,8 @@ ircd::json::serialized(const values &v)
|
|||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const value *const &begin,
|
||||
const value *const &end)
|
||||
ircd::json::serialized(const value *const begin,
|
||||
const value *const end)
|
||||
{
|
||||
// One opening '[' and either one ']' or comma count.
|
||||
const size_t ret(1 + (begin == end));
|
||||
|
@ -4320,22 +4139,6 @@ ircd::json::serialized(const value &v)
|
|||
};
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const bool &b)
|
||||
{
|
||||
static constexpr const size_t t
|
||||
{
|
||||
_constexpr_strlen("true")
|
||||
};
|
||||
|
||||
static constexpr const size_t f
|
||||
{
|
||||
_constexpr_strlen("false")
|
||||
};
|
||||
|
||||
return b? t : f;
|
||||
}
|
||||
|
||||
//
|
||||
// value::value
|
||||
//
|
||||
|
|
Loading…
Add table
Reference in a new issue