BLI: Add "take front" and "take back" methods to bit spans #107441

Merged
Hans Goudey merged 1 commits from HooglyBoogly/blender:bit-span-take-front-back into main 2023-04-28 16:14:07 +02:00
2 changed files with 32 additions and 2 deletions

View File

@ -336,8 +336,8 @@ Mesh *BKE_mesh_mirror_apply_mirror_on_axis_for_modifier(MirrorModifierData *mmd,
const blender::BoundedBitSpan src = mesh->runtime->subsurf_optimal_display_edges;
result->runtime->subsurf_optimal_display_edges.resize(result->totedge);
blender::MutableBoundedBitSpan dst = result->runtime->subsurf_optimal_display_edges;
dst.slice({0, src.size()}).copy_from(src);
dst.slice({src.size(), src.size()}).copy_from(src);
dst.take_front(src.size()).copy_from(src);
dst.take_back(src.size()).copy_from(src);
}
/* handle uvs,

View File

@ -110,6 +110,16 @@ class BitSpan {
return {data_, bit_range_.slice(range)};
}
BitSpan take_front(const int64_t n) const
{
return {data_, bit_range_.take_front(n)};
}
BitSpan take_back(const int64_t n) const
{
return {data_, bit_range_.take_back(n)};
}
const BitInt *data() const
{
return data_;
@ -195,6 +205,11 @@ class BoundedBitSpan : public BitSpan {
{
return bit_range_.size() & BitIndexMask;
}
BoundedBitSpan take_front(const int64_t n) const
{
return {data_, bit_range_.take_front(n)};
}
};
/** Same as #BitSpan, but also allows modifying the referenced bits. */
@ -237,6 +252,16 @@ class MutableBitSpan {
return {data_, bit_range_.slice(range)};
}
MutableBitSpan take_front(const int64_t n) const
{
return {data_, bit_range_.take_front(n)};
}
MutableBitSpan take_back(const int64_t n) const
{
return {data_, bit_range_.take_back(n)};
}
BitInt *data() const
{
return data_;
@ -331,6 +356,11 @@ class MutableBoundedBitSpan : public MutableBitSpan {
return bit_range_.size() & BitIndexMask;
}
MutableBoundedBitSpan take_front(const int64_t n) const
{
return {data_, bit_range_.take_front(n)};
}
void copy_from(const BitSpan other);
void copy_from(const BoundedBitSpan other);
};