Index: runtime/vm/json_stream.cc |
=================================================================== |
--- runtime/vm/json_stream.cc (revision 27342) |
+++ runtime/vm/json_stream.cc (working copy) |
@@ -9,9 +9,7 @@ |
namespace dart { |
-JSONStream::JSONStream(TextBuffer* buffer) { |
- ASSERT(buffer != NULL); |
- buffer_ = buffer; |
+JSONStream::JSONStream(intptr_t buf_size) : buffer_(buf_size) { |
open_objects_ = 0; |
arguments_ = NULL; |
num_arguments_ = 0; |
@@ -26,7 +24,7 @@ |
void JSONStream::Clear() { |
- buffer_->Clear(); |
+ buffer_.Clear(); |
open_objects_ = 0; |
} |
@@ -37,14 +35,14 @@ |
if (property_name != NULL) { |
PrintPropertyName(property_name); |
} |
- buffer_->AddChar('{'); |
+ buffer_.AddChar('{'); |
} |
void JSONStream::CloseObject() { |
ASSERT(open_objects_ > 0); |
open_objects_--; |
- buffer_->AddChar('}'); |
+ buffer_.AddChar('}'); |
} |
@@ -54,40 +52,40 @@ |
PrintPropertyName(property_name); |
} |
open_objects_++; |
- buffer_->AddChar('['); |
+ buffer_.AddChar('['); |
} |
void JSONStream::CloseArray() { |
ASSERT(open_objects_ > 0); |
open_objects_--; |
- buffer_->AddChar(']'); |
+ buffer_.AddChar(']'); |
} |
void JSONStream::PrintValueBool(bool b) { |
PrintCommaIfNeeded(); |
- buffer_->Printf("%s", b ? "true" : "false"); |
+ buffer_.Printf("%s", b ? "true" : "false"); |
} |
void JSONStream::PrintValue(intptr_t i) { |
PrintCommaIfNeeded(); |
- buffer_->Printf("%" Pd "", i); |
+ buffer_.Printf("%" Pd "", i); |
} |
void JSONStream::PrintValue(double d) { |
PrintCommaIfNeeded(); |
- buffer_->Printf("%f", d); |
+ buffer_.Printf("%f", d); |
} |
void JSONStream::PrintValue(const char* s) { |
PrintCommaIfNeeded(); |
- buffer_->AddChar('"'); |
- buffer_->AddEscapedString(s); |
- buffer_->AddChar('"'); |
+ buffer_.AddChar('"'); |
+ buffer_.AddEscapedString(s); |
+ buffer_.AddChar('"'); |
} |
@@ -103,9 +101,9 @@ |
intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
va_end(args); |
ASSERT(len == len2); |
- buffer_->AddChar('"'); |
- buffer_->AddEscapedString(p); |
- buffer_->AddChar('"'); |
+ buffer_.AddChar('"'); |
+ buffer_.AddEscapedString(p); |
+ buffer_.AddChar('"'); |
free(p); |
} |
@@ -151,9 +149,9 @@ |
intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
va_end(args); |
ASSERT(len == len2); |
- buffer_->AddChar('"'); |
- buffer_->AddEscapedString(p); |
- buffer_->AddChar('"'); |
+ buffer_.AddChar('"'); |
+ buffer_.AddEscapedString(p); |
+ buffer_.AddChar('"'); |
free(p); |
} |
@@ -182,29 +180,71 @@ |
void JSONStream::PrintPropertyName(const char* name) { |
ASSERT(name != NULL); |
PrintCommaIfNeeded(); |
- buffer_->AddChar('"'); |
- buffer_->AddEscapedString(name); |
- buffer_->AddChar('"'); |
- buffer_->AddChar(':'); |
+ buffer_.AddChar('"'); |
+ buffer_.AddEscapedString(name); |
+ buffer_.AddChar('"'); |
+ buffer_.AddChar(':'); |
} |
void JSONStream::PrintCommaIfNeeded() { |
if (NeedComma()) { |
- buffer_->AddChar(','); |
+ buffer_.AddChar(','); |
} |
} |
bool JSONStream::NeedComma() { |
- const char* buffer = buffer_->buf(); |
- intptr_t length = buffer_->length(); |
+ const char* buffer = buffer_.buf(); |
+ intptr_t length = buffer_.length(); |
if (length == 0) { |
return false; |
} |
char ch = buffer[length-1]; |
- return ch != '[' && ch != '{' && ch != ':' && ch != ','; |
+ return (ch != '[') && (ch != '{') && (ch != ':') && (ch != ','); |
} |
+ |
+JSONObject::JSONObject(const JSONArray& arr) : stream_(arr.stream_) { |
+ stream_->OpenObject(); |
+} |
+ |
+ |
+void JSONObject::AddPropertyF(const char* name, |
+ const char* format, ...) const { |
+ stream_->PrintPropertyName(name); |
+ va_list args; |
+ va_start(args, format); |
+ intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
+ va_end(args); |
+ char* p = reinterpret_cast<char*>(malloc(len+1)); |
+ va_start(args, format); |
+ intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
+ va_end(args); |
+ ASSERT(len == len2); |
+ stream_->buffer_.AddChar('"'); |
+ stream_->buffer_.AddEscapedString(p); |
+ stream_->buffer_.AddChar('"'); |
+ free(p); |
+} |
+ |
+ |
+void JSONArray::AddValueF(const char* format, ...) const { |
+ stream_->PrintCommaIfNeeded(); |
+ va_list args; |
+ va_start(args, format); |
+ intptr_t len = OS::VSNPrint(NULL, 0, format, args); |
+ va_end(args); |
+ char* p = reinterpret_cast<char*>(malloc(len+1)); |
+ va_start(args, format); |
+ intptr_t len2 = OS::VSNPrint(p, len+1, format, args); |
+ va_end(args); |
+ ASSERT(len == len2); |
+ stream_->buffer_.AddChar('"'); |
+ stream_->buffer_.AddEscapedString(p); |
+ stream_->buffer_.AddChar('"'); |
+ free(p); |
+} |
+ |
} // namespace dart |