Added JsonVariant::operator[](const char*)

This commit is contained in:
Benoit Blanchon
2014-11-04 10:30:45 +01:00
parent 97768ec176
commit e5669577df
3 changed files with 25 additions and 1 deletions

View File

@ -91,13 +91,17 @@ class JsonVariant {
static JsonVariant &invalid() { return _invalid; }
bool success() { return _type != Internals::JSON_INVALID; }
bool success() {
return _type != Internals::JSON_INVALID &&
_type != Internals::JSON_UNDEFINED;
}
template <typename T>
void writeTo(T &writer) const;
size_t size() const;
JsonVariant &operator[](int index);
JsonVariant &operator[](const char *key);
private:
JsonVariant(Internals::JsonVariantType type) : _type(type) {}

View File

@ -86,6 +86,11 @@ JsonVariant &JsonVariant::operator[](int index) {
return _content.asArray->operator[](index);
}
JsonVariant &JsonVariant::operator[](const char *key) {
if (_type != JSON_OBJECT) return JsonVariant::invalid();
return _content.asObject->operator[](key);
}
template <typename T>
void JsonVariant::writeTo(T &writer) const {
switch (_type) {

View File

@ -29,4 +29,19 @@ TEST_F(JsonVariant_Subscript_Tests, Array) {
EXPECT_STREQ("element at index 1", variant[1].asString());
EXPECT_FALSE(variant[-1].success());
EXPECT_FALSE(variant[3].success());
EXPECT_FALSE(variant["0"].success());
}
TEST_F(JsonVariant_Subscript_Tests, Object) {
JsonObject &object = buffer.createObject();
object["a"] = "element at key \"a\"";
object["b"] = "element at key \"b\"";
variant = object;
EXPECT_EQ(2, variant.size());
EXPECT_STREQ("element at key \"a\"", variant["a"].asString());
EXPECT_STREQ("element at key \"b\"", variant["b"].asString());
EXPECT_FALSE(variant["c"].success());
EXPECT_FALSE(variant[0].success());
}