Commit 5fe08c11 authored by Kei Nakashima's avatar Kei Nakashima Committed by Commit Bot

Added |front|, |back|, |size|, |IsEmpty| to NewLinkedHashSet

Implemented |NewLinkedHashSet::front|, |NewLinkedHashSet::back|, |NewLinkedHashSet::size|, |NewLinkedHashSet::IsEmpty|.
Also added tests for those functions.
Along with this change, added DCHECK to |VectorBackedLinkedList::front| and |VectorBackedLinkedList::back|.

Change-Id: I8f90dd8b744b85dd4ceb8366a64398d5f88c34bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2103595Reviewed-by: default avatarYuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarBartek Nowierski <bartekn@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Kei Nakashima <keinakashima@google.com>
Cr-Commit-Position: refs/heads/master@{#750507}
parent 280faf60
...@@ -1072,7 +1072,8 @@ class NewLinkedHashSet { ...@@ -1072,7 +1072,8 @@ class NewLinkedHashSet {
void Swap(NewLinkedHashSet&); void Swap(NewLinkedHashSet&);
// TODO(keinakashima): implement size-related functions wtf_size_t size() const { return list_.size(); }
bool IsEmpty() const { return list_.empty(); }
const_iterator begin() const { return list_.cbegin(); } const_iterator begin() const { return list_.cbegin(); }
const_iterator end() const { return list_.cend(); } const_iterator end() const { return list_.cend(); }
...@@ -1080,7 +1081,8 @@ class NewLinkedHashSet { ...@@ -1080,7 +1081,8 @@ class NewLinkedHashSet {
const_reverse_iterator rbegin() const { return list_.crbegin(); } const_reverse_iterator rbegin() const { return list_.crbegin(); }
const_reverse_iterator rend() const { return list_.crend(); } const_reverse_iterator rend() const { return list_.crend(); }
// TODO(keinakashima): implement front/back const Value& front() const { return list_.front(); }
const Value& back() const { return list_.back(); }
const_iterator find(ValuePeekInType) const; const_iterator find(ValuePeekInType) const;
bool Contains(ValuePeekInType) const; bool Contains(ValuePeekInType) const;
......
...@@ -12,6 +12,8 @@ namespace WTF { ...@@ -12,6 +12,8 @@ namespace WTF {
TEST(NewLinkedHashSetTest, Construct) { TEST(NewLinkedHashSetTest, Construct) {
NewLinkedHashSet<int> test; NewLinkedHashSet<int> test;
EXPECT_EQ(test.size(), 0u);
EXPECT_TRUE(test.IsEmpty());
} }
TEST(NewLinkedHashSetTest, Iterator) { TEST(NewLinkedHashSetTest, Iterator) {
...@@ -21,6 +23,33 @@ TEST(NewLinkedHashSetTest, Iterator) { ...@@ -21,6 +23,33 @@ TEST(NewLinkedHashSetTest, Iterator) {
EXPECT_TRUE(set.rbegin() == set.rend()); EXPECT_TRUE(set.rbegin() == set.rend());
} }
TEST(NewLinkedHashSetTest, FrontAndBack) {
using Set = NewLinkedHashSet<int>;
Set set;
EXPECT_EQ(set.size(), 0u);
EXPECT_TRUE(set.IsEmpty());
set.PrependOrMoveToFirst(1);
EXPECT_EQ(set.front(), 1);
EXPECT_EQ(set.back(), 1);
set.insert(2);
EXPECT_EQ(set.front(), 1);
EXPECT_EQ(set.back(), 2);
set.AppendOrMoveToLast(3);
EXPECT_EQ(set.front(), 1);
EXPECT_EQ(set.back(), 3);
set.PrependOrMoveToFirst(3);
EXPECT_EQ(set.front(), 3);
EXPECT_EQ(set.back(), 2);
set.AppendOrMoveToLast(1);
EXPECT_EQ(set.front(), 3);
EXPECT_EQ(set.back(), 1);
}
TEST(NewLinkedHashSetTest, Insert) { TEST(NewLinkedHashSetTest, Insert) {
using Set = NewLinkedHashSet<int>; using Set = NewLinkedHashSet<int>;
Set set; Set set;
......
...@@ -91,7 +91,7 @@ class VectorBackedLinkedList { ...@@ -91,7 +91,7 @@ class VectorBackedLinkedList {
void swap(VectorBackedLinkedList&); void swap(VectorBackedLinkedList&);
bool empty() { return size_ == 0; } bool empty() const { return size_ == 0; }
wtf_size_t size() const { return size_; } wtf_size_t size() const { return size_; }
iterator begin() { return MakeIterator(UsedFirstIndex()); } iterator begin() { return MakeIterator(UsedFirstIndex()); }
...@@ -107,10 +107,10 @@ class VectorBackedLinkedList { ...@@ -107,10 +107,10 @@ class VectorBackedLinkedList {
return MakeConstReverseIterator(anchor_index_); return MakeConstReverseIterator(anchor_index_);
} }
Value& front() { return nodes_[UsedFirstIndex()].value_; } Value& front();
const Value& front() const { return nodes_[UsedFirstIndex()].value_; } const Value& front() const;
Value& back() { return nodes_[UsedLastIndex()].value_; } Value& back();
const Value& back() const { return nodes_[UsedLastIndex()].value_; } const Value& back() const;
template <typename IncomingValueType> template <typename IncomingValueType>
iterator insert(const_iterator position, IncomingValueType&& value); iterator insert(const_iterator position, IncomingValueType&& value);
...@@ -444,6 +444,30 @@ inline void VectorBackedLinkedList<T>::swap(VectorBackedLinkedList& other) { ...@@ -444,6 +444,30 @@ inline void VectorBackedLinkedList<T>::swap(VectorBackedLinkedList& other) {
#endif #endif
} }
template <typename T>
T& VectorBackedLinkedList<T>::front() {
DCHECK(!empty());
return nodes_[UsedFirstIndex()].value_;
}
template <typename T>
const T& VectorBackedLinkedList<T>::front() const {
DCHECK(!empty());
return nodes_[UsedFirstIndex()].value_;
}
template <typename T>
T& VectorBackedLinkedList<T>::back() {
DCHECK(!empty());
return nodes_[UsedLastIndex()].value_;
}
template <typename T>
const T& VectorBackedLinkedList<T>::back() const {
DCHECK(!empty());
return nodes_[UsedLastIndex()].value_;
}
template <typename T> template <typename T>
template <typename IncomingValueType> template <typename IncomingValueType>
typename VectorBackedLinkedList<T>::iterator VectorBackedLinkedList<T>::insert( typename VectorBackedLinkedList<T>::iterator VectorBackedLinkedList<T>::insert(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment