diff --git a/benchmarks/bench_thread_pipeline.cpp b/benchmarks/bench_thread_pipeline.cpp index 2e643d3..cb99116 100644 --- a/benchmarks/bench_thread_pipeline.cpp +++ b/benchmarks/bench_thread_pipeline.cpp @@ -67,14 +67,14 @@ int main() { std::latch finish{1}; { auto guard = pipeline.push(1, true); - *guard.batch.begin() = &finish; + guard.batch[0] = &finish; } finish.wait(); }); { auto guard = pipeline.push(1, true); - *guard.batch.begin() = &done; + guard.batch[0] = &done; } stage0_thread.join(); @@ -137,14 +137,14 @@ int main() { std::latch finish{1}; { auto guard = pipeline.push(1, true); - *guard.batch.begin() = &finish; + guard.batch[0] = &finish; } finish.wait(); }); { auto guard = pipeline.push(1, true); - *guard.batch.begin() = &done; + guard.batch[0] = &done; } stage0_thread.join(); @@ -214,7 +214,7 @@ int main() { std::latch finish{1}; { auto guard = pipeline.push(1, true); - *guard.batch.begin() = &finish; + guard.batch[0] = &finish; } finish.wait(); }); @@ -222,8 +222,7 @@ int main() { // Shutdown { auto guard = pipeline.push(1, true); - auto it = guard.batch.begin(); - *it = &done; + guard.batch[0] = &done; } stage0_thread.join(); stage1_thread.join(); diff --git a/src/thread_pipeline.hpp b/src/thread_pipeline.hpp index ac13c1b..4460ea2 100644 --- a/src/thread_pipeline.hpp +++ b/src/thread_pipeline.hpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -161,9 +162,6 @@ struct ThreadPipeline { return static_cast(index_) - static_cast(rhs.index_); } - reference operator[](difference_type n) const { - return (*ring)[(index_ + n) & (ring->size() - 1)]; - } friend Iterator operator+(difference_type n, const Iterator &iter) { return iter + n; } @@ -211,6 +209,9 @@ struct ThreadPipeline { [[nodiscard]] size_t size() const { return end_ - begin_; } [[nodiscard]] bool empty() const { return end_ == begin_; } + T &operator[](uint32_t n) { + return (*ring)[(begin_ + n) & (ring->size() - 1)]; + } private: friend struct ThreadPipeline;