Index: base/values.cc |
diff --git a/base/values.cc b/base/values.cc |
index f00a03f8d3097896b7176052368cfdbb7fbfb8dd..fd0bbe17a41468da40b3e55bc64c50ef3be5415d 100644 |
--- a/base/values.cc |
+++ b/base/values.cc |
@@ -23,7 +23,8 @@ namespace { |
const char* const kTypeNames[] = {"null", "boolean", "integer", "double", |
"string", "binary", "dictionary", "list"}; |
-static_assert(arraysize(kTypeNames) == Value::TYPE_LIST + 1, |
+static_assert(arraysize(kTypeNames) == |
+ static_cast<size_t>(Value::Type::LIST) + 1, |
"kTypeNames Has Wrong Size"); |
std::unique_ptr<Value> CopyWithoutEmptyChildren(const Value& node); |
@@ -60,10 +61,10 @@ std::unique_ptr<DictionaryValue> CopyDictionaryWithoutEmptyChildren( |
std::unique_ptr<Value> CopyWithoutEmptyChildren(const Value& node) { |
switch (node.GetType()) { |
- case Value::TYPE_LIST: |
+ case Value::Type::LIST: |
return CopyListWithoutEmptyChildren(static_cast<const ListValue&>(node)); |
- case Value::TYPE_DICTIONARY: |
+ case Value::Type::DICTIONARY: |
return CopyDictionaryWithoutEmptyChildren( |
static_cast<const DictionaryValue&>(node)); |
@@ -79,14 +80,14 @@ Value::~Value() { |
// static |
std::unique_ptr<Value> Value::CreateNullValue() { |
- return WrapUnique(new Value(TYPE_NULL)); |
+ return WrapUnique(new Value(Type::NONE)); |
} |
// static |
const char* Value::GetTypeName(Value::Type type) { |
- DCHECK_GE(type, 0); |
+ DCHECK_GE(static_cast<int>(type), 0); |
DCHECK_LT(static_cast<size_t>(type), arraysize(kTypeNames)); |
- return kTypeNames[type]; |
+ return kTypeNames[static_cast<size_t>(type)]; |
} |
bool Value::GetAsBinary(const BinaryValue** out_value) const { |
@@ -136,7 +137,7 @@ bool Value::GetAsDictionary(const DictionaryValue** out_value) const { |
Value* Value::DeepCopy() const { |
// This method should only be getting called for null Values--all subclasses |
// need to provide their own implementation;. |
- DCHECK(IsType(TYPE_NULL)); |
+ DCHECK(IsType(Type::NONE)); |
return CreateNullValue().release(); |
} |
@@ -147,8 +148,8 @@ std::unique_ptr<Value> Value::CreateDeepCopy() const { |
bool Value::Equals(const Value* other) const { |
// This method should only be getting called for null Values--all subclasses |
// need to provide their own implementation;. |
- DCHECK(IsType(TYPE_NULL)); |
- return other->IsType(TYPE_NULL); |
+ DCHECK(IsType(Type::NONE)); |
+ return other->IsType(Type::NONE); |
} |
// static |
@@ -170,15 +171,13 @@ Value& Value::operator=(const Value& that) { |
///////////////////// FundamentalValue //////////////////// |
FundamentalValue::FundamentalValue(bool in_value) |
- : Value(TYPE_BOOLEAN), boolean_value_(in_value) { |
-} |
+ : Value(Type::BOOLEAN), boolean_value_(in_value) {} |
FundamentalValue::FundamentalValue(int in_value) |
- : Value(TYPE_INTEGER), integer_value_(in_value) { |
-} |
+ : Value(Type::INTEGER), integer_value_(in_value) {} |
FundamentalValue::FundamentalValue(double in_value) |
- : Value(TYPE_DOUBLE), double_value_(in_value) { |
+ : Value(Type::DOUBLE), double_value_(in_value) { |
if (!std::isfinite(double_value_)) { |
NOTREACHED() << "Non-finite (i.e. NaN or positive/negative infinity) " |
<< "values cannot be represented in JSON"; |
@@ -190,34 +189,34 @@ FundamentalValue::~FundamentalValue() { |
} |
bool FundamentalValue::GetAsBoolean(bool* out_value) const { |
- if (out_value && IsType(TYPE_BOOLEAN)) |
+ if (out_value && IsType(Type::BOOLEAN)) |
*out_value = boolean_value_; |
- return (IsType(TYPE_BOOLEAN)); |
+ return (IsType(Type::BOOLEAN)); |
} |
bool FundamentalValue::GetAsInteger(int* out_value) const { |
- if (out_value && IsType(TYPE_INTEGER)) |
+ if (out_value && IsType(Type::INTEGER)) |
*out_value = integer_value_; |
- return (IsType(TYPE_INTEGER)); |
+ return (IsType(Type::INTEGER)); |
} |
bool FundamentalValue::GetAsDouble(double* out_value) const { |
- if (out_value && IsType(TYPE_DOUBLE)) |
+ if (out_value && IsType(Type::DOUBLE)) |
*out_value = double_value_; |
- else if (out_value && IsType(TYPE_INTEGER)) |
+ else if (out_value && IsType(Type::INTEGER)) |
*out_value = integer_value_; |
- return (IsType(TYPE_DOUBLE) || IsType(TYPE_INTEGER)); |
+ return (IsType(Type::DOUBLE) || IsType(Type::INTEGER)); |
} |
FundamentalValue* FundamentalValue::DeepCopy() const { |
switch (GetType()) { |
- case TYPE_BOOLEAN: |
+ case Type::BOOLEAN: |
return new FundamentalValue(boolean_value_); |
- case TYPE_INTEGER: |
+ case Type::INTEGER: |
return new FundamentalValue(integer_value_); |
- case TYPE_DOUBLE: |
+ case Type::DOUBLE: |
return new FundamentalValue(double_value_); |
default: |
@@ -231,15 +230,15 @@ bool FundamentalValue::Equals(const Value* other) const { |
return false; |
switch (GetType()) { |
- case TYPE_BOOLEAN: { |
+ case Type::BOOLEAN: { |
bool lhs, rhs; |
return GetAsBoolean(&lhs) && other->GetAsBoolean(&rhs) && lhs == rhs; |
} |
- case TYPE_INTEGER: { |
+ case Type::INTEGER: { |
int lhs, rhs; |
return GetAsInteger(&lhs) && other->GetAsInteger(&rhs) && lhs == rhs; |
} |
- case TYPE_DOUBLE: { |
+ case Type::DOUBLE: { |
double lhs, rhs; |
return GetAsDouble(&lhs) && other->GetAsDouble(&rhs) && lhs == rhs; |
} |
@@ -252,14 +251,12 @@ bool FundamentalValue::Equals(const Value* other) const { |
///////////////////// StringValue //////////////////// |
StringValue::StringValue(StringPiece in_value) |
- : Value(TYPE_STRING), value_(in_value.as_string()) { |
+ : Value(Type::STRING), value_(in_value.as_string()) { |
DCHECK(IsStringUTF8(in_value)); |
} |
StringValue::StringValue(const string16& in_value) |
- : Value(TYPE_STRING), |
- value_(UTF16ToUTF8(in_value)) { |
-} |
+ : Value(Type::STRING), value_(UTF16ToUTF8(in_value)) {} |
StringValue::~StringValue() { |
} |
@@ -303,13 +300,10 @@ bool StringValue::Equals(const Value* other) const { |
///////////////////// BinaryValue //////////////////// |
-BinaryValue::BinaryValue() |
- : Value(TYPE_BINARY), |
- size_(0) { |
-} |
+BinaryValue::BinaryValue() : Value(Type::BINARY), size_(0) {} |
BinaryValue::BinaryValue(std::unique_ptr<char[]> buffer, size_t size) |
- : Value(TYPE_BINARY), buffer_(std::move(buffer)), size_(size) {} |
+ : Value(Type::BINARY), buffer_(std::move(buffer)), size_(size) {} |
BinaryValue::~BinaryValue() { |
} |
@@ -355,9 +349,7 @@ std::unique_ptr<DictionaryValue> DictionaryValue::From( |
return nullptr; |
} |
-DictionaryValue::DictionaryValue() |
- : Value(TYPE_DICTIONARY) { |
-} |
+DictionaryValue::DictionaryValue() : Value(Type::DICTIONARY) {} |
DictionaryValue::~DictionaryValue() { |
Clear(); |
@@ -561,7 +553,7 @@ bool DictionaryValue::GetBinary(StringPiece path, |
const BinaryValue** out_value) const { |
const Value* value; |
bool result = Get(path, &value); |
- if (!result || !value->IsType(TYPE_BINARY)) |
+ if (!result || !value->IsType(Type::BINARY)) |
return false; |
if (out_value) |
@@ -580,7 +572,7 @@ bool DictionaryValue::GetDictionary(StringPiece path, |
const DictionaryValue** out_value) const { |
const Value* value; |
bool result = Get(path, &value); |
- if (!result || !value->IsType(TYPE_DICTIONARY)) |
+ if (!result || !value->IsType(Type::DICTIONARY)) |
return false; |
if (out_value) |
@@ -600,7 +592,7 @@ bool DictionaryValue::GetList(StringPiece path, |
const ListValue** out_value) const { |
const Value* value; |
bool result = Get(path, &value); |
- if (!result || !value->IsType(TYPE_LIST)) |
+ if (!result || !value->IsType(Type::LIST)) |
return false; |
if (out_value) |
@@ -685,7 +677,7 @@ bool DictionaryValue::GetDictionaryWithoutPathExpansion( |
const DictionaryValue** out_value) const { |
const Value* value; |
bool result = GetWithoutPathExpansion(key, &value); |
- if (!result || !value->IsType(TYPE_DICTIONARY)) |
+ if (!result || !value->IsType(Type::DICTIONARY)) |
return false; |
if (out_value) |
@@ -709,7 +701,7 @@ bool DictionaryValue::GetListWithoutPathExpansion( |
const ListValue** out_value) const { |
const Value* value; |
bool result = GetWithoutPathExpansion(key, &value); |
- if (!result || !value->IsType(TYPE_LIST)) |
+ if (!result || !value->IsType(Type::LIST)) |
return false; |
if (out_value) |
@@ -790,7 +782,7 @@ void DictionaryValue::MergeDictionary(const DictionaryValue* dictionary) { |
for (DictionaryValue::Iterator it(*dictionary); !it.IsAtEnd(); it.Advance()) { |
const Value* merge_value = &it.value(); |
// Check whether we have to merge dictionaries. |
- if (merge_value->IsType(Value::TYPE_DICTIONARY)) { |
+ if (merge_value->IsType(Value::Type::DICTIONARY)) { |
DictionaryValue* sub_dict; |
if (GetDictionaryWithoutPathExpansion(it.key(), &sub_dict)) { |
sub_dict->MergeDictionary( |
@@ -865,8 +857,7 @@ std::unique_ptr<ListValue> ListValue::From(std::unique_ptr<Value> value) { |
return nullptr; |
} |
-ListValue::ListValue() : Value(TYPE_LIST) { |
-} |
+ListValue::ListValue() : Value(Type::LIST) {} |
ListValue::~ListValue() { |
Clear(); |
@@ -956,7 +947,7 @@ bool ListValue::GetString(size_t index, string16* out_value) const { |
bool ListValue::GetBinary(size_t index, const BinaryValue** out_value) const { |
const Value* value; |
bool result = Get(index, &value); |
- if (!result || !value->IsType(TYPE_BINARY)) |
+ if (!result || !value->IsType(Type::BINARY)) |
return false; |
if (out_value) |
@@ -975,7 +966,7 @@ bool ListValue::GetDictionary(size_t index, |
const DictionaryValue** out_value) const { |
const Value* value; |
bool result = Get(index, &value); |
- if (!result || !value->IsType(TYPE_DICTIONARY)) |
+ if (!result || !value->IsType(Type::DICTIONARY)) |
return false; |
if (out_value) |
@@ -993,7 +984,7 @@ bool ListValue::GetDictionary(size_t index, DictionaryValue** out_value) { |
bool ListValue::GetList(size_t index, const ListValue** out_value) const { |
const Value* value; |
bool result = Get(index, &value); |
- if (!result || !value->IsType(TYPE_LIST)) |
+ if (!result || !value->IsType(Type::LIST)) |
return false; |
if (out_value) |
@@ -1173,4 +1164,11 @@ std::ostream& operator<<(std::ostream& out, const Value& value) { |
return out << json; |
} |
+std::ostream& operator<<(std::ostream& out, const Value::Type& type) { |
+ if (static_cast<int>(type) < 0 || |
+ static_cast<size_t>(type) >= arraysize(kTypeNames)) |
+ return out << "Invalid Type (index = " << static_cast<int>(type) << ")"; |
+ return out << Value::GetTypeName(type); |
+} |
+ |
} // namespace base |