From 66a8ba255f2d53acafafe3de2cff26ea060447ef Mon Sep 17 00:00:00 2001 From: Christopher Dunn Date: Mon, 9 Feb 2015 01:29:43 -0600 Subject: [PATCH] clarify Builders --- doc/jsoncpp.dox | 14 +++----------- include/json/reader.h | 28 +++++++++++++++++----------- include/json/writer.h | 3 ++- src/lib_json/json_reader.cpp | 2 ++ src/lib_json/json_writer.cpp | 2 ++ 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/doc/jsoncpp.dox b/doc/jsoncpp.dox index 0954974..1b246ef 100644 --- a/doc/jsoncpp.dox +++ b/doc/jsoncpp.dox @@ -50,16 +50,8 @@ preserved. \section _example Code example \code -Json::Value root; // will contain the root value after parsing. -Json::Reader reader; -bool parsingSuccessful = reader.parse( config_doc, root ); -if ( !parsingSuccessful ) -{ - // report to the user the failure and their locations in the document. - std::cout << "Failed to parse configuration\n" - << reader.getFormattedErrorMessages(); - return; -} +Json::Value root; // 'root' will contain the root value after parsing. +std::cin >> root; // Or see CharReaderBuilder. // Get the value of the member of root named 'encoding', return 'UTF-8' if there is no // such member. @@ -80,7 +72,7 @@ root["indent"]["length"] = getCurrentIndentLength(); root["indent"]["use_space"] = getCurrentIndentUseSpace(); // (NEW IN 1.4.0) -// To write into a steam with minimal memory overhead, +// To write into a stream with minimal memory overhead, // create a Builder for a StreamWriter. Json::StreamWriterBuilder builder; builder.indentation_ = " "; // or whatever you like diff --git a/include/json/reader.h b/include/json/reader.h index 1111a7b..7dc9761 100644 --- a/include/json/reader.h +++ b/include/json/reader.h @@ -274,21 +274,27 @@ public: }; // Factory }; // CharReader +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder.collectComments_ = true; + std::shared_ptr reader( + builder.newCharReader()); + Value value; + std::string errs; + bool ok = parseFromStream(std::cin, &value, &errs); +\endcode +*/ class CharReaderBuilder : public CharReader::Factory { +public: bool collectComments_; Features features_; -public: + CharReaderBuilder(); - - CharReaderBuilder& withCollectComments(bool v) { - collectComments_ = v; - return *this; - } - - CharReaderBuilder& withFeatures(Features const& v) { - features_ = v; - return *this; - } + virtual ~CharReaderBuilder(); virtual CharReader* newCharReader() const; }; diff --git a/include/json/writer.h b/include/json/writer.h index 4b8a89c..871287f 100644 --- a/include/json/writer.h +++ b/include/json/writer.h @@ -105,9 +105,10 @@ public: std::string indentation_; StreamWriterBuilder(); + virtual ~StreamWriterBuilder(); /// Do not take ownership of sout, but maintain a reference. - StreamWriter* newStreamWriter(std::ostream* sout) const; + virtual StreamWriter* newStreamWriter(std::ostream* sout) const; }; /** \brief Build a StreamWriter implementation. diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp index 119c3da..410e793 100644 --- a/src/lib_json/json_reader.cpp +++ b/src/lib_json/json_reader.cpp @@ -915,6 +915,8 @@ CharReaderBuilder::CharReaderBuilder() : collectComments_(true) , features_(Features::all()) {} +CharReaderBuilder::~CharReaderBuilder() +{} CharReader* CharReaderBuilder::newCharReader() const { return new OldReader(collectComments_, features_); diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index 2204a4c..036bfe8 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -971,6 +971,8 @@ StreamWriterBuilder::StreamWriterBuilder() : cs_(StreamWriter::CommentStyle::All) , indentation_("\t") {} +StreamWriterBuilder::~StreamWriterBuilder() +{} StreamWriter* StreamWriterBuilder::newStreamWriter(std::ostream* stream) const { std::string colonSymbol = " : ";