23 #include <type_traits> 54 template <
typename T,
template <
typename>
class Atom = std::atomic>
59 static_assert(
alignof(
T) <=
alignof(
Raw),
"underlying type is under-aligned");
60 static_assert(
sizeof(
T) <=
sizeof(
Raw),
"underlying type is under-sized");
63 "target type must be trivially copyable");
71 memcpy(&d, static_cast<void*>(&
v),
sizeof(
T));
77 memcpy(static_cast<void*>(&v), &d,
sizeof(
T));
90 return data.is_lock_free();
96 std::memory_order mo = std::memory_order_seq_cst)
noexcept {
97 return compare_exchange_strong(
104 std::memory_order failure)
noexcept {
106 bool rv = data.compare_exchange_strong(d0,
encode(v1),
success, failure);
116 std::memory_order mo = std::memory_order_seq_cst)
noexcept {
117 return compare_exchange_weak(
124 std::memory_order failure)
noexcept {
126 bool rv = data.compare_exchange_weak(d0,
encode(v1),
success, failure);
142 return decode(data.load(mo));
150 data.store(
encode(v), mo);
_t< detail::AtomicStructRaw< constexpr_log2_ceil(sizeof(folly::IndexedMemPool::TaggedPtr))>> Raw
void store(T v, std::memory_order mo=std::memory_order_seq_cst) noexcept
unique_ptr< IOBuf > encode(vector< HPACKHeader > &headers, HPACKEncoder &encoder)
bool compare_exchange_weak(T &v0, T v1, std::memory_order success, std::memory_order failure) noexcept
TokenBindingMessage decode(folly::io::Cursor &cursor)
bool compare_exchange_strong(T &v0, T v1, std::memory_order mo=std::memory_order_seq_cst) noexcept
static T decode(Raw d) noexcept
T load(std::memory_order mo=std::memory_order_seq_cst) const noexcept
T exchange(T v, std::memory_order mo=std::memory_order_seq_cst) noexcept
—— Concurrent Priority Queue Implementation ——
requires E e noexcept(noexcept(s.error(std::move(e))))
constexpr AtomicStruct(T v) noexcept
bool is_lock_free() const noexcept
std::memory_order default_failure_memory_order(std::memory_order successMode)
bool compare_exchange_strong(T &v0, T v1, std::memory_order success, std::memory_order failure) noexcept
constexpr auto data(C &c) -> decltype(c.data())
std::is_trivially_copyable< T > is_trivially_copyable
static const char *const value
static Raw encode(T v) noexcept
bool compare_exchange_weak(T &v0, T v1, std::memory_order mo=std::memory_order_seq_cst) noexcept
T operator=(T v) noexcept