diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-18 02:16:59 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-18 02:16:59 +0000 |
commit | 16f47e08060635631f1ad2cbb30906beb1caffc3 (patch) | |
tree | f2e07ada71f47383cb8355091b0a92e090c8656e /base/values.cc | |
parent | 9fb09e0cb9a33db85884f3f81e406d12ad9f2b70 (diff) | |
download | chromium_src-16f47e08060635631f1ad2cbb30906beb1caffc3.zip chromium_src-16f47e08060635631f1ad2cbb30906beb1caffc3.tar.gz chromium_src-16f47e08060635631f1ad2cbb30906beb1caffc3.tar.bz2 |
Made return types of various Value::DeepCopy() implementations more specific
Since C++ supports covariant return types, a subclass of Value can return its
own pointer type for Value::DeepCopy().
Also made signatures of Value::Create*Value() more specific.
Removed now-unnecessary casts.
Added test for covariant return types.
BUG=None
TEST=Compile
Review URL: http://codereview.chromium.org/6324004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71617 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/values.cc')
-rw-r--r-- | base/values.cc | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/base/values.cc b/base/values.cc index 3522569..a4a6ff4 100644 --- a/base/values.cc +++ b/base/values.cc @@ -70,27 +70,27 @@ Value* Value::CreateNullValue() { } // static -Value* Value::CreateBooleanValue(bool in_value) { +FundamentalValue* Value::CreateBooleanValue(bool in_value) { return new FundamentalValue(in_value); } // static -Value* Value::CreateIntegerValue(int in_value) { +FundamentalValue* Value::CreateIntegerValue(int in_value) { return new FundamentalValue(in_value); } // static -Value* Value::CreateRealValue(double in_value) { +FundamentalValue* Value::CreateRealValue(double in_value) { return new FundamentalValue(in_value); } // static -Value* Value::CreateStringValue(const std::string& in_value) { +StringValue* Value::CreateStringValue(const std::string& in_value) { return new StringValue(in_value); } // static -Value* Value::CreateStringValue(const string16& in_value) { +StringValue* Value::CreateStringValue(const string16& in_value) { return new StringValue(in_value); } @@ -182,7 +182,7 @@ bool FundamentalValue::GetAsReal(double* out_value) const { return (IsType(TYPE_REAL)); } -Value* FundamentalValue::DeepCopy() const { +FundamentalValue* FundamentalValue::DeepCopy() const { switch (GetType()) { case TYPE_BOOLEAN: return CreateBooleanValue(boolean_value_); @@ -250,7 +250,7 @@ bool StringValue::GetAsString(string16* out_value) const { return true; } -Value* StringValue::DeepCopy() const { +StringValue* StringValue::DeepCopy() const { return CreateStringValue(value_); } @@ -288,7 +288,7 @@ BinaryValue* BinaryValue::CreateWithCopiedBuffer(const char* buffer, return new BinaryValue(buffer_copy, size); } -Value* BinaryValue::DeepCopy() const { +BinaryValue* BinaryValue::DeepCopy() const { return CreateWithCopiedBuffer(buffer_, size_); } @@ -646,7 +646,7 @@ void DictionaryValue::MergeDictionary(const DictionaryValue* dictionary) { } } -Value* DictionaryValue::DeepCopy() const { +DictionaryValue* DictionaryValue::DeepCopy() const { DictionaryValue* result = new DictionaryValue; for (ValueMap::const_iterator current_entry(dictionary_.begin()); @@ -862,7 +862,7 @@ bool ListValue::GetAsList(ListValue** out_value) { return true; } -Value* ListValue::DeepCopy() const { +ListValue* ListValue::DeepCopy() const { ListValue* result = new ListValue; for (ValueVector::const_iterator i(list_.begin()); i != list_.end(); ++i) |