X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2FAtomicStruct.h;h=d15d0d9312e9b96b1e29353724b0819d6b292211;hb=61fbd6698139d3f797401da6350371c7afc4030c;hp=2fc6d6e42cb2e6357c1925e9ae95e3c746b5261e;hpb=58d507c161c5e8b097796fe5fb05ccc73c564d5c;p=folly.git diff --git a/folly/AtomicStruct.h b/folly/AtomicStruct.h index 2fc6d6e4..d15d0d93 100644 --- a/folly/AtomicStruct.h +++ b/folly/AtomicStruct.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,11 +16,12 @@ #pragma once -#include -#include #include -#include +#include #include +#include +#include +#include namespace folly { @@ -75,10 +76,19 @@ class AtomicStruct { } bool compare_exchange_strong( - T& v0, T v1, - std::memory_order mo = std::memory_order_seq_cst) noexcept { + T& v0, + T v1, + std::memory_order mo = std::memory_order_seq_cst) noexcept { + return compare_exchange_strong( + v0, v1, mo, detail::default_failure_memory_order(mo)); + } + bool compare_exchange_strong( + T& v0, + T v1, + std::memory_order success, + std::memory_order failure) noexcept { Raw d0 = encode(v0); - bool rv = data.compare_exchange_strong(d0, encode(v1), mo); + bool rv = data.compare_exchange_strong(d0, encode(v1), success, failure); if (!rv) { v0 = decode(d0); } @@ -86,10 +96,19 @@ class AtomicStruct { } bool compare_exchange_weak( - T& v0, T v1, - std::memory_order mo = std::memory_order_seq_cst) noexcept { + T& v0, + T v1, + std::memory_order mo = std::memory_order_seq_cst) noexcept { + return compare_exchange_weak( + v0, v1, mo, detail::default_failure_memory_order(mo)); + } + bool compare_exchange_weak( + T& v0, + T v1, + std::memory_order success, + std::memory_order failure) noexcept { Raw d0 = encode(v0); - bool rv = data.compare_exchange_weak(d0, encode(v1), mo); + bool rv = data.compare_exchange_weak(d0, encode(v1), success, failure); if (!rv) { v0 = decode(d0); }