0
0
Fork 0
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:
Jason Volk 2018-03-20 23:39:30 -07:00
parent 9f256b9cb4
commit fef1c0b1b8
2 changed files with 34 additions and 0 deletions

View file

@ -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 &);
};

View file

@ -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