Add operator[] to batch in thread pipeline
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user