Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Side by Side Diff: base/values.cc

Issue 18200: Flesh out ListValue class. (Closed)
Patch Set: Created 11 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/values.h ('k') | base/values_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/logging.h" 5 #include "base/logging.h"
6 #include "base/string_util.h" 6 #include "base/string_util.h"
7 #include "base/values.h" 7 #include "base/values.h"
8 8
9 ///////////////////// Value //////////////////// 9 ///////////////////// Value ////////////////////
10 10
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 void DictionaryValue::Clear() { 238 void DictionaryValue::Clear() {
239 ValueMap::iterator dict_iterator = dictionary_.begin(); 239 ValueMap::iterator dict_iterator = dictionary_.begin();
240 while (dict_iterator != dictionary_.end()) { 240 while (dict_iterator != dictionary_.end()) {
241 delete dict_iterator->second; 241 delete dict_iterator->second;
242 ++dict_iterator; 242 ++dict_iterator;
243 } 243 }
244 244
245 dictionary_.clear(); 245 dictionary_.clear();
246 } 246 }
247 247
248 bool DictionaryValue::HasKey(const std::wstring& key) { 248 bool DictionaryValue::HasKey(const std::wstring& key) const {
249 ValueMap::const_iterator current_entry = dictionary_.find(key); 249 ValueMap::const_iterator current_entry = dictionary_.find(key);
250 DCHECK((current_entry == dictionary_.end()) || current_entry->second); 250 DCHECK((current_entry == dictionary_.end()) || current_entry->second);
251 return current_entry != dictionary_.end(); 251 return current_entry != dictionary_.end();
252 } 252 }
253 253
254 void DictionaryValue::SetInCurrentNode(const std::wstring& key, 254 void DictionaryValue::SetInCurrentNode(const std::wstring& key,
255 Value* in_value) { 255 Value* in_value) {
256 // If there's an existing value here, we need to delete it, because 256 // If there's an existing value here, we need to delete it, because
257 // we own all our children. 257 // we own all our children.
258 if (HasKey(key)) { 258 if (HasKey(key)) {
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 bool ListValue::Get(size_t index, Value** out_value) const { 525 bool ListValue::Get(size_t index, Value** out_value) const {
526 if (index >= list_.size()) 526 if (index >= list_.size())
527 return false; 527 return false;
528 528
529 if (out_value) 529 if (out_value)
530 *out_value = list_[index]; 530 *out_value = list_[index];
531 531
532 return true; 532 return true;
533 } 533 }
534 534
535 bool ListValue::GetDictionary(size_t index, 535 bool ListValue::GetBoolean(size_t index, bool* bool_value) const {
536 DictionaryValue** out_value) const { 536 Value* value;
537 if (!Get(index, &value))
538 return false;
539
540 return value->GetAsBoolean(bool_value);
541 }
542
543 bool ListValue::GetInteger(size_t index, int* out_value) const {
544 Value* value;
545 if (!Get(index, &value))
546 return false;
547
548 return value->GetAsInteger(out_value);
549 }
550
551 bool ListValue::GetReal(size_t index, double* out_value) const {
552 Value* value;
553 if (!Get(index, &value))
554 return false;
555
556 return value->GetAsReal(out_value);
557 }
558
559 bool ListValue::GetString(size_t index, std::string* out_value) const {
560 Value* value;
561 if (!Get(index, &value))
562 return false;
563
564 return value->GetAsString(out_value);
565 }
566
567 bool ListValue::GetBinary(size_t index, BinaryValue** out_value) const {
568 Value* value;
569 bool result = Get(index, &value);
570 if (!result || !value->IsType(TYPE_BINARY))
571 return false;
572
573 if (out_value)
574 *out_value = static_cast<BinaryValue*>(value);
575
576 return true;
577 }
578
579 bool ListValue::GetDictionary(size_t index, DictionaryValue** out_value) const {
537 Value* value; 580 Value* value;
538 bool result = Get(index, &value); 581 bool result = Get(index, &value);
539 if (!result || !value->IsType(TYPE_DICTIONARY)) 582 if (!result || !value->IsType(TYPE_DICTIONARY))
540 return false; 583 return false;
541 584
542 if (out_value) 585 if (out_value)
543 *out_value = static_cast<DictionaryValue*>(value); 586 *out_value = static_cast<DictionaryValue*>(value);
544 587
545 return true; 588 return true;
546 } 589 }
547 590
591 bool ListValue::GetList(size_t index, ListValue** out_value) const {
592 Value* value;
593 bool result = Get(index, &value);
594 if (!result || !value->IsType(TYPE_LIST))
595 return false;
596
597 if (out_value)
598 *out_value = static_cast<ListValue*>(value);
599
600 return true;
601 }
602
548 bool ListValue::Remove(size_t index, Value** out_value) { 603 bool ListValue::Remove(size_t index, Value** out_value) {
549 if (index >= list_.size()) 604 if (index >= list_.size())
550 return false; 605 return false;
551 606
552 if (out_value) 607 if (out_value)
553 *out_value = list_[index]; 608 *out_value = list_[index];
554 else 609 else
555 delete list_[index]; 610 delete list_[index];
556 611
557 ValueVector::iterator entry = list_.begin(); 612 ValueVector::iterator entry = list_.begin();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 ++lhs_it, ++rhs_it) { 645 ++lhs_it, ++rhs_it) {
591 if (!(*lhs_it)->Equals(*rhs_it)) 646 if (!(*lhs_it)->Equals(*rhs_it))
592 return false; 647 return false;
593 } 648 }
594 if (lhs_it != end() || rhs_it != other_list->end()) 649 if (lhs_it != end() || rhs_it != other_list->end())
595 return false; 650 return false;
596 651
597 return true; 652 return true;
598 } 653 }
599 654
OLDNEW
« no previous file with comments | « base/values.h ('k') | base/values_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698