BLI: add slice method to index mask and generic span
This commit is contained in:
parent
cbe9a87d28
commit
499c24ce75
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue