| Index: runtime/vm/json_stream.h
|
| ===================================================================
|
| --- runtime/vm/json_stream.h (revision 27342)
|
| +++ runtime/vm/json_stream.h (working copy)
|
| @@ -6,16 +6,38 @@
|
| #define VM_JSON_STREAM_H_
|
|
|
| #include "platform/json.h"
|
| +#include "vm/allocation.h"
|
|
|
| namespace dart {
|
|
|
| class Object;
|
| +class JSONObject;
|
| +class JSONArray;
|
|
|
| class JSONStream : ValueObject {
|
| public:
|
| - explicit JSONStream(TextBuffer* buffer);
|
| + explicit JSONStream(intptr_t buf_size = 256);
|
| ~JSONStream();
|
|
|
| + const char* ToCString() { return buffer_.buf(); }
|
| +
|
| + void SetArguments(const char** arguments, intptr_t num_arguments);
|
| + void SetOptions(const char** option_keys, const char** option_values,
|
| + intptr_t num_options);
|
| +
|
| + intptr_t num_arguments() const { return num_arguments_; }
|
| + const char* GetArgument(intptr_t i) const {
|
| + return arguments_[i];
|
| + }
|
| + intptr_t num_options() const { return num_options_; }
|
| + const char* GetOptionKey(intptr_t i) const {
|
| + return option_keys_[i];
|
| + }
|
| + const char* GetOptionValue(intptr_t i) const {
|
| + return option_values_[i];
|
| + }
|
| +
|
| + private:
|
| void Clear();
|
|
|
| void OpenObject(const char* property_name = NULL);
|
| @@ -36,38 +58,94 @@
|
| void PrintProperty(const char* name, double d);
|
| void PrintProperty(const char* name, const char* s);
|
| void PrintfProperty(const char* name, const char* format, ...)
|
| - PRINTF_ATTRIBUTE(3, 4);
|
| + PRINTF_ATTRIBUTE(3, 4);
|
| void PrintProperty(const char* name, const Object& o, bool ref = true);
|
|
|
| - void SetArguments(const char** arguments, intptr_t num_arguments);
|
| - void SetOptions(const char** option_keys, const char** option_values,
|
| - intptr_t num_options);
|
| -
|
| - intptr_t num_arguments() const { return num_arguments_; }
|
| - const char* GetArgument(intptr_t i) const {
|
| - return arguments_[i];
|
| - }
|
| - intptr_t num_options() const { return num_options_; }
|
| - const char* GetOptionKey(intptr_t i) const {
|
| - return option_keys_[i];
|
| - }
|
| - const char* GetOptionValue(intptr_t i) const {
|
| - return option_values_[i];
|
| - }
|
| -
|
| - private:
|
| void PrintPropertyName(const char* name);
|
| void PrintCommaIfNeeded();
|
| bool NeedComma();
|
| +
|
| + intptr_t nesting_level() const { return open_objects_; }
|
| +
|
| intptr_t open_objects_;
|
| - TextBuffer* buffer_;
|
| + TextBuffer buffer_;
|
| const char** arguments_;
|
| intptr_t num_arguments_;
|
| const char** option_keys_;
|
| const char** option_values_;
|
| intptr_t num_options_;
|
| +
|
| + friend class JSONObject;
|
| + friend class JSONArray;
|
| };
|
|
|
| +
|
| +class JSONObject : public ValueObject {
|
| + public:
|
| + explicit JSONObject(JSONStream* stream) : stream_(stream) {
|
| + stream_->OpenObject();
|
| + }
|
| + JSONObject(const JSONObject& obj, const char* name) : stream_(obj.stream_) {
|
| + stream_->OpenObject(name);
|
| + }
|
| + explicit JSONObject(const JSONArray& arr);
|
| +
|
| + ~JSONObject() {
|
| + stream_->CloseObject();
|
| + }
|
| +
|
| + void AddProperty(const char* name, bool b) const {
|
| + stream_->PrintPropertyBool(name, b);
|
| + }
|
| + void AddProperty(const char* name, intptr_t i) const {
|
| + stream_->PrintProperty(name, i);
|
| + }
|
| + void AddProperty(const char* name, double d) const {
|
| + stream_->PrintProperty(name, d);
|
| + }
|
| + void AddProperty(const char* name, const Object& obj, bool ref = true) const {
|
| + stream_->PrintProperty(name, obj, ref);
|
| + }
|
| + void AddPropertyF(const char* name, const char* format, ...) const
|
| + PRINTF_ATTRIBUTE(3, 4);
|
| +
|
| + private:
|
| + JSONStream* stream_;
|
| +
|
| + friend class JSONArray;
|
| +};
|
| +
|
| +
|
| +class JSONArray : public ValueObject {
|
| + public:
|
| + explicit JSONArray(JSONStream* stream) : stream_(stream) {
|
| + stream_->OpenArray();
|
| + }
|
| + JSONArray(const JSONObject& obj, const char* name) : stream_(obj.stream_) {
|
| + stream_->OpenArray(name);
|
| + }
|
| + JSONArray(const JSONArray& arr) : stream_(arr.stream_) {
|
| + stream_->OpenArray();
|
| + }
|
| + ~JSONArray() {
|
| + stream_->CloseArray();
|
| + }
|
| +
|
| + void AddValue(bool b) const { stream_->PrintValueBool(b); }
|
| + void AddValue(intptr_t i) const { stream_->PrintValue(i); }
|
| + void AddValue(double d) const { stream_->PrintValue(d); }
|
| + void AddValue(const char* s) const { stream_->PrintValue(s); }
|
| + void AddValue(const Object& obj, bool ref = true) const {
|
| + stream_->PrintValue(obj, ref);
|
| + }
|
| + void AddValueF(const char* format, ...) const PRINTF_ATTRIBUTE(2, 3);
|
| +
|
| + private:
|
| + JSONStream* stream_;
|
| +
|
| + friend class JSONObject;
|
| +};
|
| +
|
| } // namespace dart
|
|
|
| #endif // VM_JSON_STREAM_H_
|
|
|