0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-02 18:18:56 +02:00

ircd::json::stack: Keep state for member append; null member if no append.

This commit is contained in:
Jason Volk 2019-01-07 13:56:47 -08:00
parent 7df8a8a20c
commit cf6fc070a7
2 changed files with 8 additions and 0 deletions

View file

@ -161,6 +161,7 @@ struct ircd::json::stack::member
string_view name; ///< member name state
object *co {nullptr}; ///< current child object
array *ca {nullptr}; ///< current child array
bool vc {false}; ///< value witnessed
void _pre_append();
void _post_append();

View file

@ -608,6 +608,7 @@ ircd::json::stack::object::object(member &pm)
assert(pm.ca == nullptr);
pm.co = this;
s->append("{"_sv);
pm.vc |= true;
}
ircd::json::stack::object::object(array &pa)
@ -705,6 +706,7 @@ ircd::json::stack::array::array(member &pm)
assert(pm.ca == nullptr);
pm.ca = this;
s->append("["_sv);
pm.vc |= true;
}
ircd::json::stack::array::array(array &pa)
@ -862,6 +864,9 @@ noexcept
s = nullptr;
}};
if(!vc)
s->append("null");
assert(co == nullptr);
assert(ca == nullptr);
assert(po);
@ -890,11 +895,13 @@ 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;
}
///////////////////////////////////////////////////////////////////////////////