diff options
author | Hans Goudey <h.goudey@me.com> | 2021-04-25 23:06:38 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2021-04-25 23:06:38 +0300 |
commit | 16b2b33d0194e79fabca7139658d61701c9d8915 (patch) | |
tree | 432019bbf53d1358aaa477deb7100ff9be258d17 /source/blender/blenlib | |
parent | 20142b08239a9fd5e147189462ca7c7bbfd0a972 (diff) |
BLI: Add "first" method to MutableSpan and Vector
This is convenient because having a uniform interface is nice, and
because of the similarity to "last".
Differential Revision: https://developer.blender.org/D11076
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/BLI_span.hh | 10 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_vector.hh | 19 |
2 files changed, 27 insertions, 2 deletions
diff --git a/source/blender/blenlib/BLI_span.hh b/source/blender/blenlib/BLI_span.hh index c32ba0826df..c3876d4eaf8 100644 --- a/source/blender/blenlib/BLI_span.hh +++ b/source/blender/blenlib/BLI_span.hh @@ -662,6 +662,16 @@ template<typename T> class MutableSpan { } /** + * Return a reference to the first element in the array. This invokes undefined behavior when the + * array is empty. + */ + constexpr T &first() const + { + BLI_assert(size_ > 0); + return data_[0]; + } + + /** * Returns a reference to the last element. This invokes undefined behavior when the array is * empty. */ diff --git a/source/blender/blenlib/BLI_vector.hh b/source/blender/blenlib/BLI_vector.hh index d08a5c65c52..3ffd5309a04 100644 --- a/source/blender/blenlib/BLI_vector.hh +++ b/source/blender/blenlib/BLI_vector.hh @@ -444,7 +444,7 @@ class Vector { this->append_as(std::move(value)); } /* This is similar to `std::vector::emplace_back`. */ - template<typename... ForwardValue> void append_as(ForwardValue &&... value) + template<typename... ForwardValue> void append_as(ForwardValue &&...value) { this->ensure_space_for_one(); this->append_unchecked_as(std::forward<ForwardValue>(value)...); @@ -486,7 +486,7 @@ class Vector { { this->append_unchecked_as(std::move(value)); } - template<typename... ForwardT> void append_unchecked_as(ForwardT &&... value) + template<typename... ForwardT> void append_unchecked_as(ForwardT &&...value) { BLI_assert(end_ < capacity_end_); new (end_) T(std::forward<ForwardT>(value)...); @@ -669,6 +669,21 @@ class Vector { } /** + * Return a reference to the first element in the vector. + * This invokes undefined behavior when the vector is empty. + */ + const T &first() const + { + BLI_assert(this->size() > 0); + return *begin_; + } + T &first() + { + BLI_assert(this->size() > 0); + return *begin_; + } + + /** * Return how many values are currently stored in the vector. */ int64_t size() const |