BLI: add slice method to index mask and generic span

This commit is contained in:
Jacques Lucke 2021-11-24 17:49:33 +01:00
parent cbe9a87d28
commit 499c24ce75
3 changed files with 16 additions and 0 deletions

View File

@ -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;
};

View File

@ -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.

View File

@ -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