Skip to content

Commit 2aa4557

Browse files
committed
Merge pull request open-source-parsers#199 from open-source-parsers/set-builders
Setting builders
2 parents 42d7e59 + 37dde9d commit 2aa4557

6 files changed

Lines changed: 24 additions & 7 deletions

File tree

doc/jsoncpp.dox

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ features without losing binary-compatibility.
9696
\code
9797
// For convenience, use `writeString()` with a specialized builder.
9898
Json::StreamWriterBuilder wbuilder;
99-
wbuilder.settings_["indentation"] = "\t"; // simple Json::Value
99+
wbuilder["indentation"] = "\t";
100100
std::string document = Json::writeString(wbuilder, root);
101101

102102
// Here, using a specialized Builder, we discard comments and
103103
// record errors as we parse.
104104
Json::CharReaderBuilder rbuilder;
105-
rbuilder.settings_["collectComments"] = false; // simple Json::Value
105+
rbuilder["collectComments"] = false;
106106
std::string errs;
107107
bool ok = Json::parseFromStream(rbuilder, std::cin, &root, &errs);
108108
\endcode

include/json/reader.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class JSON_API CharReader {
285285
\code
286286
using namespace Json;
287287
CharReaderBuilder builder;
288-
builder.settings_["collectComments"] = false;
288+
builder["collectComments"] = false;
289289
Value value;
290290
std::string errs;
291291
bool ok = parseFromStream(builder, std::cin, &value, &errs);
@@ -337,6 +337,11 @@ class JSON_API CharReaderBuilder : public CharReader::Factory {
337337
* otherwise, indicate bad settings via 'invalid'.
338338
*/
339339
bool validate(Json::Value* invalid) const;
340+
341+
/** A simple way to update a specific setting.
342+
*/
343+
Value& operator[](std::string key);
344+
340345
/** Called by ctor, but you can use this to reset settings_.
341346
* \pre 'settings' != NULL (but Json::null is fine)
342347
* \remark Defaults:

include/json/writer.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ std::string writeString(StreamWriter::Factory const& factory, Value const& root)
7676
using namespace Json;
7777
Value value = ...;
7878
StreamWriterBuilder builder;
79-
builder.settings_["commentStyle"] = "None";
80-
builder.settings_["indentation"] = " "; // or whatever you like
79+
builder["commentStyle"] = "None";
80+
builder["indentation"] = " "; // or whatever you like
8181
std::unique_ptr<Json::StreamWriter> writer(
8282
builder.newStreamWriter());
8383
writer->write(value, &std::cout);
@@ -119,6 +119,10 @@ class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
119119
* otherwise, indicate bad settings via 'invalid'.
120120
*/
121121
bool validate(Json::Value* invalid) const;
122+
/** A simple way to update a specific setting.
123+
*/
124+
Value& operator[](std::string key);
125+
122126
/** Called by ctor, but you can use this to reset settings_.
123127
* \pre 'settings' != NULL (but Json::null is fine)
124128
* \remark Defaults:

src/lib_json/json_reader.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1927,6 +1927,10 @@ bool CharReaderBuilder::validate(Json::Value* invalid) const
19271927
}
19281928
return 0u == inv.size();
19291929
}
1930+
Value& CharReaderBuilder::operator[](std::string key)
1931+
{
1932+
return settings_[key];
1933+
}
19301934
// static
19311935
void CharReaderBuilder::strictMode(Json::Value* settings)
19321936
{

src/lib_json/json_writer.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,10 @@ bool StreamWriterBuilder::validate(Json::Value* invalid) const
11221122
}
11231123
return 0u == inv.size();
11241124
}
1125+
Value& StreamWriterBuilder::operator[](std::string key)
1126+
{
1127+
return settings_[key];
1128+
}
11251129
// static
11261130
void StreamWriterBuilder::setDefaults(Json::Value* settings)
11271131
{

src/test_lib_json/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2182,7 +2182,7 @@ JSONTEST_FIXTURE(BuilderTest, settings) {
21822182
Json::CharReaderBuilder rb;
21832183
JSONTEST_ASSERT_EQUAL(false, rb.settings_.isMember("foo"));
21842184
JSONTEST_ASSERT_EQUAL(true, rb.validate(&errs));
2185-
rb.settings_["foo"] = "bar";
2185+
rb["foo"] = "bar";
21862186
JSONTEST_ASSERT_EQUAL(true, rb.settings_.isMember("foo"));
21872187
JSONTEST_ASSERT_EQUAL(false, rb.validate(&errs));
21882188
}
@@ -2191,7 +2191,7 @@ JSONTEST_FIXTURE(BuilderTest, settings) {
21912191
Json::StreamWriterBuilder wb;
21922192
JSONTEST_ASSERT_EQUAL(false, wb.settings_.isMember("foo"));
21932193
JSONTEST_ASSERT_EQUAL(true, wb.validate(&errs));
2194-
wb.settings_["foo"] = "bar";
2194+
wb["foo"] = "bar";
21952195
JSONTEST_ASSERT_EQUAL(true, wb.settings_.isMember("foo"));
21962196
JSONTEST_ASSERT_EQUAL(false, wb.validate(&errs));
21972197
}

0 commit comments

Comments
 (0)