From 8ba825d3ddb089e4e4fd651a36281e3c47cc9628 Mon Sep 17 00:00:00 2001 From: Paul Fd Date: Wed, 11 Mar 2020 09:50:04 +0100 Subject: [PATCH] Clean up changes to the atomic_queue --- src/external/atomic_queue/atomic_queue.h | 30 ++++++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/external/atomic_queue/atomic_queue.h b/src/external/atomic_queue/atomic_queue.h index bcbd29a9..e7bcf0f2 100644 --- a/src/external/atomic_queue/atomic_queue.h +++ b/src/external/atomic_queue/atomic_queue.h @@ -95,15 +95,35 @@ constexpr T& map(T* elements, unsigned index) noexcept { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Implement a "bit-twiddling hack" for finding the next power of 2 +// in either 32 bits or 64 bits in C++11 compatible constexpr functions + +// "Runtime" version for 32 bits +// --a; +// a |= a >> 1; +// a |= a >> 2; +// a |= a >> 4; +// a |= a >> 8; +// a |= a >> 16; +// ++a; + template -constexpr T decrement(T x) { return x - 1; } +constexpr T decrement(T x) { + return x - 1; +} + template -constexpr T increment(T x) { return x + 1; } +constexpr T increment(T x) { + return x + 1; +} + template -constexpr T or_equal(T x, unsigned u) { return (x | x >> u); } +constexpr T or_equal(T x, unsigned u) { + return (x | x >> u); +} + template -constexpr T or_equal(T x, unsigned u, Args... rest) -{ +constexpr T or_equal(T x, unsigned u, Args... rest) { return or_equal(or_equal(x, u), rest...); }