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

Side by Side Diff: base/values.h

Issue 2476493003: Remove FundamentalValue
Patch Set: Fix Created 4 years, 1 month 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/trace_event/trace_event_memory_overhead.cc ('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 19 matching lines...) Expand all
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
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
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_
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_memory_overhead.cc ('k') | base/values.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698