Coverage Report

Created: 2026-09-28 10:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/workdir/UnpackedTarball/harfbuzz/src/hb-bit-set-invertible.hh
Line
Count
Source
1
/*
2
 * Copyright © 2012,2017  Google, Inc.
3
 * Copyright © 2021 Behdad Esfahbod
4
 *
5
 *  This is part of HarfBuzz, a text shaping library.
6
 *
7
 * Permission is hereby granted, without written agreement and without
8
 * license or royalty fees, to use, copy, modify, and distribute this
9
 * software and its documentation for any purpose, provided that the
10
 * above copyright notice and the following two paragraphs appear in
11
 * all copies of this software.
12
 *
13
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
 * DAMAGE.
18
 *
19
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
22
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
 *
25
 * Google Author(s): Behdad Esfahbod
26
 */
27
28
#ifndef HB_BIT_SET_INVERTIBLE_HH
29
#define HB_BIT_SET_INVERTIBLE_HH
30
31
#include "hb.hh"
32
#include "hb-bit-set.hh"
33
34
35
struct hb_bit_set_invertible_t
36
{
37
  hb_bit_set_t s;
38
  bool inverted = false;
39
40
514k
  hb_bit_set_invertible_t () = default;
41
  hb_bit_set_invertible_t (const hb_bit_set_invertible_t& o) = default;
42
0
  hb_bit_set_invertible_t (hb_bit_set_invertible_t&& other)  noexcept : hb_bit_set_invertible_t () { hb_swap (*this, other); }
43
  hb_bit_set_invertible_t& operator= (const hb_bit_set_invertible_t& o) = default;
44
0
  hb_bit_set_invertible_t& operator= (hb_bit_set_invertible_t&& other)  noexcept { hb_swap (*this, other); return *this; }
45
  friend void swap (hb_bit_set_invertible_t &a, hb_bit_set_invertible_t &b) noexcept
46
0
  {
47
0
    if (likely (!a.s.successful || !b.s.successful))
48
0
      return;
49
0
    hb_swap (a.inverted, b.inverted);
50
0
    hb_swap (a.s, b.s);
51
0
  }
52
53
514k
  void init () { s.init (); inverted = false; }
54
514k
  void fini () { s.fini (); }
55
0
  void err () { s.err (); }
56
545k
  bool in_error () const { return s.in_error (); }
57
0
  explicit operator bool () const { return !is_empty (); }
58
59
0
  void alloc (unsigned sz) { s.alloc (sz); }
60
  void reset ()
61
0
  {
62
0
    s.reset ();
63
0
    inverted = false;
64
0
  }
65
  void clear ()
66
0
  {
67
0
    s.clear ();
68
0
    if (likely (s.successful))
69
0
      inverted = false;
70
0
  }
71
  void invert ()
72
31.1k
  {
73
31.1k
    if (likely (s.successful))
74
31.1k
      inverted = !inverted;
75
31.1k
  }
76
77
  bool is_inverted () const
78
15.5k
  {
79
15.5k
    return inverted;
80
15.5k
  }
81
82
  bool is_empty () const
83
47.2k
  {
84
47.2k
    hb_codepoint_t v = INVALID;
85
47.2k
    next (&v);
86
47.2k
    return v == INVALID;
87
47.2k
  }
88
0
  uint32_t hash () const { return s.hash () ^ (uint32_t) inverted; }
89
90
  hb_codepoint_t get_min () const
91
15.5k
  {
92
15.5k
    hb_codepoint_t v = INVALID;
93
15.5k
    next (&v);
94
15.5k
    return v;
95
15.5k
  }
96
  hb_codepoint_t get_max () const
97
15.5k
  {
98
15.5k
    hb_codepoint_t v = INVALID;
99
15.5k
    previous (&v);
100
15.5k
    return v;
101
15.5k
  }
102
  unsigned int get_population () const
103
679k
  { return inverted ? INVALID - s.get_population () : s.get_population (); }
104
  bool get_singleton (hb_codepoint_t *codepoint) const
105
0
  {
106
0
    if (likely (!inverted))
107
0
      return s.get_singleton (codepoint);
108
0
    if (s.get_population () != INVALID - 1)
109
0
      return false;
110
0
    *codepoint = get_min ();
111
0
    return *codepoint != INVALID;
112
0
  }
113
114
115
38.1M
  void add (hb_codepoint_t g) { unlikely (inverted) ? s.del (g) : s.add (g); }
116
  void add_bits (hb_codepoint_t g, uint64_t bits)
117
0
  { unlikely (inverted) ? s.del_bits (g, bits) : s.add_bits (g, bits); }
118
  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
119
244k
  { return unlikely (inverted) ? ((void) s.del_range (a, b), true) : s.add_range (a, b); }
120
121
  template <typename T>
122
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
123
61.7k
  { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); }
Unexecuted instantiation: void hb_bit_set_invertible_t::add_array<OT::Index>(OT::Index const*, unsigned int, unsigned int)
Unexecuted instantiation: void hb_bit_set_invertible_t::add_array<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int)
void hb_bit_set_invertible_t::add_array<unsigned int>(unsigned int const*, unsigned int, unsigned int)
Line
Count
Source
123
61.7k
  { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); }
124
  template <typename T>
125
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
126
127
  /* Might return false if array looks unsorted.
128
   * Used for faster rejection of corrupt data. */
129
  template <typename T>
130
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
131
14.9k
  { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); }
Unexecuted instantiation: bool hb_bit_set_invertible_t::add_sorted_array<OT::HBGlyphID16>(OT::HBGlyphID16 const*, unsigned int, unsigned int)
bool hb_bit_set_invertible_t::add_sorted_array<unsigned int>(unsigned int const*, unsigned int, unsigned int)
Line
Count
Source
131
14.9k
  { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); }
132
  template <typename T>
133
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
134
135
420k
  void del (hb_codepoint_t g) { unlikely (inverted) ? s.add (g) : s.del (g); }
136
  void del_range (hb_codepoint_t a, hb_codepoint_t b)
137
31.1k
  { unlikely (inverted) ? (void) s.add_range (a, b) : s.del_range (a, b); }
138
139
74.7M
  bool get (hb_codepoint_t g) const { return s.get (g) ^ inverted; }
140
0
  bool may_have (hb_codepoint_t g) const { return get (g); }
141
142
  /* Has interface. */
143
0
  bool operator [] (hb_codepoint_t k) const { return get (k); }
144
0
  bool has (hb_codepoint_t k) const { return (*this)[k]; }
145
  /* Predicate. */
146
0
  bool operator () (hb_codepoint_t k) const { return has (k); }
147
148
  /* Sink interface. */
149
  hb_bit_set_invertible_t& operator << (hb_codepoint_t v)
150
0
  { add (v); return *this; }
151
  hb_bit_set_invertible_t& operator << (const hb_codepoint_pair_t& range)
152
0
  { add_range (range.first, range.second); return *this; }
153
154
  bool may_intersect (const hb_bit_set_invertible_t &other) const
155
0
  { return inverted || other.inverted || s.intersects (other.s); }
156
157
  bool intersects (const hb_bit_set_invertible_t &other) const
158
0
  {
159
0
    if (likely (!inverted))
160
0
      return unlikely (other.inverted) ? !s.is_subset (other.s)
161
0
               : s.intersects (other.s);
162
0
    if (likely (!other.inverted))
163
0
      return !other.s.is_subset (s);
164
165
0
    unsigned population = s.get_population ();
166
0
    unsigned other_population = other.s.get_population ();
167
0
    if ((uint64_t) population + other_population < INVALID)
168
0
      return true;
169
170
0
    return population >= other_population
171
0
   ? !hb_all (iter (), other.s)
172
0
   : !hb_all (other.iter (), s);
173
0
  }
174
175
  bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
176
0
  {
177
0
    hb_codepoint_t c = first - 1;
178
0
    return next (&c) && c <= last;
179
0
  }
180
181
  void set (const hb_bit_set_invertible_t &other)
182
202k
  {
183
202k
    s.set (other.s);
184
202k
    if (likely (s.successful))
185
202k
      inverted = other.inverted;
186
202k
  }
187
188
  bool is_equal (const hb_bit_set_invertible_t &other) const
189
0
  {
190
0
    if (likely (inverted == other.inverted))
191
0
      return s.is_equal (other.s);
192
0
    else
193
0
    {
194
      /* TODO Add iter_ranges() and use here. */
195
0
      auto it1 = iter ();
196
0
      auto it2 = other.iter ();
197
0
      return hb_all (+ hb_zip (it1, it2)
198
0
         | hb_map ([](hb_codepoint_pair_t _) { return _.first == _.second; }));
199
0
    }
200
0
  }
201
202
  bool is_subset (const hb_bit_set_invertible_t &larger_set) const
203
0
  {
204
0
    if (unlikely (inverted != larger_set.inverted))
205
0
    {
206
0
      if (inverted)
207
0
  return hb_all (iter (), larger_set.s);
208
0
      else
209
        // larger set is inverted so larger_set.s is the set of things that are not present
210
        // in larger_set, therefore if s has any of those it can't be a subset.
211
0
  return !s.intersects (larger_set.s);
212
0
    }
213
0
    else
214
0
      return unlikely (inverted) ? larger_set.s.is_subset (s) : s.is_subset (larger_set.s);
215
0
  }
216
217
  protected:
218
  template <typename Op>
219
  void process (const Op& op,
220
    const hb_bit_set_invertible_t &other,
221
    hb_vector_t<unsigned> *workspace = nullptr)
