Coverage Report

Created: 2026-03-31 11:00

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
206k
  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
206k
  void init () { s.init (); inverted = false; }
54
206k
  void fini () { s.fini (); }
55
0
  void err () { s.err (); }
56
216k
  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
13.1k
  {
73
13.1k
    if (likely (s.successful))
74
13.1k
      inverted = !inverted;
75
13.1k
  }
76
77
  bool is_inverted () const
78
6.57k
  {
79
6.57k
    return inverted;
80
6.57k
  }
81
82
  bool is_empty () const
83
22.9k
  {
84
22.9k
    hb_codepoint_t v = INVALID;
85
22.9k
    next (&v);
86
22.9k
    return v == INVALID;
87
22.9k
  }
88
0
  uint32_t hash () const { return s.hash () ^ (uint32_t) inverted; }
89
90
  hb_codepoint_t get_min () const
91
6.57k
  {
92
6.57k
    hb_codepoint_t v = INVALID;
93
6.57k
    next (&v);
94
6.57k
    return v;
95
6.57k
  }
96
  hb_codepoint_t get_max () const
97
6.57k
  {
98
6.57k
    hb_codepoint_t v = INVALID;
99
6.57k
    previous (&v);
100
6.57k
    return v;
101
6.57k
  }
102
  unsigned int get_population () const
103
387k
  { return inverted ? INVALID - s.get_population () : s.get_population (); }
104
105
106
16.1M
  void add (hb_codepoint_t g) { unlikely (inverted) ? s.del (g) : s.add (g); }
107
  bool add_range (hb_codepoint_t a, hb_codepoint_t b)
108
97.9k
  { return unlikely (inverted) ? ((void) s.del_range (a, b), true) : s.add_range (a, b); }
109
110
  template <typename T>
111
  void add_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
