| 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 // 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 19 matching lines...) Expand all  Loading... | 
| 30 #include "base/base_export.h" | 30 #include "base/base_export.h" | 
| 31 #include "base/compiler_specific.h" | 31 #include "base/compiler_specific.h" | 
| 32 #include "base/macros.h" | 32 #include "base/macros.h" | 
| 33 #include "base/strings/string16.h" | 33 #include "base/strings/string16.h" | 
| 34 #include "base/strings/string_piece.h" | 34 #include "base/strings/string_piece.h" | 
| 35 | 35 | 
| 36 namespace base { | 36 namespace base { | 
| 37 | 37 | 
| 38 class BinaryValue; | 38 class BinaryValue; | 
| 39 class DictionaryValue; | 39 class DictionaryValue; | 
| 40 class FundamentalValue; |  | 
| 41 class ListValue; | 40 class ListValue; | 
| 42 class StringValue; | 41 class StringValue; | 
| 43 class Value; | 42 class Value; | 
| 44 | 43 | 
| 45 // The Value class is the base class for Values. A Value can be instantiated | 44 // The Value class is the base class for Values. A Value can be instantiated | 
| 46 // via the Create*Value() factory methods, or by directly creating instances of | 45 // via the Create*Value() factory methods, or by directly creating instances of | 
| 47 // the subclasses. | 46 // the subclasses. | 
| 48 // | 47 // | 
| 49 // See the file-level comment above for more information. | 48 // See the file-level comment above for more information. | 
| 50 class BASE_EXPORT Value { | 49 class BASE_EXPORT Value { | 
| 51  public: | 50  public: | 
| 52   enum Type { | 51   enum Type { | 
| 53     TYPE_NULL = 0, | 52     TYPE_NULL = 0, | 
| 54     TYPE_BOOLEAN, | 53     TYPE_BOOLEAN, | 
| 55     TYPE_INTEGER, | 54     TYPE_INTEGER, | 
| 56     TYPE_DOUBLE, | 55     TYPE_DOUBLE, | 
| 57     TYPE_STRING, | 56     TYPE_STRING, | 
| 58     TYPE_BINARY, | 57     TYPE_BINARY, | 
| 59     TYPE_DICTIONARY, | 58     TYPE_DICTIONARY, | 
| 60     TYPE_LIST | 59     TYPE_LIST | 
| 61     // Note: Do not add more types. See the file-level comment above for why. | 60     // Note: Do not add more types. See the file-level comment above for why. | 
| 62   }; | 61   }; | 
| 63 | 62 | 
| 64   Value();  // A null value. | 63   Value();  // A null value. | 
|  | 64   Value(bool in_bool); | 
|  | 65   Value(int in_int); | 
|  | 66   Value(double in_double); | 
| 65 | 67 | 
| 66   virtual ~Value(); | 68   virtual ~Value(); | 
| 67 | 69 | 
| 68   static std::unique_ptr<Value> CreateNullValue(); | 70   static std::unique_ptr<Value> CreateNullValue(); | 
| 69 | 71 | 
| 70   // Returns the name for a given |type|. | 72   // Returns the name for a given |type|. | 
| 71   static const char* GetTypeName(Type type); | 73   static const char* GetTypeName(Type type); | 
| 72 | 74 | 
| 73   // Returns the type of the value stored by the current Value object. | 75   // Returns the type of the value stored by the current Value object. | 
| 74   // Each type will be implemented by only one subclass of Value, so it's | 76   // Each type will be implemented by only one subclass of Value, so it's | 
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 127   // Compares if two Value objects have equal contents. Can handle NULLs. | 129   // Compares if two Value objects have equal contents. Can handle NULLs. | 
| 128   // NULLs are considered equal but different from Value::CreateNullValue(). | 130   // NULLs are considered equal but different from Value::CreateNullValue(). | 
| 129   static bool Equals(const Value* a, const Value* b); | 131   static bool Equals(const Value* a, const Value* b); | 
| 130 | 132 | 
| 131  protected: | 133  protected: | 
| 132   // These aren't safe for end-users, but they are useful for subclasses. | 134   // These aren't safe for end-users, but they are useful for subclasses. | 
| 133   explicit Value(Type type); | 135   explicit Value(Type type); | 
| 134   Value(const Value& that); | 136   Value(const Value& that); | 
| 135   Value& operator=(const Value& that); | 137   Value& operator=(const Value& that); | 
| 136 | 138 | 
| 137   // TODO(brettw) move to public when FundamentalValue is gone. |  | 
| 138   Value(bool in_bool); |  | 
| 139   Value(int in_int); |  | 
| 140   Value(double in_double); |  | 
| 141 |  | 
| 142  private: | 139  private: | 
| 143   Type type_; | 140   Type type_; | 
| 144 | 141 | 
| 145   union { | 142   union { | 
| 146     bool bool_value_; | 143     bool bool_value_; | 
| 147     int int_value_; | 144     int int_value_; | 
| 148     double double_value_; | 145     double double_value_; | 
| 149   }; | 146   }; | 
| 150 }; | 147 }; | 
| 151 | 148 | 
| 152 // FundamentalValue represents the simple fundamental types of values. |  | 
| 153 // TODO(brettw) remove when callers are updated to use raw Value. |  | 
| 154 class BASE_EXPORT FundamentalValue : public Value { |  | 
| 155  public: |  | 
| 156   explicit FundamentalValue(bool in_value); |  | 
| 157   explicit FundamentalValue(int in_value); |  | 
| 158   explicit FundamentalValue(double in_value); |  | 
| 159   ~FundamentalValue() override; |  | 
| 160 }; |  | 
| 161 |  | 
| 162 class BASE_EXPORT StringValue : public Value { | 149 class BASE_EXPORT StringValue : public Value { | 
| 163  public: | 150  public: | 
| 164   // Initializes a StringValue with a UTF-8 narrow character string. | 151   // Initializes a StringValue with a UTF-8 narrow character string. | 
| 165   explicit StringValue(StringPiece in_value); | 152   explicit StringValue(StringPiece in_value); | 
| 166 | 153 | 
| 167   // Initializes a StringValue with a string16. | 154   // Initializes a StringValue with a string16. | 
| 168   explicit StringValue(const string16& in_value); | 155   explicit StringValue(const string16& in_value); | 
| 169 | 156 | 
| 170   ~StringValue() override; | 157   ~StringValue() override; | 
| 171 | 158 | 
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 547                                              std::string* error_str) = 0; | 534                                              std::string* error_str) = 0; | 
| 548 }; | 535 }; | 
| 549 | 536 | 
| 550 // Stream operator so Values can be used in assertion statements.  In order that | 537 // Stream operator so Values can be used in assertion statements.  In order that | 
| 551 // gtest uses this operator to print readable output on test failures, we must | 538 // gtest uses this operator to print readable output on test failures, we must | 
| 552 // override each specific type. Otherwise, the default template implementation | 539 // override each specific type. Otherwise, the default template implementation | 
| 553 // is preferred over an upcast. | 540 // is preferred over an upcast. | 
| 554 BASE_EXPORT std::ostream& operator<<(std::ostream& out, const Value& value); | 541 BASE_EXPORT std::ostream& operator<<(std::ostream& out, const Value& value); | 
| 555 | 542 | 
| 556 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 543 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 
| 557                                             const FundamentalValue& value) { |  | 
| 558   return out << static_cast<const Value&>(value); |  | 
| 559 } |  | 
| 560 |  | 
| 561 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, |  | 
| 562                                             const StringValue& value) { | 544                                             const StringValue& value) { | 
| 563   return out << static_cast<const Value&>(value); | 545   return out << static_cast<const Value&>(value); | 
| 564 } | 546 } | 
| 565 | 547 | 
| 566 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 548 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 
| 567                                             const DictionaryValue& value) { | 549                                             const DictionaryValue& value) { | 
| 568   return out << static_cast<const Value&>(value); | 550   return out << static_cast<const Value&>(value); | 
| 569 } | 551 } | 
| 570 | 552 | 
| 571 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 553 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 
| 572                                             const ListValue& value) { | 554                                             const ListValue& value) { | 
| 573   return out << static_cast<const Value&>(value); | 555   return out << static_cast<const Value&>(value); | 
| 574 } | 556 } | 
| 575 | 557 | 
| 576 }  // namespace base | 558 }  // namespace base | 
| 577 | 559 | 
| 578 #endif  // BASE_VALUES_H_ | 560 #endif  // BASE_VALUES_H_ | 
| OLD | NEW | 
|---|