@@ -27,7 +27,7 @@ class FFQOutputStorage : public OutputStorage<ElementType> {
2727 {
2828 BackoffScheme backoffScheme (70 , 1 );
2929 while (true ) {
30- const uint64_t writeRank = this ->m_writeRank . fetch_add (1 , std::memory_order_acq_rel);
30+ const uint64_t writeRank = this ->m_writeRank -> fetch_add (1 , std::memory_order_acq_rel);
3131 const uint64_t writeIndex = writeRank % OutputStorage<ElementType>::STORAGE_CAPACITY;
3232 if (
3333 /* (m_storage[writeIndex].empty()
@@ -59,7 +59,7 @@ class FFQOutputStorage : public OutputStorage<ElementType> {
5959 m_cells[*m_readersData[readerIndex]->lastReadIndex ].state .setReadingFinished ();
6060 }
6161 while (!finished ()) {
62- const uint64_t readRank = m_readRank. fetch_add (1 , std::memory_order_acq_rel);
62+ const uint64_t readRank = m_readRank-> fetch_add (1 , std::memory_order_acq_rel);
6363 const uint64_t readIndex = readRank % OutputStorage<ElementType>::STORAGE_CAPACITY;
6464 if (m_cells[readIndex].state .tryToSetReadingStarted ()) {
6565 // std::atomic_thread_fence(std::memory_order_acquire);
@@ -77,8 +77,10 @@ class FFQOutputStorage : public OutputStorage<ElementType> {
7777 bool finished () noexcept override
7878 {
7979 return !this ->writersPresent ()
80- && m_readRank % OutputStorage<ElementType>::STORAGE_CAPACITY
81- == m_writeRank.load () % OutputStorage<ElementType>::STORAGE_CAPACITY;
80+ && m_readRank->load (std::memory_order_acquire)
81+ % OutputStorage<ElementType>::STORAGE_CAPACITY
82+ == m_writeRank->load (std::memory_order_acquire)
83+ % OutputStorage<ElementType>::STORAGE_CAPACITY;
8284 }
8385
8486protected:
@@ -166,27 +168,20 @@ class FFQOutputStorage : public OutputStorage<ElementType> {
166168 struct Cell {
167169 constexpr static uint64_t INVALID_RANK = std::numeric_limits<uint64_t >::max();
168170
169- uint64_t rank;
171+ // uint64_t rank;
170172 ReaderGroupState state;
171- bool gap;
173+ // bool gap;
172174 };
173175
174176 struct ReaderData {
175177 std::optional<uint16_t > lastReadIndex {0 };
176178 };
177179
178- boost::container::static_vector<Cell, OutputStorage<ElementType>::STORAGE_CAPACITY> m_cells;
179- /* std::span<Cell> d_cells {
180- m_cells.data(),
181- OutputStorage<ElementType>::ALLOCATION_BUFFER_CAPACITY};*/
182- std::atomic<uint64_t > m_writeRank {0 };
183- /* std::array<
184- CacheAlligned<std::atomic<uint64_t>>,
185- OutputStorage<ElementType>::MAX_READER_GROUPS_COUNT>
186- m_readRanks;*/
187- std::atomic<uint64_t > m_readRank {0 };
188180 std::array<CacheAlligned<ReaderData>, OutputStorage<ElementType>::MAX_READERS_COUNT>
189181 m_readersData;
182+ boost::container::static_vector<Cell, OutputStorage<ElementType>::STORAGE_CAPACITY> m_cells;
183+ CacheAlligned<std::atomic<uint64_t >> m_writeRank {0 };
184+ CacheAlligned<std::atomic<uint64_t >> m_readRank {0 };
190185};
191186
192187} // namespace ipxp::output
0 commit comments