112
25.9k
  { 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
112
25.9k
  { inverted ? s.del_array (array, count, stride) : s.add_array (array, count, stride); }
113
  template <typename T>
114
  void add_array (const hb_array_t<const T>& arr) { add_array (&arr, arr.len ()); }
115
116
  /* Might return false if array looks unsorted.
117
   * Used for faster rejection of corrupt data. */
118
  template <typename T>
119
  bool add_sorted_array (const T *array, unsigned int count, unsigned int stride=sizeof(T))
120
6.24k
  { 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
120
6.24k
  { return inverted ? s.del_sorted_array (array, count, stride) : s.add_sorted_array (array, count, stride); }
121
  template <typename T>
122
  bool add_sorted_array (const hb_sorted_array_t<const T>& arr) { return add_sorted_array (&arr, arr.len ()); }
123
124
177k
  void del (hb_codepoint_t g) { unlikely (inverted) ? s.add (g) : s.del (g); }
125
  void del_range (hb_codepoint_t a, hb_codepoint_t b)
126
13.1k
  { unlikely (inverted) ? (void) s.add_range (a, b) : s.del_range (a, b); }
127
128
31.5M
  bool get (hb_codepoint_t g) const { return s.get (g) ^ inverted; }
129
0
  bool may_have (hb_codepoint_t g) const { return get (g); }
130
131
  /* Has interface. */
132
0
  bool operator [] (hb_codepoint_t k) const { return get (k); }
133
0
  bool has (hb_codepoint_t k) const { return (*this)[k]; }
134
  /* Predicate. */
135
0
  bool operator () (hb_codepoint_t k) const { return has (k); }
136
137
  /* Sink interface. */
138
  hb_bit_set_invertible_t& operator << (hb_codepoint_t v)
139
0
  { add (v); return *this; }
140
  hb_bit_set_invertible_t& operator << (const hb_codepoint_pair_t& range)
141
0
  { add_range (range.first, range.second); return *this; }
142
143
  bool may_intersect (const hb_bit_set_invertible_t &other) const
144
0
  { return inverted || other.inverted || s.intersects (other.s); }
145
146
  bool intersects (hb_codepoint_t first, hb_codepoint_t last) const
147
0
  {
148
0
    hb_codepoint_t c = first - 1;
149
0
    return next (&c) && c <= last;
150
0
  }
151
152
  void set (const hb_bit_set_invertible_t &other)
153
72.2k
  {
154
72.2k
    s.set (other.s);
155
72.2k
    if (likely (s.successful))
156
72.2k
      inverted = other.inverted;
157
72.2k
  }
158
159
  bool is_equal (const hb_bit_set_invertible_t &other) const
160
0
  {
161
0
    if (likely (inverted == other.inverted))
162
0
      return s.is_equal (other.s);
163
0
    else
164
0
    {
165
      /* TODO Add iter_ranges() and use here. */
166
0
      auto it1 = iter ();
167
0
      auto it2 = other.iter ();
168
0
      return hb_all (+ hb_zip (it1, it2)
169
0
         | hb_map ([](hb_codepoint_pair_t _) { return _.first == _.second; }));
170
0
    }
171
0
  }
172
173
  bool is_subset (const hb_bit_set_invertible_t &larger_set) const
174
0
  {
175
0
    if (unlikely (inverted != larger_set.inverted))
176
0
    {
177
0
      if (inverted)
178
0
  return hb_all (iter (), larger_set.s);
179
0
      else
180
        // larger set is inverted so larger_set.s is the set of things that are not present
181
        // in larger_set, therefore if s has any of those it can't be a subset.
182
0
  return !s.intersects (larger_set.s);
183
0
    }
184
0
    else
185
0
      return unlikely (inverted) ? larger_set.s.is_subset (s) : s.is_subset (larger_set.s);
186
0
  }
187
188
  protected:
189
  template <typename Op>
190
  void process (const Op& op, const hb_bit_set_invertible_t &other)
191
0
  { s.process (op, other.s); }
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-layout.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-aat-map.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-buffer.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_24>($_24 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-face-builder.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-font.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-map.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-color.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-face.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-font.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: VARC.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-layout.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-metrics.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-name.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-var.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_9>($_9 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_8>($_8 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_21>($_21 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-set.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-static.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff1-table.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-cff2-table.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-map.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-arabic.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-default.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hangul.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-hebrew.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-khmer.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-myanmar.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-syllabic.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-thai.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-use.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-vowel-constraints.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-fallback.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shape-normalize.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-ot-shaper-indic-table.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-input.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_21>($_21 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_23>($_23 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_33>($_33 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_20>($_20 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_30>($_30 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-layout.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-plan-var.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-layout.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-var.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-cff.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-color.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_27>($_27 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-table-other.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_26>($_26 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: gsubgpos-context.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_16>($_16 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff1.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_18>($_18 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_19>($_19 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_28>($_28 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff2.cc:void hb_bit_set_invertible_t::process<$_21>($_21 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_11>($_11 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_10>($_10 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_12>($_12 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_22>($_22 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-instancer-iup.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_14>($_14 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_13>($_13 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_15>($_15 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_25>($_25 const&, hb_bit_set_invertible_t const&)
Unexecuted instantiation: hb-subset-cff-common.cc:void hb_bit_set_invertible_t::process<$_17>($_17 const&, hb_bit_set_invertible_t const&)
192
  public:
193
  void union_ (const hb_bit_set_invertible_t &other)
194
0
  {
195
0
    if (likely (inverted == other.inverted))
196
0
    {
197
0
      if (unlikely (inverted))
198
0
  process (hb_bitwise_and, other);
199
0
      else
200
0
  process (hb_bitwise_or, other); /* Main branch. */
201
0
    }
202
0
    else
203
0
    {
204
0
      if (unlikely (inverted))
205
0
  process (hb_bitwise_gt, other);
206
0
      else
207
0
  process (hb_bitwise_lt, other);
208
0
    }
209
0
    if (likely (s.successful))
210
0
      inverted = inverted || other.inverted;
211
0
  }
212
  void intersect (const hb_bit_set_invertible_t &other)
213
0
  {
214
0
    if (likely (inverted == other.inverted))
215
0
    {
216
0
      if (unlikely (inverted))
217
0
  process (hb_bitwise_or, other);
218
0
      else
219
0
  process (hb_bitwise_and, other); /* Main branch. */
220
0
    }
221
0
    else
222
0
    {
223
0
      if (unlikely (inverted))
224
0
  process (hb_bitwise_lt, other);
225
0
      else
226
0
  process (hb_bitwise_gt, other);
227
0
    }
228
0
    if (likely (s.successful))
229
0
      inverted = inverted && other.inverted;
230
0
  }
231
  void subtract (const hb_bit_set_invertible_t &other)
232
0
  {
233
0
    if (likely (inverted == other.inverted))
234
0
    {
235
0
      if (unlikely (inverted))
236
0
  process (hb_bitwise_lt, other);
237
0
      else
238
0
  process (hb_bitwise_gt, other); /* Main branch. */
239
0
    }
240
0
    else
241
0
    {
242
0
      if (unlikely (inverted))
243
0
  process (hb_bitwise_or, other);
244
0
      else
245
0
  process (hb_bitwise_and, other);
246
0
    }
247
0
    if (likely (s.successful))
248
0
      inverted = inverted && !other.inverted;
249
0
  }
250
  void symmetric_difference (const hb_bit_set_invertible_t &other)
251
0
  {
252
0
    process (hb_bitwise_xor, other);
253
0
    if (likely (s.successful))
254
0
      inverted = inverted ^ other.inverted;
255
0
  }
256
257
  bool next (hb_codepoint_t *codepoint) const
258
1.08M
  {
259
1.08M
    if (likely (!inverted))
260
1.08M
      return s.next (codepoint);
261
262
0
    auto old = *codepoint;
263
0
    if (unlikely (old + 1 == INVALID))
264
0
    {
265
0
      *codepoint = INVALID;
266
0
      return false;
267
0
    }
268
269
0
    auto v = old;
270
0
    s.next (&v);
271
0
    if (old + 1 < v)
272
0
    {
273
0
      *codepoint = old + 1;
274
0
      return true;
275
0
    }
276
277
0
    v = old;
278
0
    s.next_range (&old, &v);
279
280
0
    *codepoint = v + 1;
281
0
    return *codepoint != INVALID;
282
0
  }
283
  bool previous (hb_codepoint_t *codepoint) const
284
6.57k
  {
285
6.57k
    if (likely (!inverted))
286
6.57k
      return s.previous (codepoint);
287
288
0
    auto old = *codepoint;
289
0
    if (unlikely (old - 1 == INVALID))
290
0
    {
291
0
      *codepoint = INVALID;
292
0
      return false;
293
0
    }
294
295
0
    auto v = old;
296
0
    s.previous (&v);
297
298
0
    if (old - 1 > v || v == INVALID)
299
0
    {
300
0
      *codepoint = old - 1;
301
0
      return true;
302
0
    }
303
304
0
    v = old;
305
0
    s.previous_range (&v, &old);
306
307
0
    *codepoint = v - 1;
308
0
    return *codepoint != INVALID;
309
0
  }
310
  bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
311
925k
  {
312
925k
    if (likely (!inverted))
313
925k
      return s.next_range (first, last);
314
315
0
    if (!next (last))
316
0
    {
317
0
      *last = *first = INVALID;
318
0
      return false;
319
0
    }
320
321
0
    *first = *last;
322
0
    s.next (last);
323
0
    --*last;
324
0
    return true;
325
0
  }
326
  bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
327
0
  {
328
0
    if (likely (!inverted))
329
0
      return s.previous_range (first, last);
330
331
0
    if (!previous (first))
332
0
    {
333
0
      *last = *first = INVALID;
334
0
      return false;
335
0
    }
336
337
0
    *last = *first;
338
0
    s.previous (first);
339
0
    ++*first;
340
0
    return true;
341
0
  }
342
343
  unsigned int next_many (hb_codepoint_t  codepoint,
344
        hb_codepoint_t *out,
345
        unsigned int    size) const
346
0
  {
347
0
    return inverted ? s.next_many_inverted (codepoint, out, size)
348
0
        : s.next_many (codepoint, out, size);
349
0
  }
350
351
  static constexpr hb_codepoint_t INVALID = hb_bit_set_t::INVALID;
352
353
  /*
354
   * Iterator implementation.
355
   */
356
  struct iter_t : hb_iter_with_fallback_t<iter_t, hb_codepoint_t>
357
  {
358
    static constexpr bool is_sorted_iterator = true;
359
    static constexpr bool has_fast_len = true;
360
    iter_t (const hb_bit_set_invertible_t &s_ = Null (hb_bit_set_invertible_t),
361
125k
      bool init = true) : s (&s_), v (INVALID), l(0)
362
125k
    {
363
125k
      if (init)
364
86.1k
      {
365
86.1k
  l = s->get_population () + 1;
366
86.1k
  __next__ ();
367
86.1k
      }
368
125k
    }
369
370
    typedef hb_codepoint_t __item_t__;
371
970k
    hb_codepoint_t __item__ () const { return v; }
372
235k
    bool __more__ () const { return v != INVALID; }
373
1.05M
    void __next__ () { s->next (&v); if (likely (l)) l--; }
374
0
    void __prev__ () { s->previous (&v); l++; }
375
0
    unsigned __len__ () const { return l; }
376
39.7k
    iter_t end () const { return iter_t (*s, false); }
377
    bool operator != (const iter_t& o) const
378
794k
    { return v != o.v; }
379
380
    protected:
381
    const hb_bit_set_invertible_t *s;
382
    hb_codepoint_t v;
383
    unsigned l;
384
  };
385
0
  iter_t iter () const { return iter_t (*this); }
386
0
  operator iter_t () const { return iter (); }
387
};
388
389
390
#endif /* HB_BIT_SET_INVERTIBLE_HH */