Index: base/values.cc |
diff --git a/base/values.cc b/base/values.cc |
index f27c09567eee61c55aafa398d9302a7bd8faeeac..85e4e4dbd9494fd9be4bec3f7dde642e97cdb3b0 100644 |
--- a/base/values.cc |
+++ b/base/values.cc |
@@ -13,6 +13,7 @@ |
#include "base/json/json_writer.h" |
#include "base/logging.h" |
#include "base/move.h" |
+#include "base/strings/string_number_conversions.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
@@ -138,6 +139,14 @@ bool Value::GetAsString(const StringValue** out_value) const { |
return false; |
} |
+bool Value::GetAsInt64(int64* out_value) const { |
+ return false; |
+} |
+ |
+bool Value::GetAsUint64(uint64* out_value) const { |
+ return false; |
+} |
+ |
bool Value::GetAsList(ListValue** out_value) { |
return false; |
} |
@@ -279,6 +288,14 @@ StringValue::StringValue(const string16& in_value) |
value_(UTF16ToUTF8(in_value)) { |
} |
+StringValue::StringValue(int64 in_value) |
+ : Value(TYPE_STRING), value_(Int64ToString(in_value)) { |
+} |
+ |
+StringValue::StringValue(uint64 in_value) |
+ : Value(TYPE_STRING), value_(Uint64ToString(in_value)) { |
+} |
+ |
StringValue::~StringValue() { |
} |
@@ -308,6 +325,22 @@ bool StringValue::GetAsString(const StringValue** out_value) const { |
return true; |
} |
+bool StringValue::GetAsInt64(int64* out_value) const { |
+ int64 stored_value; |
+ bool valid = StringToInt64(value_, &stored_value); |
+ if (valid && out_value) |
+ *out_value = stored_value; |
+ return valid; |
+} |
+ |
+bool StringValue::GetAsUint64(uint64* out_value) const { |
+ uint64 stored_value; |
+ bool valid = base::StringToUint64(value_, &stored_value); |
+ if (valid && out_value) |
+ *out_value = stored_value; |
+ return valid; |
+} |
+ |
StringValue* StringValue::DeepCopy() const { |
return new StringValue(value_); |
} |
@@ -442,6 +475,14 @@ void DictionaryValue::SetString(const std::string& path, |
Set(path, new StringValue(in_value)); |
} |
+void DictionaryValue::SetInt64(const std::string& path, int64 in_value) { |
+ Set(path, new StringValue(in_value)); |
+} |
+ |
+void DictionaryValue::SetUint64(const std::string& path, uint64 in_value) { |
+ Set(path, new StringValue(in_value)); |
+} |
+ |
void DictionaryValue::SetWithoutPathExpansion(const std::string& key, |
Value* in_value) { |
// If there's an existing value here, we need to delete it, because |
@@ -480,6 +521,16 @@ void DictionaryValue::SetStringWithoutPathExpansion( |
SetWithoutPathExpansion(path, new StringValue(in_value)); |
} |
+void DictionaryValue::SetInt64WithoutPathExpansion(const std::string& path, |
+ int64 in_value) { |
+ SetWithoutPathExpansion(path, new StringValue(in_value)); |
+} |
+ |
+void DictionaryValue::SetUint64WithoutPathExpansion(const std::string& path, |
+ uint64 in_value) { |
+ SetWithoutPathExpansion(path, new StringValue(in_value)); |
+} |
+ |
bool DictionaryValue::Get(const std::string& path, |
const Value** out_value) const { |
DCHECK(IsStringUTF8(path)); |
@@ -551,6 +602,24 @@ bool DictionaryValue::GetString(const std::string& path, |
return value->GetAsString(out_value); |
} |
+bool DictionaryValue::GetInt64(const std::string& path, |
+ int64* out_value) const { |
+ const Value* value; |
+ if (!Get(path, &value)) |
+ return false; |
+ |
+ return value->GetAsInt64(out_value); |
+} |
+ |
+bool DictionaryValue::GetUint64(const std::string& path, |
+ uint64* out_value) const { |
+ const Value* value; |
+ if (!Get(path, &value)) |
+ return false; |
+ |
+ return value->GetAsUint64(out_value); |
+} |
+ |
bool DictionaryValue::GetStringASCII(const std::string& path, |
std::string* out_value) const { |
std::string out; |
@@ -691,6 +760,24 @@ bool DictionaryValue::GetStringWithoutPathExpansion(const std::string& key, |
return value->GetAsString(out_value); |
} |
+bool DictionaryValue::GetInt64WithoutPathExpansion(const std::string& key, |
+ int64* out_value) const { |
+ const Value* value; |
+ if (!GetWithoutPathExpansion(key, &value)) |
+ return false; |
+ |
+ return value->GetAsInt64(out_value); |
+} |
+ |
+bool DictionaryValue::GetUint64WithoutPathExpansion(const std::string& key, |
+ uint64* out_value) const { |
+ const Value* value; |
+ if (!GetWithoutPathExpansion(key, &value)) |
+ return false; |
+ |
+ return value->GetAsUint64(out_value); |
+} |
+ |
bool DictionaryValue::GetDictionaryWithoutPathExpansion( |
const std::string& key, |
const DictionaryValue** out_value) const { |
@@ -944,6 +1031,22 @@ bool ListValue::GetString(size_t index, string16* out_value) const { |
return value->GetAsString(out_value); |
} |
+bool ListValue::GetInt64(size_t index, int64* out_value) const { |
+ const Value* value; |
+ if (!Get(index, &value)) |
+ return false; |
+ |
+ return value->GetAsInt64(out_value); |
+} |
+ |
+bool ListValue::GetUint64(size_t index, uint64* out_value) const { |
+ const Value* value; |
+ if (!Get(index, &value)) |
+ return false; |
+ |
+ return value->GetAsUint64(out_value); |
+} |
+ |
bool ListValue::GetBinary(size_t index, const BinaryValue** out_value) const { |
const Value* value; |
bool result = Get(index, &value); |
@@ -1062,6 +1165,14 @@ void ListValue::AppendString(const string16& in_value) { |
Append(new StringValue(in_value)); |
} |
+void ListValue::AppendInt64(int64 in_value) { |
+ Append(new StringValue(in_value)); |
+} |
+ |
+void ListValue::AppendUint64(uint64 in_value) { |
+ Append(new StringValue(in_value)); |
+} |
+ |
void ListValue::AppendStrings(const std::vector<std::string>& in_values) { |
for (std::vector<std::string>::const_iterator it = in_values.begin(); |
it != in_values.end(); ++it) { |