diff --git a/example/capitalize/capitalize.cpp b/example/capitalize/capitalize.cpp index 230bc28..dd94d24 100644 --- a/example/capitalize/capitalize.cpp +++ b/example/capitalize/capitalize.cpp @@ -14,7 +14,7 @@ using namespace rapidjson; template -struct CapitalizeFilter : public BaseReaderHandler, OutputHandler> { +struct CapitalizeFilter { CapitalizeFilter(OutputHandler& out) : out_(out), buffer_() {} bool Null() { return out_.Null(); } @@ -31,6 +31,7 @@ struct CapitalizeFilter : public BaseReaderHandler, OutputHandler> { 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/include/rapidjson/reader.h b/include/rapidjson/reader.h index 885fe22..f41ba2f 100644 --- a/include/rapidjson/reader.h +++ b/include/rapidjson/reader.h @@ -630,20 +630,17 @@ private: RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID; size_t length = s.PutEnd(head) - 1; RAPIDJSON_ASSERT(length <= 0xFFFFFFFF); - const typename TargetEncoding::Ch* const str = (const typename TargetEncoding::Ch*)head; + const typename TargetEncoding::Ch* const str = (typename TargetEncoding::Ch*)head; success = (isKey ? handler.Key(str, SizeType(length), false) : handler.String(str, SizeType(length), false)); } else { StackStream stackStream(stack_); ParseStringToStream(s, stackStream); RAPIDJSON_PARSE_ERROR_EARLY_RETURN_VOID; - success = (isKey - ? handler.Key( stack_.template Pop(stackStream.length_), stackStream.length_ - 1, false) - : handler.String(stack_.template Pop(stackStream.length_), stackStream.length_ - 1, false) - ); + const typename TargetEncoding::Ch* const str = stack_.template Pop(stackStream.length_); + success = (isKey ? handler.Key(str, stackStream.length_ - 1, true) : handler.String(str, stackStream.length_ - 1, true)); } - - if(!success) + if (!success) RAPIDJSON_PARSE_ERROR(kParseErrorTermination, s.Tell()); }