static void write_object(Writer<StringBuffer>& writer, object_t* object) { switch (object->type) { case type_nil: writer.Null(); break; case type_bool: writer.Bool(object->b); break; case type_double: writer.Double(object->d); break; case type_int: writer.Int64(object->i); break; case type_uint: writer.Uint64(object->u); break; case type_str: writer.String(object->str, object->l); break; case type_array: writer.StartArray(); for (size_t i = 0; i < object->l; ++i) write_object(writer, object->children + i); writer.EndArray(); break; case type_map: writer.StartObject(); for (size_t i = 0; i < object->l; ++i) { writer.Key(object->children[i * 2].str, object->children[i * 2].l); write_object(writer, object->children + i * 2 + 1); } writer.EndObject(); break; default: assert(0); break; } }
void operator()(Writer& w, utility::int64_t i) const { w.Int64(i); }
void stringify(Writer& writer, int64_t v) { writer.Int64(v); }