Still more.

This commit is contained in:
Bartosz Taudul 2019-07-30 01:30:31 +02:00
parent 47423e6263
commit ca3571fd2b

View File

@ -957,18 +957,18 @@ private:
template<typename U> template<typename U>
inline bool inner_enqueue(producer_token_t const& token, U&& element) inline bool inner_enqueue(producer_token_t const& token, U&& element)
{ {
return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::template enqueue(std::forward<U>(element)); return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::enqueue(std::forward<U>(element));
} }
tracy_force_inline T* inner_enqueue_begin(producer_token_t const& token, index_t& currentTailIndex) tracy_force_inline T* inner_enqueue_begin(producer_token_t const& token, index_t& currentTailIndex)
{ {
return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::template enqueue_begin(currentTailIndex); return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::enqueue_begin(currentTailIndex);
} }
template<typename It> template<typename It>
inline bool inner_enqueue_bulk(producer_token_t const& token, It itemFirst, size_t count) inline bool inner_enqueue_bulk(producer_token_t const& token, It itemFirst, size_t count)
{ {
return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::template enqueue_bulk(itemFirst, count); return static_cast<ExplicitProducer*>(token.producer)->ConcurrentQueue::ExplicitProducer::enqueue_bulk(itemFirst, count);
} }
inline bool update_current_producer_after_rotation(consumer_token_t& token) inline bool update_current_producer_after_rotation(consumer_token_t& token)
@ -1407,10 +1407,10 @@ private:
// We reached the end of a block, start a new one // We reached the end of a block, start a new one
auto startBlock = this->tailBlock; auto startBlock = this->tailBlock;
auto originalBlockIndexSlotsUsed = pr_blockIndexSlotsUsed; auto originalBlockIndexSlotsUsed = pr_blockIndexSlotsUsed;
if (this->tailBlock != nullptr && this->tailBlock->next->ConcurrentQueue::Block::template is_empty()) { if (this->tailBlock != nullptr && this->tailBlock->next->ConcurrentQueue::Block::is_empty()) {
// We can re-use the block ahead of us, it's empty! // We can re-use the block ahead of us, it's empty!
this->tailBlock = this->tailBlock->next; this->tailBlock = this->tailBlock->next;
this->tailBlock->ConcurrentQueue::Block::template reset_empty(); this->tailBlock->ConcurrentQueue::Block::reset_empty();
// We'll put the block on the block index (guaranteed to be room since we're conceptually removing the // We'll put the block on the block index (guaranteed to be room since we're conceptually removing the
// last block from it first -- except instead of removing then adding, we can just overwrite). // last block from it first -- except instead of removing then adding, we can just overwrite).
@ -1443,11 +1443,11 @@ private:
} }
// Insert a new block in the circular linked list // Insert a new block in the circular linked list
auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); auto newBlock = this->parent->ConcurrentQueue::requisition_block();
if (newBlock == nullptr) { if (newBlock == nullptr) {
return false; return false;
} }
newBlock->ConcurrentQueue::Block::template reset_empty(); newBlock->ConcurrentQueue::Block::reset_empty();
if (this->tailBlock == nullptr) { if (this->tailBlock == nullptr) {
newBlock->next = newBlock; newBlock->next = newBlock;
} }
@ -1522,8 +1522,8 @@ private:
} }
// Insert a new block in the circular linked list // Insert a new block in the circular linked list
auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); auto newBlock = this->parent->ConcurrentQueue::requisition_block();
newBlock->ConcurrentQueue::Block::template reset_empty(); newBlock->ConcurrentQueue::Block::reset_empty();
if (this->tailBlock == nullptr) { if (this->tailBlock == nullptr) {
newBlock->next = newBlock; newBlock->next = newBlock;
} }
@ -1633,7 +1633,7 @@ private:
~Guard() ~Guard()
{ {
(*block)[index]->~T(); (*block)[index]->~T();
block->ConcurrentQueue::Block::template set_empty(index); block->ConcurrentQueue::Block::set_empty(index);
} }
} guard = { block, index }; } guard = { block, index };
@ -1642,7 +1642,7 @@ private:
else { else {
element = std::move(el); element = std::move(el);
el.~T(); el.~T();
block->ConcurrentQueue::Block::template set_empty(index); block->ConcurrentQueue::Block::set_empty(index);
} }
return true; return true;
@ -1674,7 +1674,7 @@ private:
index_t currentTailIndex = (startTailIndex - 1) & ~static_cast<index_t>(BLOCK_SIZE - 1); index_t currentTailIndex = (startTailIndex - 1) & ~static_cast<index_t>(BLOCK_SIZE - 1);
if (blockBaseDiff > 0) { if (blockBaseDiff > 0) {
// Allocate as many blocks as possible from ahead // Allocate as many blocks as possible from ahead
while (blockBaseDiff > 0 && this->tailBlock != nullptr && this->tailBlock->next != firstAllocatedBlock && this->tailBlock->next->ConcurrentQueue::Block::template is_empty()) { while (blockBaseDiff > 0 && this->tailBlock != nullptr && this->tailBlock->next != firstAllocatedBlock && this->tailBlock->next->ConcurrentQueue::Block::is_empty()) {
blockBaseDiff -= static_cast<index_t>(BLOCK_SIZE); blockBaseDiff -= static_cast<index_t>(BLOCK_SIZE);
currentTailIndex += static_cast<index_t>(BLOCK_SIZE); currentTailIndex += static_cast<index_t>(BLOCK_SIZE);
@ -1711,7 +1711,7 @@ private:
} }
// Insert a new block in the circular linked list // Insert a new block in the circular linked list
auto newBlock = this->parent->ConcurrentQueue::template requisition_block(); auto newBlock = this->parent->ConcurrentQueue::requisition_block();
if (newBlock == nullptr) { if (newBlock == nullptr) {
pr_blockIndexFront = originalBlockIndexFront; pr_blockIndexFront = originalBlockIndexFront;
pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed; pr_blockIndexSlotsUsed = originalBlockIndexSlotsUsed;
@ -1719,7 +1719,7 @@ private:
return false; return false;
} }
newBlock->ConcurrentQueue::Block::template set_all_empty(); newBlock->ConcurrentQueue::Block::set_all_empty();
if (this->tailBlock == nullptr) { if (this->tailBlock == nullptr) {
newBlock->next = newBlock; newBlock->next = newBlock;
} }
@ -1742,7 +1742,7 @@ private:
// publish the new block index front // publish the new block index front
auto block = firstAllocatedBlock; auto block = firstAllocatedBlock;
while (true) { while (true) {
block->ConcurrentQueue::Block::template reset_empty(); block->ConcurrentQueue::Block::reset_empty();
if (block == this->tailBlock) { if (block == this->tailBlock) {
break; break;
} }