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 {
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 end() const { return list_.cend(); }
......@@ -1080,7 +1081,8 @@ class NewLinkedHashSet {
const_reverse_iterator rbegin() const { return list_.crbegin(); }
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;
bool Contains(ValuePeekInType) const;
......
......@@ -12,6 +12,8 @@ namespace WTF {
TEST(NewLinkedHashSetTest, Construct) {
NewLinkedHashSet<int> test;
EXPECT_EQ(test.size(), 0u);
EXPECT_TRUE(test.IsEmpty());
}
TEST(NewLinkedHashSetTest, Iterator) {
......@@ -21,6 +23,33 @@ TEST(NewLinkedHashSetTest, Iterator) {
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) {
using Set = NewLinkedHashSet<int>;
Set set;
......
......@@ -91,7 +91,7 @@ class VectorBackedLinkedList {
void swap(VectorBackedLinkedList&);
bool empty() { return size_ == 0; }
bool empty() const { return size_ == 0; }
wtf_size_t size() const { return size_; }
iterator begin() { return MakeIterator(UsedFirstIndex()); }
......@@ -107,10 +107,10 @@ class VectorBackedLinkedList {
return MakeConstReverseIterator(anchor_index_);
}
Value& front() { return nodes_[UsedFirstIndex()].value_; }
const Value& front() const { return nodes_[UsedFirstIndex()].value_; }
Value& back() { return nodes_[UsedLastIndex()].value_; }
const Value& back() const { return nodes_[UsedLastIndex()].value_; }
Value& front();
const Value& front() const;
Value& back();
const Value& back() const;
template <typename IncomingValueType>
iterator insert(const_iterator position, IncomingValueType&& value);
......@@ -444,6 +444,30 @@ inline void VectorBackedLinkedList<T>::swap(VectorBackedLinkedList& other) {
#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 IncomingValueType>
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