diff --git a/AK/NonnullOwnPtrVector.h b/AK/NonnullOwnPtrVector.h new file mode 100644 index 0000000000..358f80679f --- /dev/null +++ b/AK/NonnullOwnPtrVector.h @@ -0,0 +1,48 @@ +#pragma once + +#include +#include + +namespace AK { + +template +class NonnullOwnPtrVector : public Vector, inline_capacity> { + typedef Vector, inline_capacity> Base; + +public: + NonnullOwnPtrVector() + { + } + + NonnullOwnPtrVector(Vector>&& other) + : Base(static_cast(other)) + { + } + NonnullOwnPtrVector(const Vector>& other) + : Base(static_cast(other)) + { + } + + using Base::size; + + using Iterator = VectorIterator; + Iterator begin() { return Iterator(*this, 0); } + Iterator end() { return Iterator(*this, size()); } + + using ConstIterator = VectorIterator; + ConstIterator begin() const { return ConstIterator(*this, 0); } + ConstIterator end() const { return ConstIterator(*this, size()); } + + T& at(int index) { return *Base::at(index); } + const T& at(int index) const { return *Base::at(index); } + T& operator[](int index) { return at(index); } + const T& operator[](int index) const { return at(index); } + T& first() { return at(0); } + const T& first() const { return at(0); } + T& last() { return at(size() - 1); } + const T& last() const { return at(size() - 1); } +}; + +} + +using AK::NonnullOwnPtrVector;