summaryrefslogtreecommitdiffstats
path: root/chromium/base/values.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/base/values.cc
parent7961cea6d1041e3e454dae6a1da660b453efd238 (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.cc88
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)) {}