Index: base/values.h |
diff --git a/base/values.h b/base/values.h |
index a30791bc6357c671f56c02c0c39e61027c11aabb..b9c3ecf3bffcf43963aacabcb8159347dc8770a4 100644 |
--- a/base/values.h |
+++ b/base/values.h |
@@ -40,8 +40,8 @@ |
namespace base { |
class BinaryValue; |
+class BooleanValue; |
class DictionaryValue; |
-class FundamentalValue; |
class ListValue; |
class StringValue; |
class Value; |
@@ -49,9 +49,7 @@ class Value; |
typedef std::vector<Value*> ValueVector; |
typedef std::map<std::string, Value*> ValueMap; |
-// The Value class is the base class for Values. A Value can be instantiated |
-// via the Create*Value() factory methods, or by directly creating instances of |
-// the subclasses. |
+// The Value class is the base class for Values. |
class BASE_EXPORT Value { |
public: |
enum Type { |
@@ -67,16 +65,6 @@ class BASE_EXPORT Value { |
virtual ~Value(); |
- // Convenience methods for creating Value objects for various |
- // kinds of values without thinking about which class implements them. |
- // These can always be expected to return a valid Value*. |
- static Value* CreateNullValue(); |
- static FundamentalValue* CreateBooleanValue(bool in_value); |
- static FundamentalValue* CreateIntegerValue(int in_value); |
- static FundamentalValue* CreateDoubleValue(double in_value); |
- static StringValue* CreateStringValue(const std::string& in_value); |
- static StringValue* CreateStringValue(const string16& in_value); |
- |
// Returns the type of the value stored by the current Value object. |
// Each type will be implemented by only one subclass of Value, so it's |
// safe to use the Type to determine whether you can cast from |
@@ -110,12 +98,12 @@ class BASE_EXPORT Value { |
virtual bool Equals(const Value* other) const; |
// Compares if two Value objects have equal contents. Can handle NULLs. |
- // NULLs are considered equal but different from Value::CreateNullValue(). |
+ // NULLs are considered equal but different from NullValue. |
static bool Equals(const Value* a, const Value* b); |
protected: |
- // This isn't safe for end-users (they should use the Create*Value() |
- // static methods above), but it's useful for subclasses. |
+ // This isn't safe for end-users (they should use the *Value::New()), |
+ // but it's useful for subclasses. |
explicit Value(Type type); |
private: |
@@ -126,29 +114,50 @@ class BASE_EXPORT Value { |
DISALLOW_COPY_AND_ASSIGN(Value); |
}; |
-// FundamentalValue represents the simple fundamental types of values. |
-class BASE_EXPORT FundamentalValue : public Value { |
+BASE_EXPORT Value* NullValue(); |
+BASE_EXPORT BooleanValue* TrueValue(); |
+BASE_EXPORT BooleanValue* FalseValue(); |
+ |
+class BASE_EXPORT BooleanValue : public Value { |
public: |
- explicit FundamentalValue(bool in_value); |
- explicit FundamentalValue(int in_value); |
- explicit FundamentalValue(double in_value); |
- virtual ~FundamentalValue(); |
+ explicit BooleanValue(bool value); |
+ virtual ~BooleanValue(); |
+ |
+ static BooleanValue* New(bool value); |
// Overridden from Value: |
virtual bool GetAsBoolean(bool* out_value) const OVERRIDE; |
+ virtual BooleanValue* DeepCopy() const OVERRIDE; |
+ virtual bool Equals(const Value* other) const OVERRIDE; |
+ |
+ private: |
+ bool value_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BooleanValue); |
+}; |
+ |
+class BASE_EXPORT NumberValue : public Value { |
+ public: |
+ explicit NumberValue(int value); |
+ explicit NumberValue(double value); |
+ virtual ~NumberValue(); |
+ |
+ static NumberValue* New(int value); |
+ static NumberValue* New(double value); |
+ |
+ // Overridden from Value: |
virtual bool GetAsInteger(int* out_value) const OVERRIDE; |
virtual bool GetAsDouble(double* out_value) const OVERRIDE; |
- virtual FundamentalValue* DeepCopy() const OVERRIDE; |
+ virtual NumberValue* DeepCopy() const OVERRIDE; |
virtual bool Equals(const Value* other) const OVERRIDE; |
private: |
union { |
- bool boolean_value_; |
int integer_value_; |
double double_value_; |
}; |
- DISALLOW_COPY_AND_ASSIGN(FundamentalValue); |
+ DISALLOW_COPY_AND_ASSIGN(NumberValue); |
}; |
class BASE_EXPORT StringValue : public Value { |
@@ -161,6 +170,9 @@ class BASE_EXPORT StringValue : public Value { |
virtual ~StringValue(); |
+ static StringValue* New(const std::string& value); |
+ static StringValue* New(const string16& value); |
+ |
// Overridden from Value: |
virtual bool GetAsString(std::string* out_value) const OVERRIDE; |
virtual bool GetAsString(string16* out_value) const OVERRIDE; |