diff options
author | Jacques Lucke <jacques@blender.org> | 2021-11-24 19:49:33 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-11-24 19:49:33 +0300 |
commit | 499c24ce7530b484b103fa714e94fc72ef6acfc2 (patch) | |
tree | a11ff14a08ada12ffcf2a1b1033ca83a7f30d130 /source | |
parent | cbe9a87d282f8060670b2162a87995a255dda556 (diff) |
BLI: add slice method to index mask and generic span
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenlib/BLI_index_mask.hh | 1 | ||||
-rw-r--r-- | source/blender/blenlib/intern/index_mask.cc | 5 | ||||
-rw-r--r-- | source/blender/functions/FN_generic_span.hh | 10 |
3 files changed, 16 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_index_mask.hh b/source/blender/blenlib/BLI_index_mask.hh index ad030e127fe..16bb8c931cc 100644 --- a/source/blender/blenlib/BLI_index_mask.hh +++ b/source/blender/blenlib/BLI_index_mask.hh @@ -223,6 +223,7 @@ class IndexMask { return indices_.is_empty(); } + IndexMask slice(IndexRange slice) const; IndexMask slice_and_offset(IndexRange slice, Vector<int64_t> &r_new_indices) const; }; diff --git a/source/blender/blenlib/intern/index_mask.cc b/source/blender/blenlib/intern/index_mask.cc index cba985b8a44..d726dff6d16 100644 --- a/source/blender/blenlib/intern/index_mask.cc +++ b/source/blender/blenlib/intern/index_mask.cc @@ -18,6 +18,11 @@ namespace blender { +IndexMask IndexMask::slice(IndexRange slice) const +{ + return IndexMask(indices_.slice(slice)); +} + /** * Create a sub-mask that is also shifted to the beginning. The shifting to the beginning allows * code to work with smaller indices, which is more memory efficient. diff --git a/source/blender/functions/FN_generic_span.hh b/source/blender/functions/FN_generic_span.hh index e2c49697ba9..6f0147b7fb3 100644 --- a/source/blender/functions/FN_generic_span.hh +++ b/source/blender/functions/FN_generic_span.hh @@ -93,6 +93,11 @@ class GSpan { 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); } + + GSpan slice(const IndexRange range) const + { + return this->slice(range.start(), range.size()); + } }; /** @@ -169,6 +174,11 @@ class GMutableSpan { 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); } + + GMutableSpan slice(IndexRange range) const + { + return this->slice(range.start(), range.size()); + } }; } // namespace blender::fn |