222
0
  { s.process (op, other.s, workspace); }
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-fetch.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-fetch.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-fetch.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-fetch.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-fetch.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_20>($_20 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-math.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-math.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-math.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-math.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-math.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_9>($_9 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-style.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-style.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-style.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-style.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-style.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_21>($_21 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_33>($_33 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_29>($_29 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_21>($_21 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_20>($_20 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&, hb_vector_t<unsigned int, false>*)
223
  public:
224
  void union_ (const hb_bit_set_invertible_t &other)
225
0
  {
226
0
    if (likely (inverted == other.inverted))
227
0
    {
228
0
      if (unlikely (inverted))
229
0
  process (hb_bitwise_and, other);
230
0
      else
231
0
  process (hb_bitwise_or, other); /* Main branch. */
232
0
    }
233
0
    else
234
0
    {
235
0
      if (unlikely (inverted))
236
0
  process (hb_bitwise_gt, other);
237
0
      else
238
0
  process (hb_bitwise_lt, other);
239
0
    }
240
0
    if (likely (s.successful))
241
0
      inverted = inverted || other.inverted;
242
0
  }
243
  void intersect (const hb_bit_set_invertible_t &other,
244
      hb_vector_t<unsigned> *workspace = nullptr)
245
0
  {
246
0
    if (likely (inverted == other.inverted))
247
0
    {
248
0
      if (unlikely (inverted))
249
0
  process (hb_bitwise_or, other, workspace);
250
0
      else
251
0
  process (hb_bitwise_and, other, workspace); /* Main branch. */
252
0
    }
253
0
    else
254
0
    {
255
0
      if (unlikely (inverted))
256
0
  process (hb_bitwise_lt, other, workspace);
257
0
      else
258
0
  process (hb_bitwise_gt, other, workspace);
259
0
    }
260
0
    if (likely (s.successful))
261
0
      inverted = inverted && other.inverted;
262
0
  }
263
  void subtract (const hb_bit_set_invertible_t &other)
264
0
  {
265
0
    if (likely (inverted == other.inverted))
266
0
    {
267
0
      if (unlikely (inverted))
268
0
  process (hb_bitwise_lt, other);
269
0
      else
270
0
  process (hb_bitwise_gt, other); /* Main branch. */
271
0
    }
272
0
    else
273
0
    {
274
0
      if (unlikely (inverted))
275
0
  process (hb_bitwise_or, other);
276
0
      else
277
0
  process (hb_bitwise_and, other);
278
0
    }
279
0
    if (likely (s.successful))
280
0
      inverted = inverted && !other.inverted;
281
0
  }
282
  void symmetric_difference (const hb_bit_set_invertible_t &other)
283
0
  {
284
0
    process (hb_bitwise_xor, other);
285
0
    if (likely (s.successful))
286
0
      inverted = inverted ^ other.inverted;
287
0
  }
288
289
  bool next (hb_codepoint_t *codepoint) const
290
62.8k
  {
291
62.8k
    if (likely (!inverted))
292
62.8k
      return s.next (codepoint);
293
294
0
    auto old = *codepoint;
295
0
    if (unlikely (old + 1 == INVALID))
296
0
    {
297
0
      *codepoint = INVALID;
298
0
      return false;
299
0
    }
300
301
0
    auto v = old;
302
0
    s.next (&v);
303
0
    if (old + 1 < v)
304
0
    {
305
0
      *codepoint = old + 1;
306
0
      return true;
307
0
    }
308
309
0
    v = old;
310
0
    s.next_range (&old, &v);
311
312
0
    *codepoint = v + 1;
313
0
    return *codepoint != INVALID;
314
0
  }
315
  bool next_bits (hb_codepoint_t *codepoint, uint64_t *bits) const
316
633k
  {
317
633k
    if (likely (!inverted))
318
633k
      return s.next_bits (codepoint, bits);
319
320
0
    hb_codepoint_t base;
321
0
    if (unlikely (*codepoint == INVALID))
322
0
      base = 0;
323
0
    else
324
0
    {
325
0
      base = *codepoint & -hb_bit_page_t::ELT_BITS;
326
0
      if (unlikely (base >= INVALID - hb_bit_page_t::ELT_BITS + 1))
327
0
  goto done;
328
0
      base += hb_bit_page_t::ELT_BITS;
329
0
    }
330
331
0
    while (true)
332
0
    {
333
0
      hb_codepoint_t cursor = base ? base - hb_bit_page_t::ELT_BITS : INVALID;
334
0
      uint64_t excluded = 0;
335
0
      if (!s.next_bits (&cursor, &excluded) || cursor != base)
336
0
  excluded = 0;
337
0
      *bits = ~excluded;
338
0
      bool last = unlikely (base >= INVALID - hb_bit_page_t::ELT_BITS + 1);
339
0
      if (last)
340
0
  *bits &= UINT64_MAX >> 1;
341
0
      if (*bits)
342
0
      {
343
0
  *codepoint = base;
344
0
  return true;
345
0
      }
346
0
      if (unlikely (last))
347
0
  break;
348
0
      base += hb_bit_page_t::ELT_BITS;
349
0
    }
350
351
0
  done:
352
0
    *codepoint = INVALID;
353
0
    *bits = 0;
354
0
    return false;
355
0
  }
356
  bool previous (hb_codepoint_t *codepoint) const
357
31.1k
  {
358
31.1k
    if (likely (!inverted))
359
31.1k
      return s.previous (codepoint);
360
361
0
    auto old = *codepoint;
362
0
    if (unlikely (old - 1 == INVALID))
363
0
    {
364
0
      *codepoint = INVALID;
365
0
      return false;
366
0
    }
367
368
0
    auto v = old;
369
0
    s.previous (&v);
370
371
0
    if (old - 1 > v || v == INVALID)
372
0
    {
373
0
      *codepoint = old - 1;
374
0
      return true;
375
0
    }
376
377
0
    v = old;
378
0
    s.previous_range (&v, &old);
379
380
0
    *codepoint = v - 1;
381
0
    return *codepoint != INVALID;
382
0
  }
383
  bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
384
2.20M
  {
385
2.20M
    if (likely (!inverted))
386
2.20M
      return s.next_range (first, last);
387
388
0
    if (!next (last))
389
0
    {
390
0
      *last = *first = INVALID;
391
0
      return false;
392
0
    }
393
394
0
    *first = *last;
395
0
    s.next (last);
396
0
    --*last;
397
0
    return true;
398
0
  }
399
  bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
400
0
  {
401
0
    if (likely (!inverted))
402
0
      return s.previous_range (first, last);
403
404
0
    if (!previous (first))
405
0
    {
406
0
      *last = *first = INVALID;
407
0
      return false;
408
0
    }
409
410
0
    *last = *first;
411
0
    s.previous (first);
412
0
    ++*first;
413
0
    return true;
414
0
  }
415
416
  unsigned int next_many (hb_codepoint_t  codepoint,
417
        hb_codepoint_t *out,
418
        unsigned int    size) const
419
0
  {
420
0
    return inverted ? s.next_many_inverted (codepoint, out, size)
421
0
        : s.next_many (codepoint, out, size);
422
0
  }
423
424
  static constexpr hb_codepoint_t INVALID = hb_bit_set_t::INVALID;
425
426
  /*
427
   * Iterator implementation.
428
   * Mutating the set invalidates its iterators.
429
   */
430
  struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
431
  {
432
    static constexpr bool is_sorted_iterator = true;
433
    static constexpr bool has_fast_len = true;
434
    iter_t (const hb_bit_set_invertible_t &s_ = Null (hb_bit_set_invertible_t),
435
327k
    bool init = true) : s (&s_), v (INVALID), remaining (0),
436
327k
             have_len (!init), base (INVALID), bits (0)
437
327k
    {
438
327k
      if (init)
439
218k
  advance ();
440
327k
    }
441
442
    typedef hb_codepoint_t __item_t__;
443
2.16M
    hb_codepoint_t __item__ () const { return v; }
444
31.1k
    bool __more__ () const { return v != INVALID; }
445
    void __next__ ()
446
2.16M
    {
447
2.16M
      remaining--;
448
2.16M
      advance ();
449
2.16M
    }
450
    void __prev__ ()
451
0
    {
452
0
      if (s->previous (&v))
453
0
      {
454
0
  sync ();
455
0
  remaining++;
456
0
      }
457
0
      else
458
0
      {
459
0
  base = INVALID;
460
0
  bits = 0;
461
0
      }
462
0
    }
463
    unsigned __len__ () const
464
0
    {
465
0
      if (unlikely (!have_len))
466
0
      {
467
0
  remaining += s->get_population ();
468
0
  have_len = true;
469
0
      }
470
0
      return remaining;
471
0
    }
472
109k
    iter_t end () const { return iter_t (*s, false); }
473
    bool operator != (const iter_t& o) const
474
2.27M
    { return v != o.v; }
475
476
    protected:
477
    const hb_bit_set_invertible_t *s;
478
    hb_codepoint_t v;
479
    mutable unsigned remaining;
480
    mutable bool have_len;
481
    hb_codepoint_t base;
482
    uint64_t bits;
483
484
    void advance ()
485
2.38M
    {
486
2.38M
      if (likely (bits))
487
1.75M
      {
488
1.75M
  v = base + hb_ctz (bits);
489
1.75M
  bits &= bits - 1;
490
1.75M
      }
491
633k
      else if (s->next_bits (&base, &bits))
492
482k
      {
493
482k
  v = base + hb_ctz (bits);
494
482k
  bits &= bits - 1;
495
482k
      }
496
150k
      else
497
150k
  v = INVALID;
498
2.38M
    }
499
500
    void sync ()
501
0
    {
502
0
      base = v & -hb_bit_page_t::ELT_BITS;
503
0
      hb_codepoint_t cursor = base ? base - hb_bit_page_t::ELT_BITS : INVALID;
504
0
      s->next_bits (&cursor, &bits);
505
0
      unsigned int bit = v & (hb_bit_page_t::ELT_BITS - 1);
506
0
      bits = bit == hb_bit_page_t::ELT_BITS - 1 ? 0 : bits >> (bit + 1) << (bit + 1);
507
0
    }
508
  };
509
0
  iter_t iter () const { return iter_t (*this); }
510
0
  operator iter_t () const { return iter (); }
511
};
512
513
514
#endif /* HB_BIT_SET_INVERTIBLE_HH */