diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 17:21:03 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-01-23 16:25:15 +0000 |
commit | c551f43206405019121bd2b2c93714319a0a3300 (patch) | |
tree | 1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/base/values.cc | |
parent | 7961cea6d1041e3e454dae6a1da660b453efd238 (diff) |
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/values.cc')
-rw-r--r-- | chromium/base/values.cc | 88 |
1 files changed, 84 insertions, 4 deletions
diff --git a/chromium/base/values.cc b/chromium/base/values.cc index 02e92b7e082..6886b846e8d 100644 --- a/chromium/base/values.cc +++ b/chromium/base/values.cc @@ -58,7 +58,7 @@ std::unique_ptr<Value> CopyListWithoutEmptyChildren(const Value& list) { for (const auto& entry : list.GetList()) { std::unique_ptr<Value> child_copy = CopyWithoutEmptyChildren(entry); if (child_copy) - copy.GetList().push_back(std::move(*child_copy)); + copy.Append(std::move(*child_copy)); } return copy.GetList().empty() ? nullptr : std::make_unique<Value>(std::move(copy)); @@ -147,6 +147,18 @@ std::unique_ptr<Value> Value::ToUniquePtrValue(Value val) { return std::make_unique<Value>(std::move(val)); } +// static +const DictionaryValue& Value::AsDictionaryValue(const Value& val) { + CHECK(val.is_dict()); + return static_cast<const DictionaryValue&>(val); +} + +// static +const ListValue& Value::AsListValue(const Value& val) { + CHECK(val.is_list()); + return static_cast<const ListValue&>(val); +} + Value::Value(Value&& that) noexcept { InternalMoveConstructFrom(std::move(that)); } @@ -234,7 +246,7 @@ Value::Value(const DictStorage& in_dict) : type_(Type::DICTIONARY), dict_() { Value::Value(DictStorage&& in_dict) noexcept : type_(Type::DICTIONARY), dict_(std::move(in_dict)) {} -Value::Value(const ListStorage& in_list) : type_(Type::LIST), list_() { +Value::Value(span<const Value> in_list) : type_(Type::LIST), list_() { list_.reserve(in_list.size()); for (const auto& val : in_list) list_.emplace_back(val.Clone()); @@ -335,11 +347,79 @@ Value::ListStorage& Value::GetList() { return list_; } -const Value::ListStorage& Value::GetList() const { +span<const Value> Value::GetList() const { CHECK(is_list()); return list_; } +Value::ListStorage Value::TakeList() { + CHECK(is_list()); + return std::exchange(list_, ListStorage()); +} + +void Value::Append(bool value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(int value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(double value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(const char* value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(StringPiece value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(std::string&& value) { + CHECK(is_list()); + list_.emplace_back(std::move(value)); +} + +void Value::Append(const char16* value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(StringPiece16 value) { + CHECK(is_list()); + list_.emplace_back(value); +} + +void Value::Append(Value&& value) { + CHECK(is_list()); + list_.emplace_back(std::move(value)); +} + +bool Value::EraseListIter(ListStorage::const_iterator iter) { + CHECK(is_list()); + if (iter == list_.end()) + return false; + + list_.erase(iter); + return true; +} + +bool Value::EraseListIter(CheckedContiguousConstIterator<Value> iter) { + const auto offset = iter - static_cast<const Value*>(this)->GetList().begin(); + return EraseListIter(list_.begin() + offset); +} + +size_t Value::EraseListValue(const Value& val) { + return EraseListValueIf([&val](const Value& other) { return val == other; }); +} + Value* Value::FindKey(StringPiece key) { return const_cast<Value*>(static_cast<const Value*>(this)->FindKey(key)); } @@ -1535,7 +1615,7 @@ std::unique_ptr<ListValue> ListValue::From(std::unique_ptr<Value> value) { } ListValue::ListValue() : Value(Type::LIST) {} -ListValue::ListValue(const ListStorage& in_list) : Value(in_list) {} +ListValue::ListValue(span<const Value> in_list) : Value(in_list) {} ListValue::ListValue(ListStorage&& in_list) noexcept : Value(std::move(in_list)) {} |