Fixed is<T>()

This commit is contained in:
Benoit Blanchon
2014-11-11 17:26:13 +01:00
parent 2beb87136b
commit 33f6376122
2 changed files with 43 additions and 29 deletions

View File

@ -194,6 +194,36 @@ inline bool JsonVariant::is<double>() const {
return _type >= Internals::JSON_DOUBLE_0_DECIMALS; return _type >= Internals::JSON_DOUBLE_0_DECIMALS;
} }
template <>
inline bool JsonVariant::is<bool>() const {
return _type == Internals::JSON_BOOLEAN;
}
template <>
inline bool JsonVariant::is<const char *>() const {
return _type == Internals::JSON_STRING;
}
template <>
inline bool JsonVariant::is<JsonArray &>() const {
return _type == Internals::JSON_ARRAY;
}
template <>
inline bool JsonVariant::is<const JsonArray &>() const {
return _type == Internals::JSON_ARRAY;
}
template <>
inline bool JsonVariant::is<JsonObject &>() const {
return _type == Internals::JSON_OBJECT;
}
template <>
inline bool JsonVariant::is<const JsonObject &>() const {
return _type == Internals::JSON_OBJECT;
}
template <typename T> template <typename T>
inline bool operator==(const JsonVariant &left, T right) { inline bool operator==(const JsonVariant &left, T right) {
return left.as<T>() == right; return left.as<T>() == right;

View File

@ -91,34 +91,18 @@ JsonVariant &JsonVariant::operator[](const char *key) {
} }
void JsonVariant::writeTo(JsonWriter &writer) const { void JsonVariant::writeTo(JsonWriter &writer) const {
switch (_type) { if (is<const JsonArray &>())
case JSON_ARRAY: as<const JsonArray &>().writeTo(writer);
_content.asArray->writeTo(writer); else if (is<const JsonObject &>())
break; as<const JsonObject &>().writeTo(writer);
else if (is<const char *>())
case JSON_OBJECT: writer.writeString(as<const char *>());
_content.asObject->writeTo(writer); else if (is<long>())
break; writer.writeLong(as<long>());
else if (is<bool>())
case JSON_STRING: writer.writeBoolean(as<bool>());
writer.writeString(_content.asString); else if (is<double>()) {
break; uint8_t decimals = static_cast<uint8_t>(_type - JSON_DOUBLE_0_DECIMALS);
writer.writeDouble(as<double>(), decimals);
case JSON_LONG:
writer.writeLong(_content.asLong);
break;
case JSON_BOOLEAN:
writer.writeBoolean(_content.asBoolean);
break;
case JSON_INVALID:
case JSON_UNDEFINED:
break;
default: // >= JSON_DOUBLE_0_DECIMALS
uint8_t decimals = static_cast<uint8_t>(_type - JSON_DOUBLE_0_DECIMALS);
writer.writeDouble(_content.asDouble, decimals);
break;
} }
} }