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 12 matching lines...) Expand all Loading... |
23 #include <iosfwd> | 23 #include <iosfwd> |
24 #include <map> | 24 #include <map> |
25 #include <memory> | 25 #include <memory> |
26 #include <string> | 26 #include <string> |
27 #include <utility> | 27 #include <utility> |
28 #include <vector> | 28 #include <vector> |
29 | 29 |
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/memory/manual_constructor.h" |
33 #include "base/strings/string16.h" | 34 #include "base/strings/string16.h" |
34 #include "base/strings/string_piece.h" | 35 #include "base/strings/string_piece.h" |
35 | 36 |
36 namespace base { | 37 namespace base { |
37 | 38 |
38 class BinaryValue; | 39 class BinaryValue; |
39 class DictionaryValue; | 40 class DictionaryValue; |
40 class FundamentalValue; | 41 class FundamentalValue; |
41 class ListValue; | 42 class ListValue; |
42 class StringValue; | 43 class StringValue; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 bool is_double() const { return type() == TYPE_DOUBLE; } | 86 bool is_double() const { return type() == TYPE_DOUBLE; } |
86 bool is_string() const { return type() == TYPE_STRING; } | 87 bool is_string() const { return type() == TYPE_STRING; } |
87 bool is_blob() const { return type() == TYPE_BINARY; } | 88 bool is_blob() const { return type() == TYPE_BINARY; } |
88 bool is_dict() const { return type() == TYPE_DICTIONARY; } | 89 bool is_dict() const { return type() == TYPE_DICTIONARY; } |
89 bool is_list() const { return type() == TYPE_LIST; } | 90 bool is_list() const { return type() == TYPE_LIST; } |
90 | 91 |
91 // These will all fatally assert if the type doesn't match. | 92 // These will all fatally assert if the type doesn't match. |
92 bool GetBool() const; | 93 bool GetBool() const; |
93 int GetInt() const; | 94 int GetInt() const; |
94 double GetDouble() const; // Implicitly converts from int if necessary. | 95 double GetDouble() const; // Implicitly converts from int if necessary. |
| 96 // Returns |string_value_| as a pointer or reference. |
| 97 std::string* GetString(); |
| 98 const std::string& GetString() const; |
95 | 99 |
96 // These methods allow the convenient retrieval of the contents of the Value. | 100 // These methods allow the convenient retrieval of the contents of the Value. |
97 // If the current object can be converted into the given type, the value is | 101 // If the current object can be converted into the given type, the value is |
98 // returned through the |out_value| parameter and true is returned; | 102 // returned through the |out_value| parameter and true is returned; |
99 // otherwise, false is returned and |out_value| is unchanged. | 103 // otherwise, false is returned and |out_value| is unchanged. |
100 virtual bool GetAsBoolean(bool* out_value) const; | 104 virtual bool GetAsBoolean(bool* out_value) const; |
101 virtual bool GetAsInteger(int* out_value) const; | 105 virtual bool GetAsInteger(int* out_value) const; |
102 virtual bool GetAsDouble(double* out_value) const; | 106 virtual bool GetAsDouble(double* out_value) const; |
103 virtual bool GetAsString(std::string* out_value) const; | 107 virtual bool GetAsString(std::string* out_value) const; |
104 virtual bool GetAsString(string16* out_value) const; | 108 virtual bool GetAsString(string16* out_value) const; |
(...skipping 26 matching lines...) Expand all Loading... |
131 protected: | 135 protected: |
132 // These aren't safe for end-users, but they are useful for subclasses. | 136 // These aren't safe for end-users, but they are useful for subclasses. |
133 explicit Value(Type type); | 137 explicit Value(Type type); |
134 Value(const Value& that); | 138 Value(const Value& that); |
135 Value& operator=(const Value& that); | 139 Value& operator=(const Value& that); |
136 | 140 |
137 // TODO(brettw) move to public when FundamentalValue is gone. | 141 // TODO(brettw) move to public when FundamentalValue is gone. |
138 Value(bool in_bool); | 142 Value(bool in_bool); |
139 Value(int in_int); | 143 Value(int in_int); |
140 Value(double in_double); | 144 Value(double in_double); |
| 145 // TODO(jdoerrie) move to public when StringValue is gone. |
| 146 Value(const char* in_string); // Value(bool in_bool) shadows otherwise |
| 147 Value(StringPiece in_string); |
| 148 Value(const string16& in_string); |
141 | 149 |
142 private: | 150 private: |
143 Type type_; | 151 Type type_; |
144 | 152 |
145 union { | 153 union { |
146 bool bool_value_; | 154 bool bool_value_; |
147 int int_value_; | 155 int int_value_; |
148 double double_value_; | 156 double double_value_; |
| 157 ManualConstructor<std::string> string_value_; |
149 }; | 158 }; |
150 }; | 159 }; |
151 | 160 |
152 // FundamentalValue represents the simple fundamental types of values. | 161 // FundamentalValue represents the simple fundamental types of values. |
153 // TODO(brettw) remove when callers are updated to use raw Value. | 162 // TODO(brettw) remove when callers are updated to use raw Value. |
154 class BASE_EXPORT FundamentalValue : public Value { | 163 class BASE_EXPORT FundamentalValue : public Value { |
155 public: | 164 public: |
156 explicit FundamentalValue(bool in_value); | 165 explicit FundamentalValue(bool in_value); |
157 explicit FundamentalValue(int in_value); | 166 explicit FundamentalValue(int in_value); |
158 explicit FundamentalValue(double in_value); | 167 explicit FundamentalValue(double in_value); |
159 ~FundamentalValue() override; | 168 ~FundamentalValue() override; |
160 }; | 169 }; |
161 | 170 |
| 171 // TODO(jdoerrie) remove when callers are updated to use raw Value. |
162 class BASE_EXPORT StringValue : public Value { | 172 class BASE_EXPORT StringValue : public Value { |
163 public: | 173 public: |
164 // Initializes a StringValue with a UTF-8 narrow character string. | 174 // Initializes a StringValue with a UTF-8 narrow character string. |
165 explicit StringValue(StringPiece in_value); | 175 explicit StringValue(StringPiece in_value); |
166 | 176 |
167 // Initializes a StringValue with a string16. | 177 // Initializes a StringValue with a string16. |
168 explicit StringValue(const string16& in_value); | 178 explicit StringValue(const string16& in_value); |
169 | 179 |
170 ~StringValue() override; | 180 ~StringValue() override; |
171 | |
172 // Returns |value_| as a pointer or reference. | |
173 std::string* GetString(); | |
174 const std::string& GetString() const; | |
175 | |
176 // Overridden from Value: | |
177 bool GetAsString(std::string* out_value) const override; | |
178 bool GetAsString(string16* out_value) const override; | |
179 bool GetAsString(const StringValue** out_value) const override; | |
180 StringValue* DeepCopy() const override; | |
181 bool Equals(const Value* other) const override; | |
182 | |
183 private: | |
184 std::string value_; | |
185 }; | 181 }; |
186 | 182 |
187 class BASE_EXPORT BinaryValue: public Value { | 183 class BASE_EXPORT BinaryValue: public Value { |
188 public: | 184 public: |
189 // Creates a BinaryValue with a null buffer and size of 0. | 185 // Creates a BinaryValue with a null buffer and size of 0. |
190 BinaryValue(); | 186 BinaryValue(); |
191 | 187 |
192 // Creates a BinaryValue, taking ownership of the bytes pointed to by | 188 // Creates a BinaryValue, taking ownership of the bytes pointed to by |
193 // |buffer|. | 189 // |buffer|. |
194 BinaryValue(std::unique_ptr<char[]> buffer, size_t size); | 190 BinaryValue(std::unique_ptr<char[]> buffer, size_t size); |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 } | 565 } |
570 | 566 |
571 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, | 567 BASE_EXPORT inline std::ostream& operator<<(std::ostream& out, |
572 const ListValue& value) { | 568 const ListValue& value) { |
573 return out << static_cast<const Value&>(value); | 569 return out << static_cast<const Value&>(value); |
574 } | 570 } |
575 | 571 |
576 } // namespace base | 572 } // namespace base |
577 | 573 |
578 #endif // BASE_VALUES_H_ | 574 #endif // BASE_VALUES_H_ |
OLD | NEW |