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:
authorKosta <konstantin.baumann@autodesk.com>2014-09-04 19:29:52 +0400
committerKosta <konstantin.baumann@autodesk.com>2014-09-04 19:29:52 +0400
commite70494bc00a60e47be06cb625889b09fe63342ea (patch)
tree66a12aff7ad8c175ca3b212930a34917b36329db
parent4a71dc6d584ac90870906de9a477af24eb5e1bde (diff)
fix for `Reader::ParseString()` implementation plus some minor code cleanups and additions
-rw-r--r--example/capitalize/capitalize.cpp3
-rw-r--r--example/simplereader/simplereader.cpp7
-rw-r--r--include/rapidjson/prettywriter.h1
-rw-r--r--include/rapidjson/reader.h14
-rw-r--r--include/rapidjson/writer.h1
5 files changed, 14 insertions, 12 deletions
diff --git a/example/capitalize/capitalize.cpp b/example/capitalize/capitalize.cpp
index dd94d243..230bc28e 100644
--- a/example/capitalize/capitalize.cpp
+++ b/example/capitalize/capitalize.cpp
@@ -14,7 +14,7 @@
using namespace rapidjson;
template<typename OutputHandler>
-struct CapitalizeFilter {
+struct CapitalizeFilter : public BaseReaderHandler<UTF8<>, OutputHandler> {
CapitalizeFilter(OutputHandler& out) : out_(out), buffer_() {}
bool Null() { return out_.Null(); }
@@ -31,7 +31,6 @@ struct CapitalizeFilter {
return out_.String(&buffer_.front(), length, true); // true = output handler need to copy the string
}
bool StartObject() { return out_.StartObject(); }
- bool Key(const char* str, SizeType length, bool copy) { return String(str, length, copy); }
bool EndObject(SizeType memberCount) { return out_.EndObject(memberCount); }
bool StartArray() { return out_.StartArray(); }
bool EndArray(SizeType elementCount) { return out_.EndArray(elementCount); }
diff --git a/example/simplereader/simplereader.cpp b/example/simplereader/simplereader.cpp
index 83b3f1dc..b47d9b2b 100644
--- a/example/simplereader/simplereader.cpp
+++ b/example/simplereader/simplereader.cpp
@@ -4,7 +4,7 @@
using namespace rapidjson;
using namespace std;
-struct MyHandler {
+struct MyHandler : public BaseReaderHandler<UTF8<>, MyHandler> {
bool Null() { cout << "Null()" << endl; return true; }
bool Bool(bool b) { cout << "Bool(" << boolalpha << b << ")" << endl; return true; }
bool Int(int i) { cout << "Int(" << i << ")" << endl; return true; }
@@ -17,7 +17,10 @@ struct MyHandler {
return true;
}
bool StartObject() { cout << "StartObject()" << endl; return true; }
- bool Key(const char* str, SizeType length, bool copy) { return String(str, length, copy); }
+ bool Key(const char* str, SizeType length, bool copy) {
+ cout << "Key(" << str << ", " << length << ", " << boolalpha << copy << ")" << endl;
+ return true;
+ }
bool EndObject(SizeType memberCount) { cout << "EndObject(" << memberCount << ")" << endl; return true; }
bool StartArray() { cout << "StartArray()" << endl; return true; }
bool EndArray(SizeType elementCount) { cout << "EndArray(" << elementCount << ")" << endl; return true; }
diff --git a/include/rapidjson/prettywriter.h b/include/rapidjson/prettywriter.h
index 2fc9b757..4eac8d76 100644
--- a/include/rapidjson/prettywriter.h
+++ b/include/rapidjson/prettywriter.h
@@ -137,6 +137,7 @@ public:
//! Simpler but slower overload.
bool String(const Ch* str) { return String(str, internal::StrLen(str)); }
+ bool Key(const Ch* str) { return Key(str, internal::StrLen(str)); }
//@}
protected:
diff --git a/include/rapidjson/reader.h b/include/rapidjson/reader.h
index d93c8c26..e853bea4 100644
--- a/include/rapidjson/reader.h
+++ b/include/rapidjson/reader.h
@@ -623,27 +623,25 @@ private:
internal::StreamLocalCopy<InputStream> copy(is);
InputStream& s(copy.s);
- const typename TargetEncoding::Ch* str = NULL;
- SizeType len = 0;
-
+ bool success = false;
if (parseFlags & kParseInsituFlag) {
typename InputStream::Ch *head = s.PutBegin();
ParseStringToStream<parseFlags, SourceEncoding, SourceEncoding>(s, s);
RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;
size_t length = s.PutEnd(head) - 1;
RAPIDJSON_ASSERT(length <= 0xFFFFFFFF);
- str = (const typename TargetEncoding::Ch*)head;
- len = SizeType(length);
+ const typename TargetEncoding::Ch* const str = (const typename TargetEncoding::Ch*)head;
+ success = (isKey ? handler.Key(str, SizeType(length), false) : handler.String(str, SizeType(length), false));
}
else {
StackStream stackStream(stack_);
ParseStringToStream<parseFlags, SourceEncoding, TargetEncoding>(s, stackStream);
RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID;
- str = stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_);
- len = stackStream.length_ - 1;
+ const typename TargetEncoding::Ch* const str = stack_.template Pop<typename TargetEncoding::Ch>(stackStream.length_);
+ success = (isKey ? handler.Key(str, stackStream.length_ - 1, false) : handler.String(str, stackStream.length_ - 1, false));
}
- if(!(isKey ? handler.Key(str, len, false) : handler.String(str, len, false)))
+ if(!success)
RAPIDJSON_PARSE_ERROR(kParseErrorTermination, s.Tell());
}
diff --git a/include/rapidjson/writer.h b/include/rapidjson/writer.h
index 2f46b66d..fb6601ef 100644
--- a/include/rapidjson/writer.h
+++ b/include/rapidjson/writer.h
@@ -167,6 +167,7 @@ public:
//! Simpler but slower overload.
bool String(const Ch* str) { return String(str, internal::StrLen(str)); }
+ bool Key(const Ch* str) { return Key(str, internal::StrLen(str)); }
//@}