Add operator[] to batch in thread pipeline

This commit is contained in:
2025-08-26 13:38:02 -04:00
parent 3c3555da7a
commit 1f050c861a
2 changed files with 10 additions and 10 deletions

View File

@@ -67,14 +67,14 @@ int main() {
std::latch finish{1}; std::latch finish{1};
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
*guard.batch.begin() = &finish; guard.batch[0] = &finish;
} }
finish.wait(); finish.wait();
}); });
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
*guard.batch.begin() = &done; guard.batch[0] = &done;
} }
stage0_thread.join(); stage0_thread.join();
@@ -137,14 +137,14 @@ int main() {
std::latch finish{1}; std::latch finish{1};
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
*guard.batch.begin() = &finish; guard.batch[0] = &finish;
} }
finish.wait(); finish.wait();
}); });
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
*guard.batch.begin() = &done; guard.batch[0] = &done;
} }
stage0_thread.join(); stage0_thread.join();
@@ -214,7 +214,7 @@ int main() {
std::latch finish{1}; std::latch finish{1};
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
*guard.batch.begin() = &finish; guard.batch[0] = &finish;
} }
finish.wait(); finish.wait();
}); });
@@ -222,8 +222,7 @@ int main() {
// Shutdown // Shutdown
{ {
auto guard = pipeline.push(1, true); auto guard = pipeline.push(1, true);
auto it = guard.batch.begin(); guard.batch[0] = &done;
*it = &done;
} }
stage0_thread.join(); stage0_thread.join();
stage1_thread.join(); stage1_thread.join();

View File

@@ -2,6 +2,7 @@
#include <atomic> #include <atomic>
#include <cassert> #include <cassert>
#include <cstddef>
#include <cstdint> #include <cstdint>
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
@@ -161,9 +162,6 @@ struct ThreadPipeline {
return static_cast<difference_type>(index_) - return static_cast<difference_type>(index_) -
static_cast<difference_type>(rhs.index_); static_cast<difference_type>(rhs.index_);
} }
reference operator[](difference_type n) const {
return (*ring)[(index_ + n) & (ring->size() - 1)];
}
friend Iterator operator+(difference_type n, const Iterator &iter) { friend Iterator operator+(difference_type n, const Iterator &iter) {
return iter + n; return iter + n;
} }
@@ -211,6 +209,9 @@ struct ThreadPipeline {
[[nodiscard]] size_t size() const { return end_ - begin_; } [[nodiscard]] size_t size() const { return end_ - begin_; }
[[nodiscard]] bool empty() const { return end_ == begin_; } [[nodiscard]] bool empty() const { return end_ == begin_; }
T &operator[](uint32_t n) {
return (*ring)[(begin_ + n) & (ring->size() - 1)];
}
private: private:
friend struct ThreadPipeline; friend struct ThreadPipeline;