Chromium Code Reviews| Index: base/values.h |
| diff --git a/base/values.h b/base/values.h |
| index a695536bfd9a6f8cbb8fd8b3a5e778331e455177..b335e5ca0885d613548223e0a49008bb825405c3 100644 |
| --- a/base/values.h |
| +++ b/base/values.h |
| @@ -30,6 +30,7 @@ |
| #include "base/base_export.h" |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| +#include "base/memory/manual_constructor.h" |
| #include "base/strings/string16.h" |
| #include "base/strings/string_piece.h" |
| @@ -92,6 +93,9 @@ class BASE_EXPORT Value { |
| bool GetBool() const; |
| int GetInt() const; |
| double GetDouble() const; // Implicitly converts from int if necessary. |
| + // Returns |string_value_| as a non-const or const reference. |
| + std::string& GetString(); |
|
jdoerrie
2016/12/16 09:54:37
For now I added the non-const ref version for simp
vabr (Chromium)
2016/12/16 17:00:56
Just for context: part of the discussion was also
|
| + const std::string& GetString() const; |
| // These methods allow the convenient retrieval of the contents of the Value. |
| // If the current object can be converted into the given type, the value is |
| @@ -141,15 +145,27 @@ class BASE_EXPORT Value { |
| explicit Value(int in_int); |
| explicit Value(double in_double); |
| - private: |
| - void InternalCopyFrom(const Value& that); |
| + // TODO(crbug.com/646113) move to public when StringValue is gone. |
| + explicit Value(StringPiece in_string); |
|
jdoerrie
2016/12/16 09:54:37
Given that we need an explicit Value::Value(const
vabr (Chromium)
2016/12/16 17:00:56
Definitely in favour of replacing by string-based
|
| + explicit Value(const string16& in_string); |
| + |
| + // Required despite StringPiece because otherwise the compiler will |
| + // choose the Value(bool) constructor. |
| + explicit Value(const char* in_string); |
|
vabr (Chromium)
2016/12/16 17:00:55
As a TODO to be done in a separate CL, could we tr
jdoerrie
2016/12/19 11:54:09
If it is your goal to stop being able to do |Value
vabr (Chromium)
2016/12/19 13:00:56
Good to know about the error. However, because it
|
| + // TODO(crbug.com/646113): Make this private once JSONStringValue is removed. |
| Type type_; |
| + private: |
| + void InternalCopyFrom(const Value& that); |
| + void InternalMoveFrom(Value&& that); |
| + void InternalCleanup(); |
| + |
| union { |
| bool bool_value_; |
| int int_value_; |
| double double_value_; |
| + ManualConstructor<std::string> string_value_; |
| }; |
| }; |
| @@ -163,6 +179,7 @@ class BASE_EXPORT FundamentalValue : public Value { |
| ~FundamentalValue() override; |
| }; |
| +// TODO(crbug.com/64113) remove when callers are updated to use raw Value. |
| class BASE_EXPORT StringValue : public Value { |
|
vabr (Chromium)
2016/12/16 17:00:56
Could we actually make this a typedef instead? (Fo
jdoerrie
2016/12/19 11:54:09
This is true, but it probably also would require m
vabr (Chromium)
2016/12/19 13:00:56
I'm not sure the comment about safety applies to a
|
| public: |
| // Initializes a StringValue with a UTF-8 narrow character string. |
| @@ -170,22 +187,6 @@ class BASE_EXPORT StringValue : public Value { |
| // Initializes a StringValue with a string16. |
| explicit StringValue(const string16& in_value); |
| - |
| - ~StringValue() override; |
| - |
| - // Returns |value_| as a pointer or reference. |
| - std::string* GetString(); |
| - const std::string& GetString() const; |
| - |
| - // Overridden from Value: |
| - bool GetAsString(std::string* out_value) const override; |
| - bool GetAsString(string16* out_value) const override; |
| - bool GetAsString(const StringValue** out_value) const override; |
| - StringValue* DeepCopy() const override; |
| - bool Equals(const Value* other) const override; |
| - |
| - private: |
| - std::string value_; |
| }; |
| class BASE_EXPORT BinaryValue: public Value { |