mirror of
https://github.com/matrix-construct/construct
synced 2025-02-18 09:40:12 +01:00
ircd::json: Add stringify vector of object::member.
This commit is contained in:
parent
9f256b9cb4
commit
fef1c0b1b8
2 changed files with 34 additions and 0 deletions
|
@ -110,7 +110,9 @@ struct ircd::json::object
|
|||
|
||||
// rewrite onto streams or buffers etc
|
||||
friend size_t serialized(const object &);
|
||||
friend size_t serialized(const member *const &, const member *const &);
|
||||
friend string_view stringify(mutable_buffer &, const object &);
|
||||
friend string_view stringify(mutable_buffer &, const member *const &, const member *const &);
|
||||
friend std::ostream &operator<<(std::ostream &, const object &);
|
||||
};
|
||||
|
||||
|
|
32
ircd/json.cc
32
ircd/json.cc
|
@ -1117,6 +1117,26 @@ ircd::json::stringify(mutable_buffer &buf,
|
|||
return { start, begin(buf) };
|
||||
}
|
||||
|
||||
ircd::string_view
|
||||
ircd::json::stringify(mutable_buffer &buf,
|
||||
const object::member *const &b,
|
||||
const object::member *const &e)
|
||||
{
|
||||
char *const start(begin(buf));
|
||||
static const auto stringify_member
|
||||
{
|
||||
[](mutable_buffer &buf, const object::member &member)
|
||||
{
|
||||
stringify(buf, member);
|
||||
}
|
||||
};
|
||||
|
||||
printer(buf, printer.object_begin);
|
||||
printer::list_protocol(buf, b, e, stringify_member);
|
||||
printer(buf, printer.object_end);
|
||||
return { start, begin(buf) };
|
||||
}
|
||||
|
||||
size_t
|
||||
ircd::json::serialized(const object &object)
|
||||
{
|
||||
|
@ -1130,6 +1150,18 @@ ircd::json::serialized(const object &object)
|
|||
});
|
||||
}
|
||||
|
||||
size_t
|
||||
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, []
|
||||
(auto ret, const object::member &member)
|
||||
{
|
||||
return ret += serialized(member) + 1;
|
||||
});
|
||||
}
|
||||
|
||||
ircd::json::object::const_iterator &
|
||||
ircd::json::object::const_iterator::operator++()
|
||||
try
|
||||
|
|
Loading…
Add table
Reference in a new issue