diff options
author | Jacques Lucke <jacques@blender.org> | 2021-04-21 17:59:22 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-04-21 17:59:22 +0300 |
commit | d5309bf4cf9e36e161027cf7ad1775eb355433f1 (patch) | |
tree | 77e71722616ae0df1c4b5913ca2b711e90e187ca /source/blender | |
parent | b9cbf7fc8067cea725f7c6c410ce626f08bf85f7 (diff) |
Functions: add slice method for generic spans
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/functions/FN_generic_span.hh | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/functions/FN_generic_span.hh b/source/blender/functions/FN_generic_span.hh index ea2bd49fa09..e2c49697ba9 100644 --- a/source/blender/functions/FN_generic_span.hh +++ b/source/blender/functions/FN_generic_span.hh @@ -85,6 +85,14 @@ class GSpan { BLI_assert(type_->is<T>()); return Span<T>(static_cast<const T *>(data_), size_); } + + GSpan slice(const int64_t start, int64_t size) const + { + BLI_assert(start >= 0); + BLI_assert(size >= 0); + const int64_t new_size = std::max<int64_t>(0, std::min(size, size_ - start)); + return GSpan(*type_, POINTER_OFFSET(data_, type_->size() * start), new_size); + } }; /** @@ -153,6 +161,14 @@ class GMutableSpan { BLI_assert(type_->is<T>()); return MutableSpan<T>(static_cast<T *>(data_), size_); } + + GMutableSpan slice(const int64_t start, int64_t size) const + { + BLI_assert(start >= 0); + BLI_assert(size >= 0); + const int64_t new_size = std::max<int64_t>(0, std::min(size, size_ - start)); + return GMutableSpan(*type_, POINTER_OFFSET(data_, type_->size() * start), new_size); + } }; } // namespace blender::fn |