@@ -56,18 +56,18 @@ class BlockingConcurrentQueue
5656 // includes making the memory effects of construction visible, possibly with a
5757 // memory barrier).
5858 explicit BlockingConcurrentQueue (size_t capacity = 6 * BLOCK_SIZE)
59- : inner(capacity), sema(create<LightweightSemaphore, ssize_t , int >(0 , ( int ) Traits::MAX_SEMA_SPINS), &BlockingConcurrentQueue::template destroy<LightweightSemaphore>)
59+ : inner(capacity), sema(create<LightweightSemaphore, ssize_t , int >(0 , static_cast < int >( Traits::MAX_SEMA_SPINS) ), &BlockingConcurrentQueue::template destroy<LightweightSemaphore>)
6060 {
61- assert (reinterpret_cast <ConcurrentQueue*>(( BlockingConcurrentQueue*) 1 ) == &(( BlockingConcurrentQueue*) 1 )->inner && " BlockingConcurrentQueue must have ConcurrentQueue as its first member" );
61+ assert (reinterpret_cast <ConcurrentQueue*>(reinterpret_cast < BlockingConcurrentQueue*>( 1 )) == &(reinterpret_cast < BlockingConcurrentQueue*>( 1 ) )->inner && " BlockingConcurrentQueue must have ConcurrentQueue as its first member" );
6262 if (!sema) {
6363 MOODYCAMEL_THROW (std::bad_alloc ());
6464 }
6565 }
6666
6767 BlockingConcurrentQueue (size_t minCapacity, size_t maxExplicitProducers, size_t maxImplicitProducers)
68- : inner(minCapacity, maxExplicitProducers, maxImplicitProducers), sema(create<LightweightSemaphore, ssize_t , int >(0 , ( int ) Traits::MAX_SEMA_SPINS), &BlockingConcurrentQueue::template destroy<LightweightSemaphore>)
68+ : inner(minCapacity, maxExplicitProducers, maxImplicitProducers), sema(create<LightweightSemaphore, ssize_t , int >(0 , static_cast < int >( Traits::MAX_SEMA_SPINS) ), &BlockingConcurrentQueue::template destroy<LightweightSemaphore>)
6969 {
70- assert (reinterpret_cast <ConcurrentQueue*>(( BlockingConcurrentQueue*) 1 ) == &(( BlockingConcurrentQueue*) 1 )->inner && " BlockingConcurrentQueue must have ConcurrentQueue as its first member" );
70+ assert (reinterpret_cast <ConcurrentQueue*>(reinterpret_cast < BlockingConcurrentQueue*>( 1 )) == &(reinterpret_cast < BlockingConcurrentQueue*>( 1 ) )->inner && " BlockingConcurrentQueue must have ConcurrentQueue as its first member" );
7171 if (!sema) {
7272 MOODYCAMEL_THROW (std::bad_alloc ());
7373 }
@@ -179,12 +179,13 @@ class BlockingConcurrentQueue
179179 inline bool enqueue_bulk (It itemFirst, size_t count)
180180 {
181181 if ((details::likely)(inner.enqueue_bulk (std::forward<It>(itemFirst), count))) {
182- sema->signal ((LightweightSemaphore::ssize_t )(ssize_t )count);
182+ assert (static_cast <ssize_t >(count) >= 0 );
183+ sema->signal (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(count)));
183184 return true ;
184185 }
185186 return false ;
186187 }
187-
188+
188189 // Enqueues several items using an explicit producer token.
189190 // Allocates memory if required. Only fails if memory allocation fails
190191 // (or Traits::MAX_SUBQUEUE_SIZE has been defined and would be surpassed).
@@ -195,7 +196,8 @@ class BlockingConcurrentQueue
195196 inline bool enqueue_bulk (producer_token_t const & token, It itemFirst, size_t count)
196197 {
197198 if ((details::likely)(inner.enqueue_bulk (token, std::forward<It>(itemFirst), count))) {
198- sema->signal ((LightweightSemaphore::ssize_t )(ssize_t )count);
199+ assert (static_cast <ssize_t >(count) >= 0 );
200+ sema->signal (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(count)));
199201 return true ;
200202 }
201203 return false ;
@@ -264,12 +266,13 @@ class BlockingConcurrentQueue
264266 inline bool try_enqueue_bulk (It itemFirst, size_t count)
265267 {
266268 if (inner.try_enqueue_bulk (std::forward<It>(itemFirst), count)) {
267- sema->signal ((LightweightSemaphore::ssize_t )(ssize_t )count);
269+ assert (static_cast <ssize_t >(count) >= 0 );
270+ sema->signal (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(count)));
268271 return true ;
269272 }
270273 return false ;
271274 }
272-
275+
273276 // Enqueues several items using an explicit producer token.
274277 // Does not allocate memory. Fails if not enough room to enqueue.
275278 // Note: Use std::make_move_iterator if the elements should be moved
@@ -279,7 +282,8 @@ class BlockingConcurrentQueue
279282 inline bool try_enqueue_bulk (producer_token_t const & token, It itemFirst, size_t count)
280283 {
281284 if (inner.try_enqueue_bulk (token, std::forward<It>(itemFirst), count)) {
282- sema->signal ((LightweightSemaphore::ssize_t )(ssize_t )count);
285+ assert (static_cast <ssize_t >(count) >= 0 );
286+ sema->signal (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(count)));
283287 return true ;
284288 }
285289 return false ;
@@ -327,13 +331,14 @@ class BlockingConcurrentQueue
327331 inline size_t try_dequeue_bulk (It itemFirst, size_t max)
328332 {
329333 size_t count = 0 ;
330- max = (size_t )sema->tryWaitMany ((LightweightSemaphore::ssize_t )(ssize_t )max);
334+ assert (static_cast <ssize_t >(max) >= 0 );
335+ max = static_cast <size_t >(sema->tryWaitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max))));
331336 while (count != max) {
332337 count += inner.template try_dequeue_bulk <It&>(itemFirst, max - count);
333338 }
334339 return count;
335340 }
336-
341+
337342 // Attempts to dequeue several elements from the queue using an explicit consumer token.
338343 // Returns the number of items actually dequeued.
339344 // Returns 0 if all producer streams appeared empty at the time they
@@ -343,7 +348,8 @@ class BlockingConcurrentQueue
343348 inline size_t try_dequeue_bulk (consumer_token_t & token, It itemFirst, size_t max)
344349 {
345350 size_t count = 0 ;
346- max = (size_t )sema->tryWaitMany ((LightweightSemaphore::ssize_t )(ssize_t )max);
351+ assert (static_cast <ssize_t >(max) >= 0 );
352+ max = static_cast <size_t >(sema->tryWaitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max))));
347353 while (count != max) {
348354 count += inner.template try_dequeue_bulk <It&>(token, itemFirst, max - count);
349355 }
@@ -447,13 +453,14 @@ class BlockingConcurrentQueue
447453 inline size_t wait_dequeue_bulk (It itemFirst, size_t max)
448454 {
449455 size_t count = 0 ;
450- max = (size_t )sema->waitMany ((LightweightSemaphore::ssize_t )(ssize_t )max);
456+ assert (static_cast <ssize_t >(max) >= 0 );
457+ max = static_cast <size_t >(sema->waitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max))));
451458 while (count != max) {
452459 count += inner.template try_dequeue_bulk <It&>(itemFirst, max - count);
453460 }
454461 return count;
455462 }
456-
463+
457464 // Attempts to dequeue several elements from the queue.
458465 // Returns the number of items actually dequeued, which can
459466 // be 0 if the timeout expires while waiting for elements,
@@ -465,7 +472,8 @@ class BlockingConcurrentQueue
465472 inline size_t wait_dequeue_bulk_timed (It itemFirst, size_t max, std::int64_t timeout_usecs)
466473 {
467474 size_t count = 0 ;
468- max = (size_t )sema->waitMany ((LightweightSemaphore::ssize_t )(ssize_t )max, timeout_usecs);
475+ assert (static_cast <ssize_t >(max) >= 0 );
476+ max = static_cast <size_t >(sema->waitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max)), timeout_usecs));
469477 while (count != max) {
470478 count += inner.template try_dequeue_bulk <It&>(itemFirst, max - count);
471479 }
@@ -492,7 +500,8 @@ class BlockingConcurrentQueue
492500 inline size_t wait_dequeue_bulk (consumer_token_t & token, It itemFirst, size_t max)
493501 {
494502 size_t count = 0 ;
495- max = (size_t )sema->waitMany ((LightweightSemaphore::ssize_t )(ssize_t )max);
503+ assert (static_cast <ssize_t >(max) >= 0 );
504+ max = static_cast <size_t >(sema->waitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max))));
496505 while (count != max) {
497506 count += inner.template try_dequeue_bulk <It&>(token, itemFirst, max - count);
498507 }
@@ -510,7 +519,8 @@ class BlockingConcurrentQueue
510519 inline size_t wait_dequeue_bulk_timed (consumer_token_t & token, It itemFirst, size_t max, std::int64_t timeout_usecs)
511520 {
512521 size_t count = 0 ;
513- max = (size_t )sema->waitMany ((LightweightSemaphore::ssize_t )(ssize_t )max, timeout_usecs);
522+ assert (static_cast <ssize_t >(max) >= 0 );
523+ max = static_cast <size_t >(sema->waitMany (static_cast <LightweightSemaphore::ssize_t >(static_cast <ssize_t >(max)), timeout_usecs));
514524 while (count != max) {
515525 count += inner.template try_dequeue_bulk <It&>(token, itemFirst, max - count);
516526 }
@@ -537,7 +547,7 @@ class BlockingConcurrentQueue
537547 // Thread-safe.
538548 inline size_t size_approx () const
539549 {
540- return ( size_t ) sema->availableApprox ();
550+ return static_cast < size_t >( sema->availableApprox () );
541551 }
542552
543553
@@ -548,7 +558,7 @@ class BlockingConcurrentQueue
548558 {
549559 return ConcurrentQueue::is_lock_free ();
550560 }
551-
561+
552562
553563private:
554564 template <typename U, typename A1, typename A2>
@@ -557,7 +567,7 @@ class BlockingConcurrentQueue
557567 void * p = (Traits::malloc)(sizeof (U));
558568 return p != nullptr ? new (p) U (std::forward<A1>(a1), std::forward<A2>(a2)) : nullptr ;
559569 }
560-
570+
561571 template <typename U>
562572 static inline void destroy (U* p)
563573 {
@@ -566,7 +576,7 @@ class BlockingConcurrentQueue
566576 }
567577 (Traits::free)(p);
568578 }
569-
579+
570580private:
571581 ConcurrentQueue inner;
572582 std::unique_ptr<LightweightSemaphore, void (*)(LightweightSemaphore*)> sema;
0 commit comments