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

Unified Diff: base/values.h

Issue 2516363005: Inline StringValue into base::Value (Closed)
Patch Set: Rebase and Nits. Created 3 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/value_conversions.h ('k') | base/values.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/values.h
diff --git a/base/values.h b/base/values.h
index 22d6b231cc21ad3f7868c98994c1f4015f8238ee..e021f7be23a4ba438056448ddbd67cac81d6237c 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"
@@ -38,9 +39,9 @@ namespace base {
class BinaryValue;
class DictionaryValue;
class ListValue;
-class StringValue;
class Value;
using FundamentalValue = Value;
+using StringValue = Value;
// 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
@@ -71,6 +72,19 @@ class BASE_EXPORT Value {
explicit Value(int in_int);
explicit Value(double in_double);
+ // Value(const char*) and Value(const char16*) are required despite
+ // Value(const std::string&) and Value(const string16&) because otherwise the
+ // compiler will choose the Value(bool) constructor for these arguments.
+ // Value(std::string&&) allow for efficient move construction.
+ // Value(StringPiece) exists due to many callsites passing StringPieces as
+ // arguments.
+ explicit Value(const char* in_string);
+ explicit Value(const std::string& in_string);
+ explicit Value(std::string&& in_string);
+ explicit Value(const char16* in_string);
+ explicit Value(const string16& in_string);
+ explicit Value(StringPiece in_string);
+
Value& operator=(const Value& that);
Value& operator=(Value&& that);
@@ -101,6 +115,7 @@ class BASE_EXPORT Value {
bool GetBool() const;
int GetInt() const;
double GetDouble() const; // Implicitly converts from int if necessary.
+ 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
@@ -137,44 +152,26 @@ class BASE_EXPORT Value {
// NULLs are considered equal but different from Value::CreateNullValue().
static bool Equals(const Value* a, const Value* b);
- private:
- void InternalCopyFrom(const Value& that);
-
+ protected:
+ // TODO(crbug.com/646113): Make this private once JSONStringValue is removed.
Type type_;
+ private:
+ void InternalCopyFundamentalValue(const Value& that);
+ void InternalCopyConstructFrom(const Value& that);
+ void InternalMoveConstructFrom(Value&& that);
+ void InternalCopyAssignFrom(const Value& that);
+ void InternalMoveAssignFrom(Value&& that);
+ void InternalCleanup();
+
union {
bool bool_value_;
int int_value_;
double double_value_;
+ ManualConstructor<std::string> string_value_;
};
};
-class BASE_EXPORT StringValue : public Value {
- public:
- // Initializes a StringValue with a UTF-8 narrow character string.
- explicit StringValue(StringPiece in_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;
- bool GetAsString(StringPiece* 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 {
public:
// Creates a BinaryValue with a null buffer and size of 0.
@@ -545,11 +542,6 @@ class BASE_EXPORT ValueDeserializer {
BASE_EXPORT std::ostream& operator<<(std::ostream& out, const Value& value);
BASE_EXPORT inline std::ostream& operator<<(std::ostream& out,
- const StringValue& value) {
- return out << static_cast<const Value&>(value);
-}
-
-BASE_EXPORT inline std::ostream& operator<<(std::ostream& out,
const DictionaryValue& value) {
return out << static_cast<const Value&>(value);
}
« no previous file with comments | « base/value_conversions.h ('k') | base/values.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698