/src/harfbuzz/src/hb-atomic.hh
Line | Count | Source |
1 | | /* |
2 | | * Copyright © 2007 Chris Wilson |
3 | | * Copyright © 2009,2010 Red Hat, Inc. |
4 | | * Copyright © 2011,2012 Google, Inc. |
5 | | * |
6 | | * This is part of HarfBuzz, a text shaping library. |
7 | | * |
8 | | * Permission is hereby granted, without written agreement and without |
9 | | * license or royalty fees, to use, copy, modify, and distribute this |
10 | | * software and its documentation for any purpose, provided that the |
11 | | * above copyright notice and the following two paragraphs appear in |
12 | | * all copies of this software. |
13 | | * |
14 | | * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR |
15 | | * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES |
16 | | * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN |
17 | | * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
18 | | * DAMAGE. |
19 | | * |
20 | | * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
21 | | * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
22 | | * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS |
23 | | * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO |
24 | | * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
25 | | * |
26 | | * Contributor(s): |
27 | | * Chris Wilson <chris@chris-wilson.co.uk> |
28 | | * Red Hat Author(s): Behdad Esfahbod |
29 | | * Google Author(s): Behdad Esfahbod |
30 | | */ |
31 | | |
32 | | #ifndef HB_ATOMIC_HH |
33 | | #define HB_ATOMIC_HH |
34 | | |
35 | | #include "hb.hh" |
36 | | #include "hb-meta.hh" |
37 | | |
38 | | |
39 | | /* |
40 | | * Atomic integers and pointers. |
41 | | */ |
42 | | |
43 | | |
44 | | /* We need external help for these */ |
45 | | |
46 | | #if defined(hb_atomic_int_impl_add) \ |
47 | | && defined(hb_atomic_ptr_impl_get) \ |
48 | | && defined(hb_atomic_ptr_impl_cmpexch) |
49 | | |
50 | | /* Defined externally, i.e. in config.h. */ |
51 | | |
52 | | |
53 | | #elif !defined(HB_NO_MT) && defined(__ATOMIC_ACQUIRE) |
54 | | |
55 | | /* C++11-style GCC primitives. We prefer these as they don't require linking to libstdc++ / libc++. */ |
56 | | |
57 | | #define _hb_memory_barrier() __sync_synchronize () |
58 | | |
59 | 393M | #define hb_atomic_int_impl_add(AI, V) __atomic_fetch_add ((AI), (V), __ATOMIC_ACQ_REL) |
60 | 1.75G | #define hb_atomic_int_impl_set_relaxed(AI, V) __atomic_store_n ((AI), (V), __ATOMIC_RELAXED) |
61 | 49.4k | #define hb_atomic_int_impl_set(AI, V) __atomic_store_n ((AI), (V), __ATOMIC_RELEASE) |
62 | 3.58G | #define hb_atomic_int_impl_get_relaxed(AI) __atomic_load_n ((AI), __ATOMIC_RELAXED) |
63 | 498k | #define hb_atomic_int_impl_get(AI) __atomic_load_n ((AI), __ATOMIC_ACQUIRE) |
64 | | |
65 | 343M | #define hb_atomic_ptr_impl_set_relaxed(P, V) __atomic_store_n ((P), (V), __ATOMIC_RELAXED) |
66 | 147M | #define hb_atomic_ptr_impl_get_relaxed(P) __atomic_load_n ((P), __ATOMIC_RELAXED) |
67 | 3.13G | #define hb_atomic_ptr_impl_get(P) __atomic_load_n ((P), __ATOMIC_ACQUIRE) |
68 | | static inline bool |
69 | | _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N) |
70 | 203M | { |
71 | 203M | const void *O = O_; // Need lvalue |
72 | 203M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); |
73 | 203M | } hb-aat-layout.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 30.3M | { | 71 | 30.3M | const void *O = O_; // Need lvalue | 72 | 30.3M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 30.3M | } |
Unexecuted instantiation: hb-aat-map.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-blob.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-buffer.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-common.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 15.2M | { | 71 | 15.2M | const void *O = O_; // Need lvalue | 72 | 15.2M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 15.2M | } |
Unexecuted instantiation: hb-draw.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-face.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 15.2M | { | 71 | 15.2M | const void *O = O_; // Need lvalue | 72 | 15.2M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 15.2M | } |
Unexecuted instantiation: hb-fallback-shape.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-font.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 10.1M | { | 71 | 10.1M | const void *O = O_; // Need lvalue | 72 | 10.1M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 10.1M | } |
Unexecuted instantiation: hb-map.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-number.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-ot-color.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 25.3M | { | 71 | 25.3M | const void *O = O_; // Need lvalue | 72 | 25.3M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 25.3M | } |
Unexecuted instantiation: hb-ot-face.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-ot-font.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 50.3M | { | 71 | 50.3M | const void *O = O_; // Need lvalue | 72 | 50.3M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 50.3M | } |
hb-ot-layout.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 20.2M | { | 71 | 20.2M | const void *O = O_; // Need lvalue | 72 | 20.2M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 20.2M | } |
hb-ot-math.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 5.06M | { | 71 | 5.06M | const void *O = O_; // Need lvalue | 72 | 5.06M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 5.06M | } |
hb-ot-meta.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 5.06M | { | 71 | 5.06M | const void *O = O_; // Need lvalue | 72 | 5.06M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 5.06M | } |
hb-ot-metrics.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 5.06M | { | 71 | 5.06M | const void *O = O_; // Need lvalue | 72 | 5.06M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 5.06M | } |
hb-ot-name.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 5.07M | { | 71 | 5.07M | const void *O = O_; // Need lvalue | 72 | 5.07M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 5.07M | } |
Unexecuted instantiation: hb-ot-shape.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-var.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-set.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-shape-plan.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 16.4M | { | 71 | 16.4M | const void *O = O_; // Need lvalue | 72 | 16.4M | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 16.4M | } |
Unexecuted instantiation: hb-shape.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-shaper.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 1.36k | { | 71 | 1.36k | const void *O = O_; // Need lvalue | 72 | 1.36k | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 1.36k | } |
Unexecuted instantiation: hb-unicode.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-buffer-verify.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-paint-extents.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 2.07k | { | 71 | 2.07k | const void *O = O_; // Need lvalue | 72 | 2.07k | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 2.07k | } |
Unexecuted instantiation: hb-ot-cff1-table.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-cff2-table.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-map.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-ot-shaper-arabic.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 20.6k | { | 71 | 20.6k | const void *O = O_; // Need lvalue | 72 | 20.6k | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 20.6k | } |
Unexecuted instantiation: hb-ot-shaper-default.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-hangul.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-hebrew.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-indic.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-khmer.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-myanmar.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-syllabic.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-thai.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-use.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shape-fallback.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shape-normalize.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-tag.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) hb-ucd.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Line | Count | Source | 70 | 1.36k | { | 71 | 1.36k | const void *O = O_; // Need lvalue | 72 | 1.36k | return __atomic_compare_exchange_n ((void **) P, (void **) &O, (void *) N, true, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED); | 73 | 1.36k | } |
Unexecuted instantiation: hb-buffer-serialize.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-paint.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) Unexecuted instantiation: hb-ot-shaper-indic-table.cc:_hb_atomic_ptr_impl_cmplexch(void const**, void const*, void const*) |
74 | 203M | #define hb_atomic_ptr_impl_cmpexch(P,O,N) _hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N)) |
75 | | |
76 | | |
77 | | #elif !defined(HB_NO_MT) |
78 | | |
79 | | /* C++11 atomics. */ |
80 | | |
81 | | #include <atomic> |
82 | | |
83 | | #define _hb_memory_barrier() std::atomic_thread_fence(std::memory_order_ack_rel) |
84 | | #define _hb_memory_r_barrier() std::atomic_thread_fence(std::memory_order_acquire) |
85 | | #define _hb_memory_w_barrier() std::atomic_thread_fence(std::memory_order_release) |
86 | | |
87 | | #define hb_atomic_int_impl_add(AI, V) (reinterpret_cast<std::atomic<int> *> (AI)->fetch_add ((V), std::memory_order_acq_rel)) |
88 | | #define hb_atomic_int_impl_set_relaxed(AI, V) (reinterpret_cast<std::atomic<int> *> (AI)->store ((V), std::memory_order_relaxed)) |
89 | | #define hb_atomic_int_impl_set(AI, V) (reinterpret_cast<std::atomic<int> *> (AI)->store ((V), std::memory_order_release)) |
90 | | #define hb_atomic_int_impl_get_relaxed(AI) (reinterpret_cast<std::atomic<int> const *> (AI)->load (std::memory_order_relaxed)) |
91 | | #define hb_atomic_int_impl_get(AI) (reinterpret_cast<std::atomic<int> const *> (AI)->load (std::memory_order_acquire)) |
92 | | |
93 | | #define hb_atomic_ptr_impl_set_relaxed(P, V) (reinterpret_cast<std::atomic<void*> *> (P)->store ((V), std::memory_order_relaxed)) |
94 | | #define hb_atomic_ptr_impl_get_relaxed(P) (reinterpret_cast<std::atomic<void*> const *> (P)->load (std::memory_order_relaxed)) |
95 | | #define hb_atomic_ptr_impl_get(P) (reinterpret_cast<std::atomic<void*> *> (P)->load (std::memory_order_acquire)) |
96 | | static inline bool |
97 | | _hb_atomic_ptr_impl_cmplexch (const void **P, const void *O_, const void *N) |
98 | | { |
99 | | const void *O = O_; // Need lvalue |
100 | | return reinterpret_cast<std::atomic<const void*> *> (P)->compare_exchange_weak (O, N, std::memory_order_acq_rel, std::memory_order_relaxed); |
101 | | } |
102 | | #define hb_atomic_ptr_impl_cmpexch(P,O,N) _hb_atomic_ptr_impl_cmplexch ((const void **) (P), (O), (N)) |
103 | | |
104 | | |
105 | | #else /* defined(HB_NO_MT) */ |
106 | | |
107 | | #define hb_atomic_int_impl_add(AI, V) ((*(AI) += (V)) - (V)) |
108 | | #define _hb_memory_barrier() do {} while (0) |
109 | | #define hb_atomic_ptr_impl_cmpexch(P,O,N) (* (void **) (P) == (void *) (O) ? (* (void **) (P) = (void *) (N), true) : false) |
110 | | |
111 | | #endif |
112 | | |
113 | | |
114 | | #ifndef _hb_compiler_memory_r_barrier |
115 | | /* This we always use std::atomic for; and should never be disabled... |
116 | | * except that MSVC gives me an internal compiler error on it. */ |
117 | | #if !defined(_MSC_VER) |
118 | | #include <atomic> |
119 | 2.60G | #define _hb_compiler_memory_r_barrier() std::atomic_signal_fence (std::memory_order_acquire) |
120 | | #else |
121 | | #define _hb_compiler_memory_r_barrier() do {} while (0) |
122 | | #endif |
123 | | #endif |
124 | | |
125 | | |
126 | | |
127 | | #ifndef _hb_memory_r_barrier |
128 | | #define _hb_memory_r_barrier() _hb_memory_barrier () |
129 | | #endif |
130 | | #ifndef _hb_memory_w_barrier |
131 | | #define _hb_memory_w_barrier() _hb_memory_barrier () |
132 | | #endif |
133 | | #ifndef hb_atomic_int_impl_set_relaxed |
134 | | #define hb_atomic_int_impl_set_relaxed(AI, V) (*(AI) = (V)) |
135 | | #endif |
136 | | #ifndef hb_atomic_int_impl_get_relaxed |
137 | | #define hb_atomic_int_impl_get_relaxed(AI) (*(AI)) |
138 | | #endif |
139 | | |
140 | | #ifndef hb_atomic_ptr_impl_set_relaxed |
141 | | #define hb_atomic_ptr_impl_set_relaxed(P, V) (*(P) = (V)) |
142 | | #endif |
143 | | #ifndef hb_atomic_ptr_impl_get_relaxed |
144 | | #define hb_atomic_ptr_impl_get_relaxed(P) (*(P)) |
145 | | #endif |
146 | | #ifndef hb_atomic_int_impl_set |
147 | | inline void hb_atomic_int_impl_set (int *AI, int v) { _hb_memory_w_barrier (); *AI = v; } |
148 | | #endif |
149 | | #ifndef hb_atomic_int_impl_get |
150 | | inline int hb_atomic_int_impl_get (const int *AI) { int v = *AI; _hb_memory_r_barrier (); return v; } |
151 | | #endif |
152 | | #ifndef hb_atomic_ptr_impl_get |
153 | | inline void *hb_atomic_ptr_impl_get (void ** const P) { void *v = *P; _hb_memory_r_barrier (); return v; } |
154 | | #endif |
155 | | |
156 | | |
157 | | struct hb_atomic_int_t |
158 | | { |
159 | 83.9M | hb_atomic_int_t () = default; |
160 | 89.3M | constexpr hb_atomic_int_t (int v) : v (v) {} |
161 | | |
162 | 1.75G | hb_atomic_int_t& operator = (int v_) { set_relaxed (v_); return *this; } |
163 | 3.58G | operator int () const { return get_relaxed (); } |
164 | | |
165 | 1.75G | void set_relaxed (int v_) { hb_atomic_int_impl_set_relaxed (&v, v_); } |
166 | 49.4k | void set_release (int v_) { hb_atomic_int_impl_set (&v, v_); } |
167 | 3.58G | int get_relaxed () const { return hb_atomic_int_impl_get_relaxed (&v); } |
168 | 498k | int get_acquire () const { return hb_atomic_int_impl_get (&v); } |
169 | 159M | int inc () { return hb_atomic_int_impl_add (&v, 1); } |
170 | 233M | int dec () { return hb_atomic_int_impl_add (&v, -1); } |
171 | | |
172 | | int v = 0; |
173 | | }; |
174 | | |
175 | | template <typename P> |
176 | | struct hb_atomic_ptr_t |
177 | | { |
178 | | typedef hb_remove_pointer<P> T; |
179 | | |
180 | 307M | hb_atomic_ptr_t () = default; hb_atomic_ptr_t<hb_user_data_array_t>::hb_atomic_ptr_t() Line | Count | Source | 180 | 73.8M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_ot_face_data_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_fallback_face_data_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_blob_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 116M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::cmap_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::hmtx_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::post_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::name_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::meta_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::vmtx_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::glyf_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::cff1_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::cff2_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::gvar_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::GDEF_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::GSUB_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::GPOS_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::CBDT_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::sbix_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<OT::SVG_accelerator_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_face_t::plan_node_t>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_ot_font_data_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.19M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_fallback_font_data_t*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.19M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<hb_vector_t<OT::cff1::accelerator_t::gname_t, true> >::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.05M | hb_atomic_ptr_t () = default; |
hb_atomic_ptr_t<unsigned short*>::hb_atomic_ptr_t() Line | Count | Source | 180 | 5.06M | hb_atomic_ptr_t () = default; |
|
181 | | constexpr hb_atomic_ptr_t (T* v) : v (v) {} |
182 | | |
183 | 94.6M | void init (T* v_ = nullptr) { set_relaxed (v_); } |
184 | 343M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } hb_atomic_ptr_t<hb_user_data_array_t>::set_relaxed(hb_user_data_array_t*) Line | Count | Source | 184 | 99.6M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_ot_font_data_t*>::set_relaxed(hb_ot_font_data_t*) Line | Count | Source | 184 | 15.5M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_fallback_font_data_t*>::set_relaxed(hb_fallback_font_data_t*) Line | Count | Source | 184 | 15.5M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_ot_face_data_t*>::set_relaxed(hb_ot_face_data_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_fallback_face_data_t*>::set_relaxed(hb_fallback_face_data_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_blob_t*>::set_relaxed(hb_blob_t*) Line | Count | Source | 184 | 116M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::cmap_accelerator_t*>::set_relaxed(OT::cmap_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::hmtx_accelerator_t*>::set_relaxed(OT::hmtx_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::post_accelerator_t*>::set_relaxed(OT::post_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::name_accelerator_t*>::set_relaxed(OT::name_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::meta_accelerator_t*>::set_relaxed(OT::meta_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::vmtx_accelerator_t*>::set_relaxed(OT::vmtx_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::glyf_accelerator_t*>::set_relaxed(OT::glyf_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::cff1_accelerator_t*>::set_relaxed(OT::cff1_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::cff2_accelerator_t*>::set_relaxed(OT::cff2_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::gvar_accelerator_t*>::set_relaxed(OT::gvar_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::GDEF_accelerator_t*>::set_relaxed(OT::GDEF_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::GSUB_accelerator_t*>::set_relaxed(OT::GSUB_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::GPOS_accelerator_t*>::set_relaxed(OT::GPOS_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::CBDT_accelerator_t*>::set_relaxed(OT::CBDT_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::sbix_accelerator_t*>::set_relaxed(OT::sbix_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<OT::SVG_accelerator_t*>::set_relaxed(OT::SVG_accelerator_t*) Line | Count | Source | 184 | 5.06M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
hb_atomic_ptr_t<hb_vector_t<OT::cff1::accelerator_t::gname_t, true> >::set_relaxed(hb_vector_t<OT::cff1::accelerator_t::gname_t, true>*) Line | Count | Source | 184 | 5.05M | void set_relaxed (T* v_) { hb_atomic_ptr_impl_set_relaxed (&v, v_); } |
|
185 | 147M | T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); } hb_atomic_ptr_t<OT::GPOS_accelerator_t*>::get_relaxed() const Line | Count | Source | 185 | 26.5M | T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); } |
hb_atomic_ptr_t<hb_vector_t<OT::cff1::accelerator_t::gname_t, true> >::get_relaxed() const Line | Count | Source | 185 | 5.05M | T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); } |
hb_atomic_ptr_t<OT::GSUB_accelerator_t*>::get_relaxed() const Line | Count | Source | 185 | 99.9M | T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); } |
hb_atomic_ptr_t<hb_cache_t<24u, 16u, 8u, true> >::get_relaxed() const Line | Count | Source | 185 | 15.5M | T *get_relaxed () const { return (T *) hb_atomic_ptr_impl_get_relaxed (&v); } |
|
186 | 3.13G | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } hb_atomic_ptr_t<OT::GDEF_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 206M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_blob_t*>::get_acquire() const Line | Count | Source | 186 | 735M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_user_data_array_t>::get_acquire() const Line | Count | Source | 186 | 114M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_ot_font_data_t*>::get_acquire() const Line | Count | Source | 186 | 106M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_fallback_font_data_t*>::get_acquire() const Line | Count | Source | 186 | 15.5M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_language_item_t>::get_acquire() const Line | Count | Source | 186 | 17.0M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
Unexecuted instantiation: hb_atomic_ptr_t<__locale_struct*>::get_acquire() const hb_atomic_ptr_t<hb_language_impl_t const*>::get_acquire() const Line | Count | Source | 186 | 10.0M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::gvar_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 10.1M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::hmtx_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 117M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::vmtx_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 15.3M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_face_t::plan_node_t>::get_acquire() const Line | Count | Source | 186 | 96.1M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_ot_face_data_t*>::get_acquire() const Line | Count | Source | 186 | 102M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_fallback_face_data_t*>::get_acquire() const Line | Count | Source | 186 | 5.20M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::cmap_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 380M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::SVG_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 15.4M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::CBDT_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 21.2M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::sbix_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 21.2M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<unsigned short*>::get_acquire() const Line | Count | Source | 186 | 5.07M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::post_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 15.4M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::name_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 25.8M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::meta_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 15.4M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::glyf_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 22.3M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::cff1_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 26.8M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::cff2_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 16.4M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::GSUB_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 538M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<OT::GPOS_accelerator_t*>::get_acquire() const Line | Count | Source | 186 | 339M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_vector_t<OT::cff1::accelerator_t::gname_t, true> >::get_acquire() const Line | Count | Source | 186 | 22.9k | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_font_funcs_t*>::get_acquire() const Line | Count | Source | 186 | 15.5M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_cache_t<24u, 16u, 8u, true> >::get_acquire() const Line | Count | Source | 186 | 2.06M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
Unexecuted instantiation: hb_atomic_ptr_t<char const**>::get_acquire() const hb_atomic_ptr_t<hb_shaper_entry_t*>::get_acquire() const Line | Count | Source | 186 | 97.3M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_paint_funcs_t*>::get_acquire() const Line | Count | Source | 186 | 130k | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_draw_funcs_t*>::get_acquire() const Line | Count | Source | 186 | 978k | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<arabic_fallback_plan_t>::get_acquire() const Line | Count | Source | 186 | 56.2k | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
hb_atomic_ptr_t<hb_unicode_funcs_t*>::get_acquire() const Line | Count | Source | 186 | 23.1M | T *get_acquire () const { return (T *) hb_atomic_ptr_impl_get ((void **) &v); } |
|
187 | 203M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } hb_atomic_ptr_t<OT::GDEF_accelerator_t*>::cmpexch(OT::GDEF_accelerator_t const*, OT::GDEF_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_blob_t*>::cmpexch(hb_blob_t const*, hb_blob_t*) const Line | Count | Source | 187 | 100M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_user_data_array_t>::cmpexch(hb_user_data_array_t const*, hb_user_data_array_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_language_item_t>::cmpexch(hb_language_item_t const*, hb_language_item_t*) const Line | Count | Source | 187 | 5.69k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
Unexecuted instantiation: hb_atomic_ptr_t<__locale_struct*>::cmpexch(__locale_struct const*, __locale_struct*) const hb_atomic_ptr_t<hb_language_impl_t const*>::cmpexch(hb_language_impl_t const*, hb_language_impl_t const*) const Line | Count | Source | 187 | 1.36k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::gvar_accelerator_t*>::cmpexch(OT::gvar_accelerator_t const*, OT::gvar_accelerator_t*) const Line | Count | Source | 187 | 5.05M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::hmtx_accelerator_t*>::cmpexch(OT::hmtx_accelerator_t const*, OT::hmtx_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::vmtx_accelerator_t*>::cmpexch(OT::vmtx_accelerator_t const*, OT::vmtx_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::cmap_accelerator_t*>::cmpexch(OT::cmap_accelerator_t const*, OT::cmap_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::SVG_accelerator_t*>::cmpexch(OT::SVG_accelerator_t const*, OT::SVG_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::CBDT_accelerator_t*>::cmpexch(OT::CBDT_accelerator_t const*, OT::CBDT_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::sbix_accelerator_t*>::cmpexch(OT::sbix_accelerator_t const*, OT::sbix_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_vector_t<OT::cff1::accelerator_t::gname_t, true> >::cmpexch(hb_vector_t<OT::cff1::accelerator_t::gname_t, true> const*, hb_vector_t<OT::cff1::accelerator_t::gname_t, true>*) const Line | Count | Source | 187 | 22.9k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<unsigned short*>::cmpexch(unsigned short const*, unsigned short*) const Line | Count | Source | 187 | 10.5k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_cache_t<24u, 16u, 8u, true> >::cmpexch(hb_cache_t<24u, 16u, 8u, true> const*, hb_cache_t<24u, 16u, 8u, true>*) const Line | Count | Source | 187 | 49.4k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::cff1_accelerator_t*>::cmpexch(OT::cff1_accelerator_t const*, OT::cff1_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::cff2_accelerator_t*>::cmpexch(OT::cff2_accelerator_t const*, OT::cff2_accelerator_t*) const Line | Count | Source | 187 | 5.03M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::post_accelerator_t*>::cmpexch(OT::post_accelerator_t const*, OT::post_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_font_funcs_t*>::cmpexch(hb_font_funcs_t const*, hb_font_funcs_t*) const Line | Count | Source | 187 | 1.36k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::glyf_accelerator_t*>::cmpexch(OT::glyf_accelerator_t const*, OT::glyf_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::GSUB_accelerator_t*>::cmpexch(OT::GSUB_accelerator_t const*, OT::GSUB_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::GPOS_accelerator_t*>::cmpexch(OT::GPOS_accelerator_t const*, OT::GPOS_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::meta_accelerator_t*>::cmpexch(OT::meta_accelerator_t const*, OT::meta_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<OT::name_accelerator_t*>::cmpexch(OT::name_accelerator_t const*, OT::name_accelerator_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_ot_font_data_t*>::cmpexch(hb_ot_font_data_t const*, hb_ot_font_data_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
Unexecuted instantiation: hb_atomic_ptr_t<hb_fallback_font_data_t*>::cmpexch(hb_fallback_font_data_t const*, hb_fallback_font_data_t*) const hb_atomic_ptr_t<hb_ot_face_data_t*>::cmpexch(hb_ot_face_data_t const*, hb_ot_face_data_t*) const Line | Count | Source | 187 | 5.06M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
Unexecuted instantiation: hb_atomic_ptr_t<hb_fallback_face_data_t*>::cmpexch(hb_fallback_face_data_t const*, hb_fallback_face_data_t*) const hb_atomic_ptr_t<hb_face_t::plan_node_t>::cmpexch(hb_face_t::plan_node_t const*, hb_face_t::plan_node_t*) const Line | Count | Source | 187 | 6.28M | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
Unexecuted instantiation: hb_atomic_ptr_t<char const**>::cmpexch(char const* const*, char const**) const hb_atomic_ptr_t<hb_shaper_entry_t*>::cmpexch(hb_shaper_entry_t const*, hb_shaper_entry_t*) const Line | Count | Source | 187 | 1.36k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_draw_funcs_t*>::cmpexch(hb_draw_funcs_t const*, hb_draw_funcs_t*) const Line | Count | Source | 187 | 869 | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_paint_funcs_t*>::cmpexch(hb_paint_funcs_t const*, hb_paint_funcs_t*) const Line | Count | Source | 187 | 1.20k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<arabic_fallback_plan_t>::cmpexch(arabic_fallback_plan_t const*, arabic_fallback_plan_t*) const Line | Count | Source | 187 | 20.6k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
hb_atomic_ptr_t<hb_unicode_funcs_t*>::cmpexch(hb_unicode_funcs_t const*, hb_unicode_funcs_t*) const Line | Count | Source | 187 | 1.36k | bool cmpexch (const T *old, T *new_) const { return hb_atomic_ptr_impl_cmpexch ((void **) &v, (void *) old, (void *) new_); } |
|
188 | | |
189 | 1.56M | T * operator -> () const { return get_acquire (); } |
190 | 123M | template <typename C> operator C * () const { return get_acquire (); } hb_atomic_ptr_t<hb_language_item_t>::operator hb_language_item_t*<hb_language_item_t>() const Line | Count | Source | 190 | 17.0M | template <typename C> operator C * () const { return get_acquire (); } |
hb_atomic_ptr_t<hb_language_impl_t const*>::operator hb_language_impl_t const*<hb_language_impl_t const>() const Line | Count | Source | 190 | 10.0M | template <typename C> operator C * () const { return get_acquire (); } |
hb_atomic_ptr_t<hb_face_t::plan_node_t>::operator hb_face_t::plan_node_t*<hb_face_t::plan_node_t>() const Line | Count | Source | 190 | 96.1M | template <typename C> operator C * () const { return get_acquire (); } |
hb_atomic_ptr_t<arabic_fallback_plan_t>::operator arabic_fallback_plan_t*<arabic_fallback_plan_t>() const Line | Count | Source | 190 | 56.2k | template <typename C> operator C * () const { return get_acquire (); } |
|
191 | | |
192 | | T *v = nullptr; |
193 | | }; |
194 | | |
195 | | |
196 | | #endif /* HB_ATOMIC_HH */ |