refactor
This commit is contained in:
@@ -367,30 +367,31 @@ void ring_buffer_base::update_position(std::size_t count, bool is_forward) {
|
|||||||
if (is_forward ? (ring_pos_ + count) <= ring_end_
|
if (is_forward ? (ring_pos_ + count) <= ring_end_
|
||||||
: (ring_pos_ - count) >= ring_begin_) {
|
: (ring_pos_ - count) >= ring_begin_) {
|
||||||
ring_pos_ += is_forward ? count : -count;
|
ring_pos_ += is_forward ? count : -count;
|
||||||
} else {
|
chunk_notify_.notify_all();
|
||||||
auto delta = is_forward ? count - (ring_end_ - ring_pos_)
|
return;
|
||||||
: count - (ring_pos_ - ring_begin_);
|
|
||||||
|
|
||||||
if (delta >= read_state_.size()) {
|
|
||||||
read_state_.set(0U, read_state_.size(), false);
|
|
||||||
ring_pos_ += is_forward ? count : -count;
|
|
||||||
ring_begin_ += is_forward ? delta : -delta;
|
|
||||||
} else {
|
|
||||||
for (std::size_t idx = 0U; idx < delta; ++idx) {
|
|
||||||
if (is_forward) {
|
|
||||||
read_state_[(ring_begin_ + idx) % read_state_.size()] = false;
|
|
||||||
} else {
|
|
||||||
read_state_[(ring_end_ - idx) % read_state_.size()] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ring_begin_ += is_forward ? delta : -delta;
|
|
||||||
ring_pos_ += is_forward ? count : -count;
|
|
||||||
}
|
|
||||||
|
|
||||||
ring_end_ =
|
|
||||||
std::min(total_chunks_ - 1U, ring_begin_ + read_state_.size() - 1U);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto delta = is_forward ? count - (ring_end_ - ring_pos_)
|
||||||
|
: count - (ring_pos_ - ring_begin_);
|
||||||
|
if (delta >= read_state_.size()) {
|
||||||
|
read_state_.set(0U, read_state_.size(), false);
|
||||||
|
ring_pos_ += is_forward ? count : -count;
|
||||||
|
ring_begin_ += is_forward ? delta : -delta;
|
||||||
|
} else {
|
||||||
|
for (std::size_t idx = 0U; idx < delta; ++idx) {
|
||||||
|
if (is_forward) {
|
||||||
|
read_state_[(ring_begin_ + idx) % read_state_.size()] = false;
|
||||||
|
} else {
|
||||||
|
read_state_[(ring_end_ - idx) % read_state_.size()] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ring_begin_ += is_forward ? delta : -delta;
|
||||||
|
ring_pos_ += is_forward ? count : -count;
|
||||||
|
}
|
||||||
|
|
||||||
|
ring_end_ =
|
||||||
|
std::min(total_chunks_ - 1U, ring_begin_ + read_state_.size() - 1U);
|
||||||
|
|
||||||
chunk_notify_.notify_all();
|
chunk_notify_.notify_all();
|
||||||
}
|
}
|
||||||
} // namespace repertory
|
} // namespace repertory
|
||||||
|
Reference in New Issue
Block a user