Index: base/values.cc |
diff --git a/base/values.cc b/base/values.cc |
index 8d7ca351d1e9cc6db28489f822a9f341906f04b5..dca6f5e6887d921dd0305d0ec1684c23d0c9c27b 100644 |
--- a/base/values.cc |
+++ b/base/values.cc |
@@ -101,6 +101,11 @@ FundamentalValue* Value::CreateIntegerValue(int in_value) { |
} |
// static |
+FundamentalValue* Value::CreateInteger64Value(int64 in_value) { |
+ return new FundamentalValue(in_value); |
+} |
+ |
+// static |
FundamentalValue* Value::CreateDoubleValue(double in_value) { |
return new FundamentalValue(in_value); |
} |
@@ -123,6 +128,10 @@ bool Value::GetAsInteger(int* out_value) const { |
return false; |
} |
+bool Value::GetAsInteger64(int64* out_value) const { |
+ return false; |
+} |
+ |
bool Value::GetAsDouble(double* out_value) const { |
return false; |
} |
@@ -185,6 +194,10 @@ FundamentalValue::FundamentalValue(int in_value) |
: Value(TYPE_INTEGER), integer_value_(in_value) { |
} |
+FundamentalValue::FundamentalValue(int64 in_value) |
+ : Value(TYPE_INTEGER64), integer_value_(in_value) { |
+} |
+ |
FundamentalValue::FundamentalValue(double in_value) |
: Value(TYPE_DOUBLE), double_value_(in_value) { |
if (!IsFinite(double_value_)) { |
@@ -209,6 +222,14 @@ bool FundamentalValue::GetAsInteger(int* out_value) const { |
return (IsType(TYPE_INTEGER)); |
} |
+bool FundamentalValue::GetAsInteger64(int64* out_value) const { |
+ if (out_value && IsType(TYPE_INTEGER64)) |
+ *out_value = integer_value_; |
+ else if (out_value && IsType(TYPE_INTEGER)) |
+ *out_value = integer_value_; |
+ return (IsType(TYPE_INTEGER64) || IsType(TYPE_INTEGER)); |
+} |
+ |
bool FundamentalValue::GetAsDouble(double* out_value) const { |
if (out_value && IsType(TYPE_DOUBLE)) |
*out_value = double_value_; |
@@ -225,6 +246,9 @@ FundamentalValue* FundamentalValue::DeepCopy() const { |
case TYPE_INTEGER: |
return CreateIntegerValue(integer_value_); |
+ case TYPE_INTEGER64: |
+ return CreateInteger64Value(integer_value_); |
+ |
case TYPE_DOUBLE: |
return CreateDoubleValue(double_value_); |
@@ -243,9 +267,10 @@ bool FundamentalValue::Equals(const Value* other) const { |
bool lhs, rhs; |
return GetAsBoolean(&lhs) && other->GetAsBoolean(&rhs) && lhs == rhs; |
} |
- case TYPE_INTEGER: { |
- int lhs, rhs; |
- return GetAsInteger(&lhs) && other->GetAsInteger(&rhs) && lhs == rhs; |
+ case TYPE_INTEGER: |
+ case TYPE_INTEGER64: { |
+ int64 lhs, rhs; |
+ return GetAsInteger64(&lhs) && other->GetAsInteger64(&rhs) && lhs == rhs; |
} |
case TYPE_DOUBLE: { |
double lhs, rhs; |
@@ -414,6 +439,10 @@ void DictionaryValue::SetInteger(const std::string& path, int in_value) { |
Set(path, CreateIntegerValue(in_value)); |
} |
+void DictionaryValue::SetInteger64(const std::string& path, int64 in_value) { |
+ Set(path, CreateInteger64Value(in_value)); |
+} |
+ |
void DictionaryValue::SetDouble(const std::string& path, double in_value) { |
Set(path, CreateDoubleValue(in_value)); |
} |
@@ -478,6 +507,15 @@ bool DictionaryValue::GetInteger(const std::string& path, |
return value->GetAsInteger(out_value); |
} |
+bool DictionaryValue::GetInteger64(const std::string& path, |
+ int64* out_value) const { |
+ Value* value; |
+ if (!Get(path, &value)) |
+ return false; |
+ |
+ return value->GetAsInteger64(out_value); |
+} |
+ |
bool DictionaryValue::GetDouble(const std::string& path, |
double* out_value) const { |
Value* value; |
@@ -581,6 +619,15 @@ bool DictionaryValue::GetIntegerWithoutPathExpansion(const std::string& key, |
return value->GetAsInteger(out_value); |
} |
+bool DictionaryValue::GetInteger64WithoutPathExpansion(const std::string& key, |
+ int64* out_value) const { |
+ Value* value; |
+ if (!GetWithoutPathExpansion(key, &value)) |
+ return false; |
+ |
+ return value->GetAsInteger64(out_value); |
+} |
+ |
bool DictionaryValue::GetDoubleWithoutPathExpansion(const std::string& key, |
double* out_value) const { |
Value* value; |
@@ -790,6 +837,14 @@ bool ListValue::GetInteger(size_t index, int* out_value) const { |
return value->GetAsInteger(out_value); |
} |
+bool ListValue::GetInteger64(size_t index, int64* out_value) const { |
+ Value* value; |
+ if (!Get(index, &value)) |
+ return false; |
+ |
+ return value->GetAsInteger64(out_value); |
+} |
+ |
bool ListValue::GetDouble(size_t index, double* out_value) const { |
Value* value; |
if (!Get(index, &value)) |