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

Side by Side Diff: base/values.h

Issue 1141793003: Update from https://crrev.com/329939 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 7 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/tuple.h ('k') | base/values.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) 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 // This file specifies a recursive data storage class called Value intended for 5 // This file specifies a recursive data storage class called Value intended for
6 // storing settings and other persistable data. 6 // storing settings and other persistable data.
7 // 7 //
8 // A Value represents something that can be stored in JSON or passed to/from 8 // A Value represents something that can be stored in JSON or passed to/from
9 // JavaScript. As such, it is NOT a generalized variant type, since only the 9 // JavaScript. As such, it is NOT a generalized variant type, since only the
10 // types supported by JavaScript/JSON are supported. 10 // types supported by JavaScript/JSON are supported.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 TYPE_DOUBLE, 57 TYPE_DOUBLE,
58 TYPE_STRING, 58 TYPE_STRING,
59 TYPE_BINARY, 59 TYPE_BINARY,
60 TYPE_DICTIONARY, 60 TYPE_DICTIONARY,
61 TYPE_LIST 61 TYPE_LIST
62 // Note: Do not add more types. See the file-level comment above for why. 62 // Note: Do not add more types. See the file-level comment above for why.
63 }; 63 };
64 64
65 virtual ~Value(); 65 virtual ~Value();
66 66
67 static Value* CreateNullValue(); 67 static scoped_ptr<Value> CreateNullValue();
68 68
69 // Returns the type of the value stored by the current Value object. 69 // Returns the type of the value stored by the current Value object.
70 // Each type will be implemented by only one subclass of Value, so it's 70 // Each type will be implemented by only one subclass of Value, so it's
71 // safe to use the Type to determine whether you can cast from 71 // safe to use the Type to determine whether you can cast from
72 // Value* to (Implementing Class)*. Also, a Value object never changes 72 // Value* to (Implementing Class)*. Also, a Value object never changes
73 // its type after construction. 73 // its type after construction.
74 Type GetType() const { return type_; } 74 Type GetType() const { return type_; }
75 75
76 // Returns true if the current object represents a given type. 76 // Returns true if the current object represents a given type.
77 bool IsType(Type type) const { return type == type_; } 77 bool IsType(Type type) const { return type == type_; }
(...skipping 14 matching lines...) Expand all
92 virtual bool GetAsDictionary(DictionaryValue** out_value); 92 virtual bool GetAsDictionary(DictionaryValue** out_value);
93 virtual bool GetAsDictionary(const DictionaryValue** out_value) const; 93 virtual bool GetAsDictionary(const DictionaryValue** out_value) const;
94 // Note: Do not add more types. See the file-level comment above for why. 94 // Note: Do not add more types. See the file-level comment above for why.
95 95
96 // This creates a deep copy of the entire Value tree, and returns a pointer 96 // This creates a deep copy of the entire Value tree, and returns a pointer
97 // to the copy. The caller gets ownership of the copy, of course. 97 // to the copy. The caller gets ownership of the copy, of course.
98 // 98 //
99 // Subclasses return their own type directly in their overrides; 99 // Subclasses return their own type directly in their overrides;
100 // this works because C++ supports covariant return types. 100 // this works because C++ supports covariant return types.
101 virtual Value* DeepCopy() const; 101 virtual Value* DeepCopy() const;
102 // Preferred version of DeepCopy. TODO(estade): remove the above.
103 scoped_ptr<Value> CreateDeepCopy() const;
102 104
103 // Compares if two Value objects have equal contents. 105 // Compares if two Value objects have equal contents.
104 virtual bool Equals(const Value* other) const; 106 virtual bool Equals(const Value* other) const;
105 107
106 // Compares if two Value objects have equal contents. Can handle NULLs. 108 // Compares if two Value objects have equal contents. Can handle NULLs.
107 // NULLs are considered equal but different from Value::CreateNullValue(). 109 // NULLs are considered equal but different from Value::CreateNullValue().
108 static bool Equals(const Value* a, const Value* b); 110 static bool Equals(const Value* a, const Value* b);
109 111
110 protected: 112 protected:
111 // These aren't safe for end-users, but they are useful for subclasses. 113 // These aren't safe for end-users, but they are useful for subclasses.
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 const std::string& key() const { return it_->first; } 363 const std::string& key() const { return it_->first; }
362 const Value& value() const { return *it_->second; } 364 const Value& value() const { return *it_->second; }
363 365
364 private: 366 private:
365 const DictionaryValue& target_; 367 const DictionaryValue& target_;
366 ValueMap::const_iterator it_; 368 ValueMap::const_iterator it_;
367 }; 369 };
368 370
369 // Overridden from Value: 371 // Overridden from Value:
370 DictionaryValue* DeepCopy() const override; 372 DictionaryValue* DeepCopy() const override;
373 // Preferred version of DeepCopy. TODO(estade): remove the above.
374 scoped_ptr<DictionaryValue> CreateDeepCopy() const;
371 bool Equals(const Value* other) const override; 375 bool Equals(const Value* other) const override;
372 376
373 private: 377 private:
374 ValueMap dictionary_; 378 ValueMap dictionary_;
375 379
376 DISALLOW_COPY_AND_ASSIGN(DictionaryValue); 380 DISALLOW_COPY_AND_ASSIGN(DictionaryValue);
377 }; 381 };
378 382
379 // This type of Value represents a list of other Value values. 383 // This type of Value represents a list of other Value values.
380 class BASE_EXPORT ListValue : public Value { 384 class BASE_EXPORT ListValue : public Value {
(...skipping 12 matching lines...) Expand all
393 397
394 // Returns whether the list is empty. 398 // Returns whether the list is empty.
395 bool empty() const { return list_.empty(); } 399 bool empty() const { return list_.empty(); }
396 400
397 // Sets the list item at the given index to be the Value specified by 401 // Sets the list item at the given index to be the Value specified by
398 // the value given. If the index beyond the current end of the list, null 402 // the value given. If the index beyond the current end of the list, null
399 // Values will be used to pad out the list. 403 // Values will be used to pad out the list.
400 // Returns true if successful, or false if the index was negative or 404 // Returns true if successful, or false if the index was negative or
401 // the value is a null pointer. 405 // the value is a null pointer.
402 bool Set(size_t index, Value* in_value); 406 bool Set(size_t index, Value* in_value);
407 // Preferred version of the above. TODO(estade): remove the above.
408 bool Set(size_t index, scoped_ptr<Value> in_value);
403 409
404 // Gets the Value at the given index. Modifies |out_value| (and returns true) 410 // Gets the Value at the given index. Modifies |out_value| (and returns true)
405 // only if the index falls within the current list range. 411 // only if the index falls within the current list range.
406 // Note that the list always owns the Value passed out via |out_value|. 412 // Note that the list always owns the Value passed out via |out_value|.
407 // |out_value| is optional and will only be set if non-NULL. 413 // |out_value| is optional and will only be set if non-NULL.
408 bool Get(size_t index, const Value** out_value) const; 414 bool Get(size_t index, const Value** out_value) const;
409 bool Get(size_t index, Value** out_value); 415 bool Get(size_t index, Value** out_value);
410 416
411 // Convenience forms of Get(). Modifies |out_value| (and returns true) 417 // Convenience forms of Get(). Modifies |out_value| (and returns true)
412 // only if the index is valid and the Value at that index can be returned 418 // only if the index is valid and the Value at that index can be returned
(...skipping 25 matching lines...) Expand all
438 // if not found. 444 // if not found.
439 bool Remove(const Value& value, size_t* index); 445 bool Remove(const Value& value, size_t* index);
440 446
441 // Removes the element at |iter|. If |out_value| is NULL, the value will be 447 // Removes the element at |iter|. If |out_value| is NULL, the value will be
442 // deleted, otherwise ownership of the value is passed back to the caller. 448 // deleted, otherwise ownership of the value is passed back to the caller.
443 // Returns an iterator pointing to the location of the element that 449 // Returns an iterator pointing to the location of the element that
444 // followed the erased element. 450 // followed the erased element.
445 iterator Erase(iterator iter, scoped_ptr<Value>* out_value); 451 iterator Erase(iterator iter, scoped_ptr<Value>* out_value);
446 452
447 // Appends a Value to the end of the list. 453 // Appends a Value to the end of the list.
454 void Append(scoped_ptr<Value> in_value);
455 // Deprecated version of the above. TODO(estade): remove.
448 void Append(Value* in_value); 456 void Append(Value* in_value);
449 457
450 // Convenience forms of Append. 458 // Convenience forms of Append.
451 void AppendBoolean(bool in_value); 459 void AppendBoolean(bool in_value);
452 void AppendInteger(int in_value); 460 void AppendInteger(int in_value);
453 void AppendDouble(double in_value); 461 void AppendDouble(double in_value);
454 void AppendString(const std::string& in_value); 462 void AppendString(const std::string& in_value);
455 void AppendString(const string16& in_value); 463 void AppendString(const string16& in_value);
456 void AppendStrings(const std::vector<std::string>& in_values); 464 void AppendStrings(const std::vector<std::string>& in_values);
457 void AppendStrings(const std::vector<string16>& in_values); 465 void AppendStrings(const std::vector<string16>& in_values);
(...skipping 21 matching lines...) Expand all
479 487
480 const_iterator begin() const { return list_.begin(); } 488 const_iterator begin() const { return list_.begin(); }
481 const_iterator end() const { return list_.end(); } 489 const_iterator end() const { return list_.end(); }
482 490
483 // Overridden from Value: 491 // Overridden from Value:
484 bool GetAsList(ListValue** out_value) override; 492 bool GetAsList(ListValue** out_value) override;
485 bool GetAsList(const ListValue** out_value) const override; 493 bool GetAsList(const ListValue** out_value) const override;
486 ListValue* DeepCopy() const override; 494 ListValue* DeepCopy() const override;
487 bool Equals(const Value* other) const override; 495 bool Equals(const Value* other) const override;
488 496
497 // Preferred version of DeepCopy. TODO(estade): remove DeepCopy.
498 scoped_ptr<ListValue> CreateDeepCopy() const;
499
489 private: 500 private:
490 ValueVector list_; 501 ValueVector list_;
491 502
492 DISALLOW_COPY_AND_ASSIGN(ListValue); 503 DISALLOW_COPY_AND_ASSIGN(ListValue);
493 }; 504 };
494 505
495 // This interface is implemented by classes that know how to serialize 506 // This interface is implemented by classes that know how to serialize
496 // Value objects. 507 // Value objects.
497 class BASE_EXPORT ValueSerializer { 508 class BASE_EXPORT ValueSerializer {
498 public: 509 public:
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 } 549 }
539 550
540 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, 551 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out,
541 const ListValue& value) { 552 const ListValue& value) {
542 return out << static_cast<const Value&>(value); 553 return out << static_cast<const Value&>(value);
543 } 554 }
544 555
545 } // namespace base 556 } // namespace base
546 557
547 #endif // BASE_VALUES_H_ 558 #endif // BASE_VALUES_H_
OLDNEW
« no previous file with comments | « base/tuple.h ('k') | base/values.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698