Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/miloyip/rapidjson.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilo Yip <miloyip@gmail.com>2016-07-21 04:33:00 +0300
committerMilo Yip <miloyip@gmail.com>2016-07-21 04:33:00 +0300
commitdb6a6f3f64897eb009f8635535f1bc6212265825 (patch)
treec57bd1aae672d61fc94ffa3ec5303b5b56c61bd1
parent369de87e5d7da05786731a712f25ab9b46c4b0ce (diff)
Add Flush() for all value types
Fixes #684
-rw-r--r--include/rapidjson/writer.h37
1 files changed, 19 insertions, 18 deletions
diff --git a/include/rapidjson/writer.h b/include/rapidjson/writer.h
index 7d0610eb..112d767e 100644
--- a/include/rapidjson/writer.h
+++ b/include/rapidjson/writer.h
@@ -169,30 +169,30 @@ public:
*/
//@{
- bool Null() { Prefix(kNullType); return WriteNull(); }
- bool Bool(bool b) { Prefix(b ? kTrueType : kFalseType); return WriteBool(b); }
- bool Int(int i) { Prefix(kNumberType); return WriteInt(i); }
- bool Uint(unsigned u) { Prefix(kNumberType); return WriteUint(u); }
- bool Int64(int64_t i64) { Prefix(kNumberType); return WriteInt64(i64); }
- bool Uint64(uint64_t u64) { Prefix(kNumberType); return WriteUint64(u64); }
+ bool Null() { Prefix(kNullType); return EndValue(WriteNull()); }
+ bool Bool(bool b) { Prefix(b ? kTrueType : kFalseType); return EndValue(WriteBool(b)); }
+ bool Int(int i) { Prefix(kNumberType); return EndValue(WriteInt(i)); }
+ bool Uint(unsigned u) { Prefix(kNumberType); return EndValue(WriteUint(u)); }
+ bool Int64(int64_t i64) { Prefix(kNumberType); return EndValue(WriteInt64(i64)); }
+ bool Uint64(uint64_t u64) { Prefix(kNumberType); return EndValue(WriteUint64(u64)); }
//! Writes the given \c double value to the stream
/*!
\param d The value to be written.
\return Whether it is succeed.
*/
- bool Double(double d) { Prefix(kNumberType); return WriteDouble(d); }
+ bool Double(double d) { Prefix(kNumberType); return EndValue(WriteDouble(d)); }
bool RawNumber(const Ch* str, SizeType length, bool copy = false) {
(void)copy;
Prefix(kNumberType);
- return WriteString(str, length);
+ return EndValue(WriteString(str, length));
}
bool String(const Ch* str, SizeType length, bool copy = false) {
(void)copy;
Prefix(kStringType);
- return WriteString(str, length);
+ return EndValue(WriteString(str, length));
}
#if RAPIDJSON_HAS_STDSTRING
@@ -214,10 +214,7 @@ public:
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray);
level_stack_.template Pop<Level>(1);
- bool ret = WriteEndObject();
- if (RAPIDJSON_UNLIKELY(level_stack_.Empty())) // end of json text
- os_->Flush();
- return ret;
+ return EndValue(WriteEndObject());
}
bool StartArray() {
@@ -231,10 +228,7 @@ public:
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
RAPIDJSON_ASSERT(level_stack_.template Top<Level>()->inArray);
level_stack_.template Pop<Level>(1);
- bool ret = WriteEndArray();
- if (RAPIDJSON_UNLIKELY(level_stack_.Empty())) // end of json text
- os_->Flush();
- return ret;
+ return EndValue(WriteEndArray());
}
//@}
@@ -255,7 +249,7 @@ public:
\param length Length of the json.
\param type Type of the root of json.
*/
- bool RawValue(const Ch* json, size_t length, Type type) { Prefix(type); return WriteRawValue(json, length); }
+ bool RawValue(const Ch* json, size_t length, Type type) { Prefix(type); return EndValue(WriteRawValue(json, length)); }
protected:
//! Information for each nested level
@@ -460,6 +454,13 @@ protected:
}
}
+ // Flush the value if it is the top level one.
+ bool EndValue(bool ret) {
+ if (RAPIDJSON_UNLIKELY(level_stack_.Empty())) // end of json text
+ os_->Flush();
+ return ret;
+ }
+
OutputStream* os_;
internal::Stack<StackAllocator> level_stack_;
int maxDecimalPlaces_;