Functions: add slice method for generic spans

This commit is contained in:
2021-04-21 16:59:22 +02:00
parent b9cbf7fc80
commit d5309bf4cf

View File

@@ -85,6 +85,14 @@ class GSpan {
BLI_assert(type_->is<T>()); BLI_assert(type_->is<T>());
return Span<T>(static_cast<const T *>(data_), size_); 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>()); BLI_assert(type_->is<T>());
return MutableSpan<T>(static_cast<T *>(data_), size_); 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 } // namespace blender::fn