Coverage Report

Created: 2024-03-28 05:33

/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 */