OLD | NEW |
| 1 /* |
| 2 * Copyright 2015 Google Inc. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. |
| 6 */ |
| 7 |
1 #ifndef SkAtomics_atomic_DEFINED | 8 #ifndef SkAtomics_atomic_DEFINED |
2 #define SkAtomics_atomic_DEFINED | 9 #define SkAtomics_atomic_DEFINED |
3 | 10 |
4 template <typename T> | 11 template <typename T> |
5 T sk_atomic_load(const T* ptr, sk_memory_order mo) { | 12 T sk_atomic_load(const T* ptr, sk_memory_order mo) { |
6 SkASSERT(mo == sk_memory_order_relaxed || | 13 SkASSERT(mo == sk_memory_order_relaxed || |
7 mo == sk_memory_order_seq_cst || | 14 mo == sk_memory_order_seq_cst || |
8 mo == sk_memory_order_acquire || | 15 mo == sk_memory_order_acquire || |
9 mo == sk_memory_order_consume); | 16 mo == sk_memory_order_consume); |
10 return __atomic_load_n(ptr, mo); | 17 return __atomic_load_n(ptr, mo); |
(...skipping 19 matching lines...) Expand all Loading... |
30 sk_memory_order failure) { | 37 sk_memory_order failure) { |
31 // All values of success are valid. | 38 // All values of success are valid. |
32 SkASSERT(failure == sk_memory_order_relaxed || | 39 SkASSERT(failure == sk_memory_order_relaxed || |
33 failure == sk_memory_order_seq_cst || | 40 failure == sk_memory_order_seq_cst || |
34 failure == sk_memory_order_acquire || | 41 failure == sk_memory_order_acquire || |
35 failure == sk_memory_order_consume); | 42 failure == sk_memory_order_consume); |
36 SkASSERT(failure <= success); | 43 SkASSERT(failure <= success); |
37 return __atomic_compare_exchange_n(ptr, expected, desired, false/*weak?*/, s
uccess, failure); | 44 return __atomic_compare_exchange_n(ptr, expected, desired, false/*weak?*/, s
uccess, failure); |
38 } | 45 } |
39 | 46 |
| 47 template <typename T> |
| 48 T sk_atomic_exchange(T* ptr, T val, sk_memory_order mo) { |
| 49 // All values of mo are valid. |
| 50 return __atomic_exchange_n(ptr, val, mo); |
| 51 } |
| 52 |
40 #endif//SkAtomics_atomic_DEFINED | 53 #endif//SkAtomics_atomic_DEFINED |
OLD | NEW |