diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-07-25 11:00:26 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-07-25 11:00:26 +0200 |
commit | 10d120dc852fce62eb11ec5ec80f68374ef01501 (patch) | |
tree | 0e45b64fdc01a63d592ac096118683fd79831174 /AK/NonnullRefPtrVector.h | |
parent | 7c3b2e0728b79ddba661cbf1ac61f5da382460ce (diff) | |
download | serenity-10d120dc852fce62eb11ec5ec80f68374ef01501.zip |
AK: Share code between NonnullOwnPtrVector and NonnullRefPtrVector.
These can just inherit from a shared base template. Thanks to Robin for the
sweet idea :^)
Diffstat (limited to 'AK/NonnullRefPtrVector.h')
-rw-r--r-- | AK/NonnullRefPtrVector.h | 45 |
1 files changed, 3 insertions, 42 deletions
diff --git a/AK/NonnullRefPtrVector.h b/AK/NonnullRefPtrVector.h index 296b92402e..1997e9fe45 100644 --- a/AK/NonnullRefPtrVector.h +++ b/AK/NonnullRefPtrVector.h @@ -1,52 +1,13 @@ #pragma once +#include <AK/NonnullPtrVector.h> #include <AK/NonnullRefPtr.h> -#include <AK/Vector.h> namespace AK { template<typename T, int inline_capacity = 0> -class NonnullRefPtrVector : public Vector<NonnullRefPtr<T>, inline_capacity> { - typedef Vector<NonnullRefPtr<T>, inline_capacity> Base; - -public: - NonnullRefPtrVector() - { - } - - NonnullRefPtrVector(Vector<NonnullRefPtr<T>>&& other) - : Base(static_cast<Base&&>(other)) - { - } - NonnullRefPtrVector(const Vector<NonnullRefPtr<T>>& other) - : Base(static_cast<const Base&>(other)) - { - } - - using Base::size; - - using Iterator = VectorIterator<NonnullRefPtrVector, T>; - Iterator begin() { return Iterator(*this, 0); } - Iterator end() { return Iterator(*this, size()); } - - using ConstIterator = VectorIterator<const NonnullRefPtrVector, const T>; - 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); } - -private: - // NOTE: You can't use resize() on a NonnullRefPtrVector since making the vector - // bigger would require being able to default-construct NonnullRefPtrs. - // Instead, use shrink(new_size). - void resize(int) = delete; +class NonnullRefPtrVector : public NonnullPtrVector<NonnullRefPtr<T>, T, inline_capacity> +{ }; } |