Index: base/values.cc |
diff --git a/base/values.cc b/base/values.cc |
index 747ed0cdfc8b670d538332a44bfafb67fda92097..08fab896d36944159d918fb596c7a07697d5206d 100644 |
--- a/base/values.cc |
+++ b/base/values.cc |
@@ -441,14 +441,15 @@ void DictionaryValue::SetWithoutPathExpansion(const std::string& key, |
} |
} |
-bool DictionaryValue::Get(const std::string& path, Value** out_value) const { |
+bool DictionaryValue::Get( |
+ const std::string& path, const Value** out_value) const { |
DCHECK(IsStringUTF8(path)); |
std::string current_path(path); |
const DictionaryValue* current_dictionary = this; |
for (size_t delimiter_position = current_path.find('.'); |
delimiter_position != std::string::npos; |
delimiter_position = current_path.find('.')) { |
- DictionaryValue* child_dictionary = NULL; |
+ const DictionaryValue* child_dictionary = NULL; |
if (!current_dictionary->GetDictionary( |
current_path.substr(0, delimiter_position), &child_dictionary)) |
return false; |
@@ -460,9 +461,15 @@ bool DictionaryValue::Get(const std::string& path, Value** out_value) const { |
return current_dictionary->GetWithoutPathExpansion(current_path, out_value); |
} |
+bool DictionaryValue::Get(const std::string& path, Value** out_value) { |
+ return static_cast<const DictionaryValue&>(*this).Get( |
+ path, |
+ const_cast<const Value**>(out_value)); |
+} |
+ |
bool DictionaryValue::GetBoolean(const std::string& path, |
bool* bool_value) const { |
- Value* value; |
+ const Value* value; |
if (!Get(path, &value)) |
return false; |
@@ -471,7 +478,7 @@ bool DictionaryValue::GetBoolean(const std::string& path, |
bool DictionaryValue::GetInteger(const std::string& path, |
int* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!Get(path, &value)) |
return false; |
@@ -480,7 +487,7 @@ bool DictionaryValue::GetInteger(const std::string& path, |
bool DictionaryValue::GetDouble(const std::string& path, |
double* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!Get(path, &value)) |
return false; |
@@ -489,7 +496,7 @@ bool DictionaryValue::GetDouble(const std::string& path, |
bool DictionaryValue::GetString(const std::string& path, |
std::string* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!Get(path, &value)) |
return false; |
@@ -498,7 +505,7 @@ bool DictionaryValue::GetString(const std::string& path, |
bool DictionaryValue::GetString(const std::string& path, |
string16* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!Get(path, &value)) |
return false; |
@@ -521,60 +528,87 @@ bool DictionaryValue::GetStringASCII(const std::string& path, |
} |
bool DictionaryValue::GetBinary(const std::string& path, |
- BinaryValue** out_value) const { |
- Value* value; |
+ const BinaryValue** out_value) const { |
+ const Value* value; |
bool result = Get(path, &value); |
if (!result || !value->IsType(TYPE_BINARY)) |
return false; |
if (out_value) |
- *out_value = static_cast<BinaryValue*>(value); |
+ *out_value = static_cast<const BinaryValue*>(value); |
return true; |
} |
+bool DictionaryValue::GetBinary(const std::string& path, |
+ BinaryValue** out_value) { |
+ return static_cast<const DictionaryValue&>(*this).GetBinary( |
+ path, |
+ const_cast<const BinaryValue**>(out_value)); |
+} |
+ |
bool DictionaryValue::GetDictionary(const std::string& path, |
- DictionaryValue** out_value) const { |
- Value* value; |
+ const DictionaryValue** out_value) const { |
+ const Value* value; |
bool result = Get(path, &value); |
if (!result || !value->IsType(TYPE_DICTIONARY)) |
return false; |
if (out_value) |
- *out_value = static_cast<DictionaryValue*>(value); |
+ *out_value = static_cast<const DictionaryValue*>(value); |
return true; |
} |
+bool DictionaryValue::GetDictionary(const std::string& path, |
+ DictionaryValue** out_value) { |
+ return static_cast<const DictionaryValue&>(*this).GetDictionary( |
+ path, |
+ const_cast<const DictionaryValue**>(out_value)); |
+} |
+ |
bool DictionaryValue::GetList(const std::string& path, |
- ListValue** out_value) const { |
- Value* value; |
+ const ListValue** out_value) const { |
+ const Value* value; |
bool result = Get(path, &value); |
if (!result || !value->IsType(TYPE_LIST)) |
return false; |
if (out_value) |
- *out_value = static_cast<ListValue*>(value); |
+ *out_value = static_cast<const ListValue*>(value); |
return true; |
} |
+bool DictionaryValue::GetList(const std::string& path, ListValue** out_value) { |
+ return static_cast<const DictionaryValue&>(*this).GetList( |
+ path, |
+ const_cast<const ListValue**>(out_value)); |
+} |
+ |
bool DictionaryValue::GetWithoutPathExpansion(const std::string& key, |
- Value** out_value) const { |
+ const Value** out_value) const { |
DCHECK(IsStringUTF8(key)); |
ValueMap::const_iterator entry_iterator = dictionary_.find(key); |
if (entry_iterator == dictionary_.end()) |
return false; |
- Value* entry = entry_iterator->second; |
+ const Value* entry = entry_iterator->second; |
if (out_value) |
*out_value = entry; |
return true; |
} |
+bool DictionaryValue::GetWithoutPathExpansion(const std::string& key, |
+ Value** out_value) { |
+ return static_cast<const DictionaryValue&>(*this).GetWithoutPathExpansion( |
+ key, |
+ const_cast<const Value**>(out_value)); |
+} |
+ |
bool DictionaryValue::GetIntegerWithoutPathExpansion(const std::string& key, |
int* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!GetWithoutPathExpansion(key, &value)) |
return false; |
@@ -583,7 +617,7 @@ bool DictionaryValue::GetIntegerWithoutPathExpansion(const std::string& key, |
bool DictionaryValue::GetDoubleWithoutPathExpansion(const std::string& key, |
double* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!GetWithoutPathExpansion(key, &value)) |
return false; |
@@ -593,17 +627,16 @@ bool DictionaryValue::GetDoubleWithoutPathExpansion(const std::string& key, |
bool DictionaryValue::GetStringWithoutPathExpansion( |
const std::string& key, |
std::string* out_value) const { |
- Value* value; |
+ const Value* value; |
if (!GetWithoutPathExpansion(key, &value)) |
return false; |
return value->GetAsString(out_value); |
} |
-bool DictionaryValue::GetStringWithoutPathExpansion( |
- const std::string& key, |
- string16* out_value) const { |
- Value* value; |
+bool DictionaryValue::GetStringWithoutPathExpansion(const std::string& key, |
+ string16* out_value) const { |
+ const Value* value; |
if (!GetWithoutPathExpansion(key, &value)) |
return false; |
@@ -612,31 +645,50 @@ bool DictionaryValue::GetStringWithoutPathExpansion( |
bool DictionaryValue::GetDictionaryWithoutPathExpansion( |
const std::string& key, |
- DictionaryValue** out_value) const { |
- Value* value; |
+ const DictionaryValue** out_value) const { |
+ const Value* value; |
bool result = GetWithoutPathExpansion(key, &value); |
if (!result || !value->IsType(TYPE_DICTIONARY)) |
return false; |
if (out_value) |
- *out_value = static_cast<DictionaryValue*>(value); |
+ *out_value = static_cast<const DictionaryValue*>(value); |
return true; |
} |
-bool DictionaryValue::GetListWithoutPathExpansion(const std::string& key, |
- ListValue** out_value) const { |
- Value* value; |
+bool DictionaryValue::GetDictionaryWithoutPathExpansion( |
+ const std::string& key, |
+ DictionaryValue** out_value) { |
+ const DictionaryValue& const_this = |
+ static_cast<const DictionaryValue&>(*this); |
+ return const_this.GetDictionaryWithoutPathExpansion( |
+ key, |
+ const_cast<const DictionaryValue**>(out_value)); |
+} |
+ |
+bool DictionaryValue::GetListWithoutPathExpansion( |
+ const std::string& key, |
+ const ListValue** out_value) const { |
+ const Value* value; |
bool result = GetWithoutPathExpansion(key, &value); |
if (!result || !value->IsType(TYPE_LIST)) |
return false; |
if (out_value) |
- *out_value = static_cast<ListValue*>(value); |
+ *out_value = static_cast<const ListValue*>(value); |
return true; |
} |
+bool DictionaryValue::GetListWithoutPathExpansion(const std::string& key, |
+ ListValue** out_value) { |
+ return |
+ static_cast<const DictionaryValue&>(*this).GetListWithoutPathExpansion( |
+ key, |
+ const_cast<const ListValue**>(out_value)); |
+} |
+ |
bool DictionaryValue::Remove(const std::string& path, Value** out_value) { |
DCHECK(IsStringUTF8(path)); |
std::string current_path(path); |
@@ -677,7 +729,7 @@ DictionaryValue* DictionaryValue::DeepCopyWithoutEmptyChildren() { |
void DictionaryValue::MergeDictionary(const DictionaryValue* dictionary) { |
for (DictionaryValue::key_iterator key(dictionary->begin_keys()); |
key != dictionary->end_keys(); ++key) { |
- Value* merge_value; |
+ const Value* merge_value; |
if (dictionary->GetWithoutPathExpansion(*key, &merge_value)) { |
// Check whether we have to merge dictionaries. |
if (merge_value->IsType(Value::TYPE_DICTIONARY)) { |
@@ -719,8 +771,8 @@ bool DictionaryValue::Equals(const Value* other) const { |
key_iterator lhs_it(begin_keys()); |
key_iterator rhs_it(other_dict->begin_keys()); |
while (lhs_it != end_keys() && rhs_it != other_dict->end_keys()) { |
- Value* lhs; |
- Value* rhs; |
+ const Value* lhs; |
+ const Value* rhs; |
if (*lhs_it != *rhs_it || |
!GetWithoutPathExpansion(*lhs_it, &lhs) || |
!other_dict->GetWithoutPathExpansion(*rhs_it, &rhs) || |