Rewrite & optimize LimitedQueue (#3798)
* Use circular buffer for LimitedQueue * Reduce copying of snapshot * Small optimizations * Remove unneeded lock statements * Add LimitedQueue tests * Fix includes for limited queue benchmark * Update CHANGELOG.md * Use correct boost version iterators * Use a shared_mutex to clarify reads and writes * Update `find`/`rfind` to return the result as a boost::optional * Use `[[nodiscard]]` where applicable * Update comments * Add a couple more doc comments * Replace size with get get is a safe (locked & checked) version of at * Use std::vector in LimitedQueueSnapshot * Update LimitedQueue benchmarks * Add mutex guard to buffer accessors We do not know whether T is an atomic type or not so we can't safely say that we can copy the value at a certain address of the buffer. See https://stackoverflow.com/a/2252478 * Update doc comments, add first/last getters * Make limit_ const * Omit `else` if the if-case always returns * Title case category comments * Remove `at` * Fix `get` comment * Privatize/comment/lock property accessors - `limit` is now private - `space` is now private - `full` has been removed - `empty` now locks * Remove `front` function * Remove `back` method * Add comment to `first` * Add comment to `last` Co-authored-by: Rasmus Karlsson <rasmus.karlsson@pajlada.com>
This commit is contained in:
@@ -32,8 +32,7 @@ Scrollbar::Scrollbar(ChannelView *parent)
|
||||
|
||||
void Scrollbar::addHighlight(ScrollbarHighlight highlight)
|
||||
{
|
||||
ScrollbarHighlight deleted;
|
||||
this->highlights_.pushBack(highlight, deleted);
|
||||
this->highlights_.pushBack(highlight);
|
||||
}
|
||||
|
||||
void Scrollbar::addHighlightsAtStart(
|
||||
@@ -62,7 +61,7 @@ void Scrollbar::clearHighlights()
|
||||
this->highlights_.clear();
|
||||
}
|
||||
|
||||
LimitedQueueSnapshot<ScrollbarHighlight> Scrollbar::getHighlightSnapshot()
|
||||
LimitedQueueSnapshot<ScrollbarHighlight> &Scrollbar::getHighlightSnapshot()
|
||||
{
|
||||
if (!this->highlightsPaused_)
|
||||
{
|
||||
@@ -275,7 +274,7 @@ void Scrollbar::paintEvent(QPaintEvent *)
|
||||
}
|
||||
|
||||
// draw highlights
|
||||
auto snapshot = this->getHighlightSnapshot();
|
||||
auto &snapshot = this->getHighlightSnapshot();
|
||||
size_t snapshotLength = snapshot.size();
|
||||
|
||||
if (snapshotLength == 0)
|
||||
|
||||
Reference in New Issue
Block a user