OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 7 #include <algorithm> |
8 #include <ostream> | 8 #include <ostream> |
9 | 9 |
10 #include "base/float_util.h" | 10 #include "base/float_util.h" |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
299 | 299 |
300 bool StringValue::Equals(const Value* other) const { | 300 bool StringValue::Equals(const Value* other) const { |
301 if (other->GetType() != GetType()) | 301 if (other->GetType() != GetType()) |
302 return false; | 302 return false; |
303 std::string lhs, rhs; | 303 std::string lhs, rhs; |
304 return GetAsString(&lhs) && other->GetAsString(&rhs) && lhs == rhs; | 304 return GetAsString(&lhs) && other->GetAsString(&rhs) && lhs == rhs; |
305 } | 305 } |
306 | 306 |
307 ///////////////////// BinaryValue //////////////////// | 307 ///////////////////// BinaryValue //////////////////// |
308 | 308 |
309 BinaryValue::~BinaryValue() { | 309 BinaryValue::BinaryValue() |
310 DCHECK(buffer_); | 310 : Value(TYPE_BINARY), |
311 if (buffer_) | 311 buffer_(NULL), |
312 delete[] buffer_; | 312 size_(0) { |
313 } | 313 } |
314 | 314 |
315 // static | 315 BinaryValue::BinaryValue(scoped_array<char> buffer, size_t size) |
316 BinaryValue* BinaryValue::Create(char* buffer, size_t size) { | 316 : Value(TYPE_BINARY), |
317 if (!buffer) | 317 buffer_(buffer.release()), |
brettw
2013/01/03 22:01:23
Can you use .Pass() here instead?
rpaquay
2013/01/03 23:20:02
Done.
| |
318 return NULL; | 318 size_(size) { |
319 } | |
319 | 320 |
320 return new BinaryValue(buffer, size); | 321 BinaryValue::~BinaryValue() { |
321 } | 322 } |
322 | 323 |
323 // static | 324 // static |
324 BinaryValue* BinaryValue::CreateWithCopiedBuffer(const char* buffer, | 325 BinaryValue* BinaryValue::CreateWithCopiedBuffer(const char* buffer, |
325 size_t size) { | 326 size_t size) { |
326 if (!buffer) | |
327 return NULL; | |
328 | |
329 char* buffer_copy = new char[size]; | 327 char* buffer_copy = new char[size]; |
330 memcpy(buffer_copy, buffer, size); | 328 memcpy(buffer_copy, buffer, size); |
331 return new BinaryValue(buffer_copy, size); | 329 scoped_array<char> scoped_buffer_copy(buffer_copy); |
330 return new BinaryValue(scoped_buffer_copy.Pass(), size); | |
332 } | 331 } |
333 | 332 |
334 BinaryValue* BinaryValue::DeepCopy() const { | 333 BinaryValue* BinaryValue::DeepCopy() const { |
335 return CreateWithCopiedBuffer(buffer_, size_); | 334 return CreateWithCopiedBuffer(buffer_.get(), size_); |
336 } | 335 } |
337 | 336 |
338 bool BinaryValue::Equals(const Value* other) const { | 337 bool BinaryValue::Equals(const Value* other) const { |
339 if (other->GetType() != GetType()) | 338 if (other->GetType() != GetType()) |
340 return false; | 339 return false; |
341 const BinaryValue* other_binary = static_cast<const BinaryValue*>(other); | 340 const BinaryValue* other_binary = static_cast<const BinaryValue*>(other); |
342 if (other_binary->size_ != size_) | 341 if (other_binary->size_ != size_) |
343 return false; | 342 return false; |
344 return !memcmp(buffer_, other_binary->buffer_, size_); | 343 return !memcmp(GetBuffer(), other_binary->GetBuffer(), size_); |
345 } | |
346 | |
347 BinaryValue::BinaryValue(char* buffer, size_t size) | |
348 : Value(TYPE_BINARY), | |
349 buffer_(buffer), | |
350 size_(size) { | |
351 DCHECK(buffer_); | |
352 } | 344 } |
353 | 345 |
354 ///////////////////// DictionaryValue //////////////////// | 346 ///////////////////// DictionaryValue //////////////////// |
355 | 347 |
356 DictionaryValue::DictionaryValue() | 348 DictionaryValue::DictionaryValue() |
357 : Value(TYPE_DICTIONARY) { | 349 : Value(TYPE_DICTIONARY) { |
358 } | 350 } |
359 | 351 |
360 DictionaryValue::~DictionaryValue() { | 352 DictionaryValue::~DictionaryValue() { |
361 Clear(); | 353 Clear(); |
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1135 | 1127 |
1136 std::ostream& operator<<(std::ostream& out, const Value& value) { | 1128 std::ostream& operator<<(std::ostream& out, const Value& value) { |
1137 std::string json; | 1129 std::string json; |
1138 JSONWriter::WriteWithOptions(&value, | 1130 JSONWriter::WriteWithOptions(&value, |
1139 JSONWriter::OPTIONS_PRETTY_PRINT, | 1131 JSONWriter::OPTIONS_PRETTY_PRINT, |
1140 &json); | 1132 &json); |
1141 return out << json; | 1133 return out << json; |
1142 } | 1134 } |
1143 | 1135 |
1144 } // namespace base | 1136 } // namespace base |
OLD | NEW |