diff options
Diffstat (limited to 'AK')
-rw-r--r-- | AK/NonnullRefPtrVector.h | 2 | ||||
-rw-r--r-- | AK/Tests/.gitignore | 3 | ||||
-rw-r--r-- | AK/Tests/Makefile | 5 | ||||
-rw-r--r-- | AK/Tests/TestVector.cpp | 45 | ||||
-rw-r--r-- | AK/Vector.h | 41 |
5 files changed, 54 insertions, 42 deletions
diff --git a/AK/NonnullRefPtrVector.h b/AK/NonnullRefPtrVector.h index 151863fe83..f5e438f3de 100644 --- a/AK/NonnullRefPtrVector.h +++ b/AK/NonnullRefPtrVector.h @@ -29,7 +29,7 @@ public: Iterator begin() { return Iterator(*this, 0); } Iterator end() { return Iterator(*this, size()); } - using ConstIterator = ConstVectorIterator<NonnullRefPtrVector, T>; + using ConstIterator = VectorIterator<const NonnullRefPtrVector, const T>; ConstIterator begin() const { return ConstIterator(*this, 0); } ConstIterator end() const { return ConstIterator(*this, size()); } diff --git a/AK/Tests/.gitignore b/AK/Tests/.gitignore index 2e42a5a41c..3e8c653d02 100644 --- a/AK/Tests/.gitignore +++ b/AK/Tests/.gitignore @@ -1,2 +1,5 @@ TestString TestQueue +TestVector +*.d +*.o diff --git a/AK/Tests/Makefile b/AK/Tests/Makefile index dd7fc4a8e8..1a87af2faa 100644 --- a/AK/Tests/Makefile +++ b/AK/Tests/Makefile @@ -1,4 +1,4 @@ -all: TestString TestQueue +all: TestString TestQueue TestVector CXXFLAGS = -std=c++17 -Wall -Wextra @@ -8,5 +8,8 @@ TestString: TestString.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp TestQueue: TestQueue.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp TestHelpers.h $(CXX) $(CXXFLAGS) -I../ -I../../ -o $@ TestQueue.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp +TestVector: TestVector.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp TestHelpers.h + $(CXX) $(CXXFLAGS) -I../ -I../../ -o $@ TestVector.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp + clean: rm -f TestString TestQueue diff --git a/AK/Tests/TestVector.cpp b/AK/Tests/TestVector.cpp new file mode 100644 index 0000000000..182a3acbe4 --- /dev/null +++ b/AK/Tests/TestVector.cpp @@ -0,0 +1,45 @@ +#include "TestHelpers.h" +#include <AK/AKString.h> +#include <AK/Vector.h> + +int main() +{ + EXPECT(Vector<int>().is_empty()); + EXPECT(Vector<int>().size() == 0); + + Vector<int> ints; + ints.append(1); + ints.append(2); + ints.append(3); + EXPECT_EQ(ints.size(), 3); + EXPECT_EQ(ints.take_last(), 3); + EXPECT_EQ(ints.size(), 2); + EXPECT_EQ(ints.take_last(), 2); + EXPECT_EQ(ints.size(), 1); + EXPECT_EQ(ints.take_last(), 1); + EXPECT_EQ(ints.size(), 0); + + ints.clear(); + EXPECT_EQ(ints.size(), 0); + + Vector<String> strings; + strings.append("ABC"); + strings.append("DEF"); + + int loop_counter = 0; + for (const String& string : strings) { + EXPECT(!string.is_null()); + EXPECT(!string.is_empty()); + ++loop_counter; + } + + loop_counter = 0; + for (auto& string : (const_cast<const Vector<String>&>(strings))) { + EXPECT(!string.is_null()); + EXPECT(!string.is_empty()); + ++loop_counter; + } + EXPECT_EQ(loop_counter, 2); + + return 0; +} diff --git a/AK/Vector.h b/AK/Vector.h index 559eaa8500..e639ba6c1e 100644 --- a/AK/Vector.h +++ b/AK/Vector.h @@ -51,45 +51,6 @@ private: int m_index { 0 }; }; -template<typename VectorType, typename ElementType> -class ConstVectorIterator { -public: - bool operator!=(const ConstVectorIterator& other) { return m_index != other.m_index; } - bool operator==(const ConstVectorIterator& other) { return m_index == other.m_index; } - bool operator<(const ConstVectorIterator& other) { return m_index < other.m_index; } - bool operator>(const ConstVectorIterator& other) { return m_index > other.m_index; } - bool operator>=(const ConstVectorIterator& other) { return m_index >= other.m_index; } - ConstVectorIterator& operator++() - { - ++m_index; - return *this; - } - ConstVectorIterator& operator--() - { - --m_index; - return *this; - } - ConstVectorIterator operator-(int value) { return { m_vector, m_index - value }; } - ConstVectorIterator operator+(int value) { return { m_vector, m_index + value }; } - ConstVectorIterator& operator=(const ConstVectorIterator& other) - { - m_index = other.m_index; - return *this; - } - const ElementType& operator*() const { return m_vector[m_index]; } - int operator-(const ConstVectorIterator& other) { return m_index - other.m_index; } - -private: - friend VectorType; - ConstVectorIterator(const VectorType& vector, const int index) - : m_vector(vector) - , m_index(index) - { - } - const VectorType& m_vector; - int m_index { 0 }; -}; - template<typename T, int inline_capacity = 0> class Vector { public: @@ -416,7 +377,7 @@ public: Iterator begin() { return Iterator(*this, 0); } Iterator end() { return Iterator(*this, size()); } - using ConstIterator = ConstVectorIterator<Vector, T>; + using ConstIterator = VectorIterator<const Vector, const T>; ConstIterator begin() const { return ConstIterator(*this, 0); } ConstIterator end() const { return ConstIterator(*this, size()); } |