OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/values.h" | 5 #include "base/values.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 | 10 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 | 63 |
64 Value::~Value() { | 64 Value::~Value() { |
65 } | 65 } |
66 | 66 |
67 // static | 67 // static |
68 Value* Value::CreateNullValue() { | 68 Value* Value::CreateNullValue() { |
69 return new Value(TYPE_NULL); | 69 return new Value(TYPE_NULL); |
70 } | 70 } |
71 | 71 |
72 // static | 72 // static |
73 Value* Value::CreateBooleanValue(bool in_value) { | 73 FundamentalValue* Value::CreateBooleanValue(bool in_value) { |
74 return new FundamentalValue(in_value); | 74 return new FundamentalValue(in_value); |
75 } | 75 } |
76 | 76 |
77 // static | 77 // static |
78 Value* Value::CreateIntegerValue(int in_value) { | 78 FundamentalValue* Value::CreateIntegerValue(int in_value) { |
79 return new FundamentalValue(in_value); | 79 return new FundamentalValue(in_value); |
80 } | 80 } |
81 | 81 |
82 // static | 82 // static |
83 Value* Value::CreateRealValue(double in_value) { | 83 FundamentalValue* Value::CreateRealValue(double in_value) { |
84 return new FundamentalValue(in_value); | 84 return new FundamentalValue(in_value); |
85 } | 85 } |
86 | 86 |
87 // static | 87 // static |
88 Value* Value::CreateStringValue(const std::string& in_value) { | 88 StringValue* Value::CreateStringValue(const std::string& in_value) { |
89 return new StringValue(in_value); | 89 return new StringValue(in_value); |
90 } | 90 } |
91 | 91 |
92 // static | 92 // static |
93 Value* Value::CreateStringValue(const string16& in_value) { | 93 StringValue* Value::CreateStringValue(const string16& in_value) { |
94 return new StringValue(in_value); | 94 return new StringValue(in_value); |
95 } | 95 } |
96 | 96 |
97 // static | 97 // static |
98 BinaryValue* Value::CreateBinaryValue(char* buffer, size_t size) { | 98 BinaryValue* Value::CreateBinaryValue(char* buffer, size_t size) { |
99 return BinaryValue::Create(buffer, size); | 99 return BinaryValue::Create(buffer, size); |
100 } | 100 } |
101 | 101 |
102 bool Value::GetAsBoolean(bool* out_value) const { | 102 bool Value::GetAsBoolean(bool* out_value) const { |
103 return false; | 103 return false; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 *out_value = integer_value_; | 175 *out_value = integer_value_; |
176 return (IsType(TYPE_INTEGER)); | 176 return (IsType(TYPE_INTEGER)); |
177 } | 177 } |
178 | 178 |
179 bool FundamentalValue::GetAsReal(double* out_value) const { | 179 bool FundamentalValue::GetAsReal(double* out_value) const { |
180 if (out_value && IsType(TYPE_REAL)) | 180 if (out_value && IsType(TYPE_REAL)) |
181 *out_value = real_value_; | 181 *out_value = real_value_; |
182 return (IsType(TYPE_REAL)); | 182 return (IsType(TYPE_REAL)); |
183 } | 183 } |
184 | 184 |
185 Value* FundamentalValue::DeepCopy() const { | 185 FundamentalValue* FundamentalValue::DeepCopy() const { |
186 switch (GetType()) { | 186 switch (GetType()) { |
187 case TYPE_BOOLEAN: | 187 case TYPE_BOOLEAN: |
188 return CreateBooleanValue(boolean_value_); | 188 return CreateBooleanValue(boolean_value_); |
189 | 189 |
190 case TYPE_INTEGER: | 190 case TYPE_INTEGER: |
191 return CreateIntegerValue(integer_value_); | 191 return CreateIntegerValue(integer_value_); |
192 | 192 |
193 case TYPE_REAL: | 193 case TYPE_REAL: |
194 return CreateRealValue(real_value_); | 194 return CreateRealValue(real_value_); |
195 | 195 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 *out_value = value_; | 243 *out_value = value_; |
244 return true; | 244 return true; |
245 } | 245 } |
246 | 246 |
247 bool StringValue::GetAsString(string16* out_value) const { | 247 bool StringValue::GetAsString(string16* out_value) const { |
248 if (out_value) | 248 if (out_value) |
249 *out_value = UTF8ToUTF16(value_); | 249 *out_value = UTF8ToUTF16(value_); |
250 return true; | 250 return true; |
251 } | 251 } |
252 | 252 |
253 Value* StringValue::DeepCopy() const { | 253 StringValue* StringValue::DeepCopy() const { |
254 return CreateStringValue(value_); | 254 return CreateStringValue(value_); |
255 } | 255 } |
256 | 256 |
257 bool StringValue::Equals(const Value* other) const { | 257 bool StringValue::Equals(const Value* other) const { |
258 if (other->GetType() != GetType()) | 258 if (other->GetType() != GetType()) |
259 return false; | 259 return false; |
260 std::string lhs, rhs; | 260 std::string lhs, rhs; |
261 return GetAsString(&lhs) && other->GetAsString(&rhs) && lhs == rhs; | 261 return GetAsString(&lhs) && other->GetAsString(&rhs) && lhs == rhs; |
262 } | 262 } |
263 | 263 |
(...skipping 17 matching lines...) Expand all Loading... |
281 BinaryValue* BinaryValue::CreateWithCopiedBuffer(const char* buffer, | 281 BinaryValue* BinaryValue::CreateWithCopiedBuffer(const char* buffer, |
282 size_t size) { | 282 size_t size) { |
283 if (!buffer) | 283 if (!buffer) |
284 return NULL; | 284 return NULL; |
285 | 285 |
286 char* buffer_copy = new char[size]; | 286 char* buffer_copy = new char[size]; |
287 memcpy(buffer_copy, buffer, size); | 287 memcpy(buffer_copy, buffer, size); |
288 return new BinaryValue(buffer_copy, size); | 288 return new BinaryValue(buffer_copy, size); |
289 } | 289 } |
290 | 290 |
291 Value* BinaryValue::DeepCopy() const { | 291 BinaryValue* BinaryValue::DeepCopy() const { |
292 return CreateWithCopiedBuffer(buffer_, size_); | 292 return CreateWithCopiedBuffer(buffer_, size_); |
293 } | 293 } |
294 | 294 |
295 bool BinaryValue::Equals(const Value* other) const { | 295 bool BinaryValue::Equals(const Value* other) const { |
296 if (other->GetType() != GetType()) | 296 if (other->GetType() != GetType()) |
297 return false; | 297 return false; |
298 const BinaryValue* other_binary = static_cast<const BinaryValue*>(other); | 298 const BinaryValue* other_binary = static_cast<const BinaryValue*>(other); |
299 if (other_binary->size_ != size_) | 299 if (other_binary->size_ != size_) |
300 return false; | 300 return false; |
301 return !memcmp(buffer_, other_binary->buffer_, size_); | 301 return !memcmp(buffer_, other_binary->buffer_, size_); |
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 static_cast<const DictionaryValue*>(merge_value)); | 639 static_cast<const DictionaryValue*>(merge_value)); |
640 continue; | 640 continue; |
641 } | 641 } |
642 } | 642 } |
643 // All other cases: Make a copy and hook it up. | 643 // All other cases: Make a copy and hook it up. |
644 SetWithoutPathExpansion(*key, merge_value->DeepCopy()); | 644 SetWithoutPathExpansion(*key, merge_value->DeepCopy()); |
645 } | 645 } |
646 } | 646 } |
647 } | 647 } |
648 | 648 |
649 Value* DictionaryValue::DeepCopy() const { | 649 DictionaryValue* DictionaryValue::DeepCopy() const { |
650 DictionaryValue* result = new DictionaryValue; | 650 DictionaryValue* result = new DictionaryValue; |
651 | 651 |
652 for (ValueMap::const_iterator current_entry(dictionary_.begin()); | 652 for (ValueMap::const_iterator current_entry(dictionary_.begin()); |
653 current_entry != dictionary_.end(); ++current_entry) { | 653 current_entry != dictionary_.end(); ++current_entry) { |
654 result->SetWithoutPathExpansion(current_entry->first, | 654 result->SetWithoutPathExpansion(current_entry->first, |
655 current_entry->second->DeepCopy()); | 655 current_entry->second->DeepCopy()); |
656 } | 656 } |
657 | 657 |
658 return result; | 658 return result; |
659 } | 659 } |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 list_.insert(list_.begin() + index, in_value); | 855 list_.insert(list_.begin() + index, in_value); |
856 return true; | 856 return true; |
857 } | 857 } |
858 | 858 |
859 bool ListValue::GetAsList(ListValue** out_value) { | 859 bool ListValue::GetAsList(ListValue** out_value) { |
860 if (out_value) | 860 if (out_value) |
861 *out_value = this; | 861 *out_value = this; |
862 return true; | 862 return true; |
863 } | 863 } |
864 | 864 |
865 Value* ListValue::DeepCopy() const { | 865 ListValue* ListValue::DeepCopy() const { |
866 ListValue* result = new ListValue; | 866 ListValue* result = new ListValue; |
867 | 867 |
868 for (ValueVector::const_iterator i(list_.begin()); i != list_.end(); ++i) | 868 for (ValueVector::const_iterator i(list_.begin()); i != list_.end(); ++i) |
869 result->Append((*i)->DeepCopy()); | 869 result->Append((*i)->DeepCopy()); |
870 | 870 |
871 return result; | 871 return result; |
872 } | 872 } |
873 | 873 |
874 bool ListValue::Equals(const Value* other) const { | 874 bool ListValue::Equals(const Value* other) const { |
875 if (other->GetType() != GetType()) | 875 if (other->GetType() != GetType()) |
876 return false; | 876 return false; |
877 | 877 |
878 const ListValue* other_list = | 878 const ListValue* other_list = |
879 static_cast<const ListValue*>(other); | 879 static_cast<const ListValue*>(other); |
880 const_iterator lhs_it, rhs_it; | 880 const_iterator lhs_it, rhs_it; |
881 for (lhs_it = begin(), rhs_it = other_list->begin(); | 881 for (lhs_it = begin(), rhs_it = other_list->begin(); |
882 lhs_it != end() && rhs_it != other_list->end(); | 882 lhs_it != end() && rhs_it != other_list->end(); |
883 ++lhs_it, ++rhs_it) { | 883 ++lhs_it, ++rhs_it) { |
884 if (!(*lhs_it)->Equals(*rhs_it)) | 884 if (!(*lhs_it)->Equals(*rhs_it)) |
885 return false; | 885 return false; |
886 } | 886 } |
887 if (lhs_it != end() || rhs_it != other_list->end()) | 887 if (lhs_it != end() || rhs_it != other_list->end()) |
888 return false; | 888 return false; |
889 | 889 |
890 return true; | 890 return true; |
891 } | 891 } |
892 | 892 |
893 ValueSerializer::~ValueSerializer() { | 893 ValueSerializer::~ValueSerializer() { |
894 } | 894 } |
OLD | NEW |