25template<
typename T>
class IndexRangesBuilder : NonCopyable, NonMovable {
35 static_assert(std::is_signed_v<T>);
43 bool add(
const T index)
59 const bool is_new_range = start > *c_;
77 return (c_ - data_.data()) / 2;
83 return data_.size() / 2;
89 return c_ == data_.data();
100 const T start = data_[size_t(1) + 2 * size_t(i)];
101 const T end = data_[size_t(2) + 2 * size_t(i)];
108 return ranges_num * 2 + 1;
static constexpr IndexRange from_begin_end(const int64_t begin, const int64_t end)
bool add_range(const T start, const T end)
static constexpr int64_t buffer_size_for_ranges_num(const int64_t ranges_num)
IndexRangesBuilder(MutableSpan< T > data)
IndexRange index_range() const
IndexRange operator[](const int64_t i) const
std::array< T, size_t(IndexRangesBuilder< T >::buffer_size_for_ranges_num(MaxRangesNum))> data