Coverage Report

Created: 2025-11-09 06:41

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/harfbuzz/src/hb-map.hh
Line
Count
Source
1
/*
2
 * Copyright © 2018  Google, Inc.
3
 *
4
 *  This is part of HarfBuzz, a text shaping library.
5
 *
6
 * Permission is hereby granted, without written agreement and without
7
 * license or royalty fees, to use, copy, modify, and distribute this
8
 * software and its documentation for any purpose, provided that the
9
 * above copyright notice and the following two paragraphs appear in
10
 * all copies of this software.
11
 *
12
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16
 * DAMAGE.
17
 *
18
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23
 *
24
 * Google Author(s): Behdad Esfahbod
25
 */
26
27
#ifndef HB_MAP_HH
28
#define HB_MAP_HH
29
30
#include "hb.hh"
31
32
#include "hb-set.hh"
33
34
35
/*
36
 * hb_hashmap_t
37
 */
38
39
extern HB_INTERNAL const hb_codepoint_t minus_1;
40
41
template <typename K, typename V,
42
    bool minus_one = false>
43
struct hb_hashmap_t
44
{
45
  static constexpr bool realloc_move = true;
46
47
6.76M
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
132k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, unsigned int, true>::hb_hashmap_t()
Line
Count
Source
47
1.51M
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb_set_t, false>::hb_hashmap_t()
Line
Count
Source
47
57.6k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::hb_hashmap_t()
Line
Count
Source
47
173k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
677k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::hb_hashmap_t()
Line
Count
Source
47
38.6k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::hb_hashmap_t()
Line
Count
Source
47
4.60k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, Triple, false>::hb_hashmap_t()
Line
Count
Source
47
3.35M
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::hb_hashmap_t()
Line
Count
Source
47
102k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::hb_hashmap_t()
Line
Count
Source
47
185
  hb_hashmap_t ()  { init (); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::hb_hashmap_t()
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::hb_hashmap_t()
Line
Count
Source
47
49.2k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::hb_hashmap_t()
Line
Count
Source
47
98.5k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, OT::Feature const*, false>::hb_hashmap_t()
Line
Count
Source
47
98.5k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::hb_hashmap_t()
Line
Count
Source
47
98.5k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::hb_hashmap_t()
Line
Count
Source
47
246k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, TripleDistances, false>::hb_hashmap_t()
Line
Count
Source
47
49.2k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::hb_hashmap_t()
Line
Count
Source
47
49.2k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
2.64k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
692
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::hb_hashmap_t()
Line
Count
Source
47
8.93k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
8.93k
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::hb_hashmap_t()
Line
Count
Source
47
124
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
248
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
306
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::hb_hashmap_t()
Line
Count
Source
47
183
  hb_hashmap_t ()  { init (); }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::hb_hashmap_t()
Line
Count
Source
47
1.26k
  hb_hashmap_t ()  { init (); }
48
6.76M
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
132k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, unsigned int, true>::~hb_hashmap_t()
Line
Count
Source
48
1.51M
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb_set_t, false>::~hb_hashmap_t()
Line
Count
Source
48
57.6k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::~hb_hashmap_t()
Line
Count
Source
48
173k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
677k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::~hb_hashmap_t()
Line
Count
Source
48
38.6k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::~hb_hashmap_t()
Line
Count
Source
48
4.60k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::~hb_hashmap_t()
Line
Count
Source
48
102k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, Triple, false>::~hb_hashmap_t()
Line
Count
Source
48
3.35M
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::~hb_hashmap_t()
Line
Count
Source
48
185
  ~hb_hashmap_t () { fini (); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::~hb_hashmap_t()
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::~hb_hashmap_t()
Line
Count
Source
48
49.2k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::~hb_hashmap_t()
Line
Count
Source
48
98.5k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, OT::Feature const*, false>::~hb_hashmap_t()
Line
Count
Source
48
98.5k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::~hb_hashmap_t()
Line
Count
Source
48
98.5k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::~hb_hashmap_t()
Line
Count
Source
48
246k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, TripleDistances, false>::~hb_hashmap_t()
Line
Count
Source
48
49.2k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::~hb_hashmap_t()
Line
Count
Source
48
49.2k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
2.64k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
8.93k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::~hb_hashmap_t()
Line
Count
Source
48
8.93k
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
692
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
248
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::~hb_hashmap_t()
Line
Count
Source
48
124
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::~hb_hashmap_t()
Line
Count
Source
48
183
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
306
  ~hb_hashmap_t () { fini (); }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::~hb_hashmap_t()
Line
Count
Source
48
1.26k
  ~hb_hashmap_t () { fini (); }
49
50
  void _copy (const hb_hashmap_t& o)
51
55.2k
  {
52
55.2k
    if (unlikely (!o.mask)) return;
53
54
5.65k
    if (hb_is_trivially_copy_assignable (item_t))
55
5.65k
    {
56
5.65k
      items = (item_t *) hb_malloc (sizeof (item_t) * (o.mask + 1));
57
5.65k
      if (unlikely (!items))
58
2
      {
59
2
  successful = false;
60
2
  return;
61
2
      }
62
5.65k
      population = o.population;
63
5.65k
      occupancy = o.occupancy;
64
5.65k
      mask = o.mask;
65
5.65k
      prime = o.prime;
66
5.65k
      max_chain_length = o.max_chain_length;
67
5.65k
      memcpy (items, o.items, sizeof (item_t) * (mask + 1));
68
5.65k
      return;
69
5.65k
    }
70
71
0
    alloc (o.population); hb_copy (o, *this);
72
0
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::_copy(hb_hashmap_t<unsigned int, unsigned int, true> const&)
Unexecuted instantiation: hb_hashmap_t<unsigned int, Triple, false>::_copy(hb_hashmap_t<unsigned int, Triple, false> const&)
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::_copy(hb_hashmap_t<unsigned int, unsigned int, true> const&)
hb_hashmap_t<unsigned int, Triple, false>::_copy(hb_hashmap_t<unsigned int, Triple, false> const&)
Line
Count
Source
51
55.2k
  {
52
55.2k
    if (unlikely (!o.mask)) return;
53
54
5.65k
    if (hb_is_trivially_copy_assignable (item_t))
55
5.65k
    {
56
5.65k
      items = (item_t *) hb_malloc (sizeof (item_t) * (o.mask + 1));
57
5.65k
      if (unlikely (!items))
58
2
      {
59
2
  successful = false;
60
2
  return;
61
2
      }
62
5.65k
      population = o.population;
63
5.65k
      occupancy = o.occupancy;
64
5.65k
      mask = o.mask;
65
5.65k
      prime = o.prime;
66
5.65k
      max_chain_length = o.max_chain_length;
67
5.65k
      memcpy (items, o.items, sizeof (item_t) * (mask + 1));
68
5.65k
      return;
69
5.65k
    }
70
71
0
    alloc (o.population); hb_copy (o, *this);
72
0
  }
73
74
0
  hb_hashmap_t (const hb_hashmap_t& o) : hb_hashmap_t () { _copy (o); }
75
  hb_hashmap_t& operator= (const hb_hashmap_t& o)
76
55.2k
  {
77
55.2k
    reset ();
78
55.2k
    if (!items) { _copy (o); return *this; }
79
0
    alloc (o.population); hb_copy (o, *this); return *this;
80
55.2k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::operator=(hb_hashmap_t<unsigned int, unsigned int, true> const&)
hb_hashmap_t<unsigned int, Triple, false>::operator=(hb_hashmap_t<unsigned int, Triple, false> const&)
Line
Count
Source
76
55.2k
  {
77
55.2k
    reset ();
78
55.2k
    if (!items) { _copy (o); return *this; }
79
0
    alloc (o.population); hb_copy (o, *this); return *this;
80
55.2k
  }
81
82
1.59M
  hb_hashmap_t (hb_hashmap_t&& o)  noexcept : hb_hashmap_t () { hb_swap (*this, o); }
hb_hashmap_t<unsigned int, Triple, false>::hb_hashmap_t(hb_hashmap_t<unsigned int, Triple, false>&&)
Line
Count
Source
82
1.58M
  hb_hashmap_t (hb_hashmap_t&& o)  noexcept : hb_hashmap_t () { hb_swap (*this, o); }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::hb_hashmap_t(hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>&&)
Line
Count
Source
82
4.42k
  hb_hashmap_t (hb_hashmap_t&& o)  noexcept : hb_hashmap_t () { hb_swap (*this, o); }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::hb_hashmap_t(hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>&&)
Line
Count
Source
82
4.42k
  hb_hashmap_t (hb_hashmap_t&& o)  noexcept : hb_hashmap_t () { hb_swap (*this, o); }
83
280k
  hb_hashmap_t& operator= (hb_hashmap_t&& o)   noexcept { hb_swap (*this, o); return *this; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::operator=(hb_hashmap_t<unsigned int, unsigned int, true>&&)
Unexecuted instantiation: hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::operator=(hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>&&)
Unexecuted instantiation: hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::operator=(hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>&&)
hb_hashmap_t<unsigned int, unsigned int, false>::operator=(hb_hashmap_t<unsigned int, unsigned int, false>&&)
Line
Count
Source
83
280k
  hb_hashmap_t& operator= (hb_hashmap_t&& o)   noexcept { hb_swap (*this, o); return *this; }
hb_hashmap_t<unsigned int, Triple, false>::operator=(hb_hashmap_t<unsigned int, Triple, false>&&)
Line
Count
Source
83
62
  hb_hashmap_t& operator= (hb_hashmap_t&& o)   noexcept { hb_swap (*this, o); return *this; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::operator=(hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>&&)
Line
Count
Source
83
536
  hb_hashmap_t& operator= (hb_hashmap_t&& o)   noexcept { hb_swap (*this, o); return *this; }
84
85
  hb_hashmap_t (std::initializer_list<hb_pair_t<K, V>> lst) : hb_hashmap_t ()
86
  {
87
    for (auto&& item : lst)
88
      set (item.first, item.second);
89
  }
90
  template <typename Iterable,
91
      hb_requires (hb_is_iterable (Iterable))>
92
1.29k
  hb_hashmap_t (const Iterable &o) : hb_hashmap_t ()
93
1.29k
  {
94
1.29k
    auto iter = hb_iter (o);
95
1.29k
    if (iter.is_random_access_iterator || iter.has_fast_len)
96
1.29k
      alloc (hb_len (iter));
97
1.29k
    hb_copy (iter, *this);
98
1.29k
  }
99
100
  struct item_t
101
  {
102
    K key;
103
    uint32_t is_real_ : 1;
104
    uint32_t is_used_ : 1;
105
    uint32_t hash : 30;
106
    V value;
107
108
7.48M
    item_t () : key (),
109
27.6M
    is_real_ (false), is_used_ (false),
110
27.6M
    hash (0),
111
27.6M
    value () {}
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::item_t()
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::item_t()
Line
Count
Source
108
7.48M
    item_t () : key (),
109
7.48M
    is_real_ (false), is_used_ (false),
110
7.48M
    hash (0),
111
7.48M
    value () {}
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::item_t()
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::item_t()
Line
Count
Source
109
10.5k
    is_real_ (false), is_used_ (false),
110
10.5k
    hash (0),
111
10.5k
    value () {}
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::item_t()
Line
Count
Source
109
9.53M
    is_real_ (false), is_used_ (false),
110
9.53M
    hash (0),
111
9.53M
    value () {}
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::item_t()
Line
Count
Source
109
126k
    is_real_ (false), is_used_ (false),
110
126k
    hash (0),
111
126k
    value () {}
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::item_t()
Line
Count
Source
109
581k
    is_real_ (false), is_used_ (false),
110
581k
    hash (0),
111
581k
    value () {}
hb_hashmap_t<unsigned int, Triple, false>::item_t::item_t()
Line
Count
Source
109
8.11M
    is_real_ (false), is_used_ (false),
110
8.11M
    hash (0),
111
8.11M
    value () {}
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::item_t()
Line
Count
Source
109
1.00M
    is_real_ (false), is_used_ (false),
110
1.00M
    hash (0),
111
1.00M
    value () {}
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::item_t()
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::item_t()
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::item_t()
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::item_t()
Line
Count
Source
109
694k
    is_real_ (false), is_used_ (false),
110
694k
    hash (0),
111
694k
    value () {}
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::item_t()
Line
Count
Source
109
10.6k
    is_real_ (false), is_used_ (false),
110
10.6k
    hash (0),
111
10.6k
    value () {}
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::item_t()
Line
Count
Source
109
63.7k
    is_real_ (false), is_used_ (false),
110
63.7k
    hash (0),
111
63.7k
    value () {}
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::item_t()
Line
Count
Source
109
4.05k
    is_real_ (false), is_used_ (false),
110
4.05k
    hash (0),
111
4.05k
    value () {}
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::item_t()
Line
Count
Source
109
344
    is_real_ (false), is_used_ (false),
110
344
    hash (0),
111
344
    value () {}
112
113
    // Needed for https://github.com/harfbuzz/harfbuzz/issues/4138
114
2.82M
    K& get_key () { return key; }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::get_key()
Line
Count
Source
114
1.25M
    K& get_key () { return key; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::get_key()
Line
Count
Source
114
376
    K& get_key () { return key; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::get_key()
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::get_key()
Line
Count
Source
114
6.92k
    K& get_key () { return key; }
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::get_key()
Line
Count
Source
114
1.55M
    K& get_key () { return key; }
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::get_key()
Line
Count
Source
114
83
    K& get_key () { return key; }
hb_hashmap_t<unsigned int, Triple, false>::item_t::get_key()
Line
Count
Source
114
184
    K& get_key () { return key; }
115
223k
    V& get_value () { return value; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::get_value()
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::get_value()
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::item_t::get_value()
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::get_value()
Line
Count
Source
115
222k
    V& get_value () { return value; }
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::get_value()
Line
Count
Source
115
83
    V& get_value () { return value; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, false>::item_t::get_value()
Unexecuted instantiation: hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::get_value()
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::get_value()
Line
Count
Source
115
113
    V& get_value () { return value; }
116
117
4.00G
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::is_used() const
Line
Count
Source
117
3.71G
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
17.8M
    bool is_used () const { return is_used_; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::is_used() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::item_t::is_used() const
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::is_used() const
Line
Count
Source
117
61.3M
    bool is_used () const { return is_used_; }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::is_used() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::is_used() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::is_used() const
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::is_used() const
Line
Count
Source
117
163k
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::is_used() const
Line
Count
Source
117
865k
    bool is_used () const { return is_used_; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::is_used() const
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
17.8M
    bool is_used () const { return is_used_; }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::item_t::is_used() const
Line
Count
Source
117
173M
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::is_used() const
Line
Count
Source
117
31.6k
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, Triple, false>::item_t::is_used() const
Line
Count
Source
117
2.14M
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::is_used() const
Line
Count
Source
117
3.94k
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::is_used() const
Line
Count
Source
117
2.96M
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
86
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
2.75M
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::is_used() const
Line
Count
Source
117
110k
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
206k
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
28.0k
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::is_used() const
Line
Count
Source
117
2.65M
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::is_used() const
Line
Count
Source
117
4.39k
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::is_used() const
Line
Count
Source
117
172
    bool is_used () const { return is_used_; }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::item_t::is_used() const
Line
Count
Source
117
127
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::is_used() const
Line
Count
Source
117
80.6k
    bool is_used () const { return is_used_; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::is_used() const
Line
Count
Source
117
6.50k
    bool is_used () const { return is_used_; }
118
357M
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::set_used(bool)
Line
Count
Source
118
323M
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
2.51M
    void set_used (bool is_used) { is_used_ = is_used; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::set_used(bool)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::set_used(bool)
Line
Count
Source
118
5.04M
    void set_used (bool is_used) { is_used_ = is_used; }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::set_used(bool)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::set_used(bool)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::item_t::set_used(bool)
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::set_used(bool)
Line
Count
Source
118
29.6k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::set_used(bool)
Line
Count
Source
118
258k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
755k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::item_t::set_used(bool)
Line
Count
Source
118
23.6M
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::set_used(bool)
Line
Count
Source
118
8.51k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, Triple, false>::item_t::set_used(bool)
Line
Count
Source
118
1.01M
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
24.2k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::set_used(bool)
Line
Count
Source
118
50.7k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
54.4k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::set_used(bool)
Line
Count
Source
118
483k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
12.8k
    void set_used (bool is_used) { is_used_ = is_used; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::set_used(bool)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::set_used(bool)
Line
Count
Source
118
500k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::set_used(bool)
Line
Count
Source
118
939
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
43
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::set_used(bool)
Line
Count
Source
118
43
    void set_used (bool is_used) { is_used_ = is_used; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::set_used(bool)
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::set_used(bool)
Line
Count
Source
118
1.78k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::set_used(bool)
Line
Count
Source
118
34.4k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::set_used(bool)
Line
Count
Source
118
1.77k
    void set_used (bool is_used) { is_used_ = is_used; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::set_used(bool)
Line
Count
Source
118
43
    void set_used (bool is_used) { is_used_ = is_used; }
119
358M
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::set_real(bool)
Line
Count
Source
119
323M
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
2.66M
    void set_real (bool is_real) { is_real_ = is_real; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::set_real(bool)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::set_real(bool)
Line
Count
Source
119
5.04M
    void set_real (bool is_real) { is_real_ = is_real; }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::set_real(bool)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::set_real(bool)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::item_t::set_real(bool)
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::set_real(bool)
Line
Count
Source
119
29.6k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::set_real(bool)
Line
Count
Source
119
258k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
1.01M
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::item_t::set_real(bool)
Line
Count
Source
119
23.6M
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::set_real(bool)
Line
Count
Source
119
8.51k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, Triple, false>::item_t::set_real(bool)
Line
Count
Source
119
1.01M
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
26.9k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::set_real(bool)
Line
Count
Source
119
50.7k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
54.4k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::set_real(bool)
Line
Count
Source
119
483k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
12.8k
    void set_real (bool is_real) { is_real_ = is_real; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::set_real(bool)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::set_real(bool)
Line
Count
Source
119
500k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::set_real(bool)
Line
Count
Source
119
939
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
43
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::set_real(bool)
Line
Count
Source
119
43
    void set_real (bool is_real) { is_real_ = is_real; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::set_real(bool)
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::set_real(bool)
Line
Count
Source
119
1.78k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::set_real(bool)
Line
Count
Source
119
34.4k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::set_real(bool)
Line
Count
Source
119
1.77k
    void set_real (bool is_real) { is_real_ = is_real; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::set_real(bool)
Line
Count
Source
119
43
    void set_real (bool is_real) { is_real_ = is_real; }
120
2.16G
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::is_real() const
Line
Count
Source
120
1.99G
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
10.2M
    bool is_real () const { return is_real_; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::is_real() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::is_real() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::item_t::is_real() const
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::is_real() const
Line
Count
Source
120
38.4M
    bool is_real () const { return is_real_; }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::is_real() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::is_real() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::is_real() const
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::is_real() const
Line
Count
Source
120
91.2k
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::is_real() const
Line
Count
Source
120
1.07M
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
24.5M
    bool is_real () const { return is_real_; }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::item_t::is_real() const
Line
Count
Source
120
84.9M
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::is_real() const
Line
Count
Source
120
49.2k
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, Triple, false>::item_t::is_real() const
Line
Count
Source
120
8.47M
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::is_real() const
Line
Count
Source
120
744
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::is_real() const
Line
Count
Source
120
955k
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
344
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
52.5k
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::is_real() const
Line
Count
Source
120
99.7k
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
109k
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
11.6k
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::is_real() const
Line
Count
Source
120
1.07M
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::is_real() const
Line
Count
Source
120
1.45k
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::is_real() const
Line
Count
Source
120
184
    bool is_real () const { return is_real_; }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::item_t::is_real() const
Line
Count
Source
120
41
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::is_real() const
Line
Count
Source
120
38.9k
    bool is_real () const { return is_real_; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::is_real() const
Line
Count
Source
120
3.55k
    bool is_real () const { return is_real_; }
121
122
    template <bool v = minus_one,
123
        hb_enable_if (v == false)>
124
1.48M
    static inline const V& default_value () { return Null(V); };
_ZN12hb_hashmap_tIPKN22hb_serialize_context_t8object_tEjLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKjv
Line
Count
Source
124
1.22M
    static inline const V& default_value () { return Null(V); };
_ZN12hb_hashmap_tIjN2hb10unique_ptrI8hb_set_tEELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Line
Count
Source
124
5.49k
    static inline const V& default_value () { return Null(V); };
Unexecuted instantiation: _ZN12hb_hashmap_tIjN2hb10shared_ptrI8hb_set_tEELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj15TripleDistancesLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj6TripleLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
_ZN12hb_hashmap_tIj17face_table_info_tLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
Line
Count
Source
124
158k
    static inline const V& default_value () { return Null(V); };
Unexecuted instantiation: _ZN12hb_hashmap_tI23hb_ot_name_record_ids_t10hb_array_tIKcELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Unexecuted instantiation: _ZN12hb_hashmap_tIjPN5graph6LookupELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS2_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj8hb_set_tLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
_ZN12hb_hashmap_tIjjLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKjv
Line
Count
Source
124
87
    static inline const V& default_value () { return Null(V); };
Unexecuted instantiation: _ZN12hb_hashmap_tIjN2hb10shared_ptrI8hb_set_tEELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj15TripleDistancesLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj6TripleLb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS0_v
Unexecuted instantiation: _ZN12hb_hashmap_tI23hb_ot_name_record_ids_t10hb_array_tIKcELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Unexecuted instantiation: _ZN12hb_hashmap_tIjN2hb10unique_ptrI9hb_blob_tEELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS3_v
Unexecuted instantiation: _ZN12hb_hashmap_tIj10hb_array_tIKcELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS2_v
_ZN12hb_hashmap_tIj9hb_pair_tIjiELb0EE6item_t13default_valueILb0ETnPN12hb_enable_ifIXeqT_Lb0EEvE4typeELPv0EEERKS1_v
Line
Count
Source
124
95.2k
    static inline const V& default_value () { return Null(V); };
125
    template <bool v = minus_one,
126
        hb_enable_if (v == true)>
127
    static inline const V& default_value ()
128
43.1M
    {
129
43.1M
      static_assert (hb_is_same (V, hb_codepoint_t), "");
130
43.1M
      return minus_1;
131
43.1M
    };
_ZN12hb_hashmap_tIjjLb1EE6item_t13default_valueILb1ETnPN12hb_enable_ifIXeqT_Lb1EEvE4typeELPv0EEERKjv
Line
Count
Source
128
43.1M
    {
129
43.1M
      static_assert (hb_is_same (V, hb_codepoint_t), "");
130
43.1M
      return minus_1;
131
43.1M
    };
_ZN12hb_hashmap_tI10hb_array_tIKcEjLb1EE6item_t13default_valueILb1ETnPN12hb_enable_ifIXeqT_Lb1EEvE4typeELPv0EEERKjv
Line
Count
Source
128
939
    {
129
939
      static_assert (hb_is_same (V, hb_codepoint_t), "");
130
939
      return minus_1;
131
939
    };
132
133
3.11G
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
2.98G
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::item_t::operator==(hb_serialize_context_t::object_t const* const&) const
Line
Count
Source
133
6.82M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::item_t::operator==(unsigned int const&) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::item_t::operator==(unsigned int const&) const
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
49.2M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::item_t::operator==(hb::shared_ptr<hb_map_t> const&) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::item_t::operator==(unsigned int const&) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::item_t::operator==(unsigned int const&) const
Unexecuted instantiation: hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::operator==(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&) const
hb_hashmap_t<unsigned int, hb_set_t, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
91.0k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
200k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::operator==(hb_ot_name_record_ids_t const&) const
hb_hashmap_t<unsigned int, unsigned int, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
16.0M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::item_t::operator==(graph::overflow_record_t* const&) const
Line
Count
Source
133
53.2M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
15.8k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, Triple, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
76.7k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, TripleDistances, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
744
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
1.38M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::item_t::operator==(hb_hashmap_t<unsigned int, Triple, false> const* const&) const
Line
Count
Source
133
19.0k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
9.38k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::item_t::operator==(hb_vector_t<int, false> const* const&) const
Line
Count
Source
133
30.7k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::item_t::operator==(hb_ot_name_record_ids_t const&) const
Line
Count
Source
133
32
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
1.39M
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::item_t::operator==(hb_array_t<char const> const&) const
Line
Count
Source
133
1.37k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::operator==(hb_vector_t<bool, false> const* const&) const
Line
Count
Source
133
86
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::item_t::operator==(hb_vector_t<bool, false> const* const&) const
Line
Count
Source
133
41
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
11.7k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::item_t::operator==(unsigned int const&) const
Line
Count
Source
133
2.94k
    bool operator == (const K &o) const { return hb_deref (key) == hb_deref (o); }
134
    bool operator == (const item_t &o) const { return *this == o.key; }
135
542k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
hb_hashmap_t<unsigned int, unsigned int, true>::item_t::get_pair() const
Line
Count
Source
135
420k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
hb_hashmap_t<unsigned int, face_table_info_t, false>::item_t::get_pair() const
Line
Count
Source
135
64.6k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, false>::item_t::get_pair() const
hb_hashmap_t<unsigned int, Triple, false>::item_t::get_pair() const
Line
Count
Source
135
20.3k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::item_t::get_pair() const
Line
Count
Source
135
21.1k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::get_pair() const
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::item_t::get_pair() const
Line
Count
Source
135
43
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::get_pair() const
Line
Count
Source
135
16.7k
    hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
136
43
    hb_pair_t<const K &, V &> get_pair_ref() { return hb_pair_t<const K &, V &> (key, value); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::item_t::get_pair_ref()
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::item_t::get_pair_ref()
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::item_t::get_pair_ref()
Line
Count
Source
136
43
    hb_pair_t<const K &, V &> get_pair_ref() { return hb_pair_t<const K &, V &> (key, value); }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::item_t::get_pair_ref()
137
138
    uint32_t total_hash () const
139
1.03M
    { return (hash * 31u) + hb_hash (value); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::item_t::total_hash() const
hb_hashmap_t<unsigned int, Triple, false>::item_t::total_hash() const
Line
Count
Source
139
1.03M
    { return (hash * 31u) + hb_hash (value); }
140
141
    static constexpr bool is_trivially_constructible = (hb_is_trivially_constructible(K) && hb_is_trivially_constructible(V));
142
  };
143
144
  hb_object_header_t header;
145
  bool successful; /* Allocations successful */
146
  unsigned short max_chain_length;
147
  unsigned int population; /* Not including tombstones. */
148
  unsigned int occupancy; /* Including tombstones. */
149
  unsigned int mask;
150
  unsigned int prime;
151
  item_t *items;
152
153
  friend void swap (hb_hashmap_t& a, hb_hashmap_t& b) noexcept
154
1.89M
  {
155
1.89M
    if (unlikely (!a.successful || !b.successful))
156
4
      return;
157
1.89M
    hb_swap (a.max_chain_length, b.max_chain_length);
158
1.89M
    hb_swap (a.population, b.population);
159
1.89M
    hb_swap (a.occupancy, b.occupancy);
160
1.89M
    hb_swap (a.mask, b.mask);
161
1.89M
    hb_swap (a.prime, b.prime);
162
1.89M
    hb_swap (a.items, b.items);
163
1.89M
  }
Unexecuted instantiation: swap(hb_hashmap_t<unsigned int, unsigned int, true>&, hb_hashmap_t<unsigned int, unsigned int, true>&)
swap(hb_hashmap_t<unsigned int, unsigned int, false>&, hb_hashmap_t<unsigned int, unsigned int, false>&)
Line
Count
Source
154
280k
  {
155
280k
    if (unlikely (!a.successful || !b.successful))
156
0
      return;
157
280k
    hb_swap (a.max_chain_length, b.max_chain_length);
158
280k
    hb_swap (a.population, b.population);
159
280k
    hb_swap (a.occupancy, b.occupancy);
160
280k
    hb_swap (a.mask, b.mask);
161
280k
    hb_swap (a.prime, b.prime);
162
280k
    hb_swap (a.items, b.items);
163
280k
  }
Unexecuted instantiation: swap(hb_hashmap_t<unsigned int, unsigned int, true>&, hb_hashmap_t<unsigned int, unsigned int, true>&)
swap(hb_hashmap_t<unsigned int, Triple, false>&, hb_hashmap_t<unsigned int, Triple, false>&)
Line
Count
Source
154
1.60M
  {
155
1.60M
    if (unlikely (!a.successful || !b.successful))
156
0
      return;
157
1.60M
    hb_swap (a.max_chain_length, b.max_chain_length);
158
1.60M
    hb_swap (a.population, b.population);
159
1.60M
    hb_swap (a.occupancy, b.occupancy);
160
1.60M
    hb_swap (a.mask, b.mask);
161
1.60M
    hb_swap (a.prime, b.prime);
162
1.60M
    hb_swap (a.items, b.items);
163
1.60M
  }
swap(hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>&, hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>&)
Line
Count
Source
154
4.42k
  {
155
4.42k
    if (unlikely (!a.successful || !b.successful))
156
0
      return;
157
4.42k
    hb_swap (a.max_chain_length, b.max_chain_length);
158
4.42k
    hb_swap (a.population, b.population);
159
4.42k
    hb_swap (a.occupancy, b.occupancy);
160
4.42k
    hb_swap (a.mask, b.mask);
161
4.42k
    hb_swap (a.prime, b.prime);
162
4.42k
    hb_swap (a.items, b.items);
163
4.42k
  }
swap(hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>&, hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>&)
Line
Count
Source
154
4.42k
  {
155
4.42k
    if (unlikely (!a.successful || !b.successful))
156
0
      return;
157
4.42k
    hb_swap (a.max_chain_length, b.max_chain_length);
158
4.42k
    hb_swap (a.population, b.population);
159
4.42k
    hb_swap (a.occupancy, b.occupancy);
160
4.42k
    hb_swap (a.mask, b.mask);
161
4.42k
    hb_swap (a.prime, b.prime);
162
4.42k
    hb_swap (a.items, b.items);
163
4.42k
  }
swap(hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>&, hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>&)
Line
Count
Source
154
536
  {
155
536
    if (unlikely (!a.successful || !b.successful))
156
4
      return;
157
532
    hb_swap (a.max_chain_length, b.max_chain_length);
158
532
    hb_swap (a.population, b.population);
159
532
    hb_swap (a.occupancy, b.occupancy);
160
532
    hb_swap (a.mask, b.mask);
161
532
    hb_swap (a.prime, b.prime);
162
532
    hb_swap (a.items, b.items);
163
532
  }
164
  void init ()
165
6.95M
  {
166
6.95M
    hb_object_init (this);
167
168
6.95M
    successful = true;
169
6.95M
    max_chain_length = 0;
170
6.95M
    population = occupancy = 0;
171
6.95M
    mask = 0;
172
6.95M
    prime = 0;
173
6.95M
    items = nullptr;
174
6.95M
  }
hb_hashmap_t<unsigned int, unsigned int, true>::init()
Line
Count
Source
165
1.51M
  {
166
1.51M
    hb_object_init (this);
167
168
1.51M
    successful = true;
169
1.51M
    max_chain_length = 0;
170
1.51M
    population = occupancy = 0;
171
1.51M
    mask = 0;
172
1.51M
    prime = 0;
173
1.51M
    items = nullptr;
174
1.51M
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::init()
Line
Count
Source
165
278k
  {
166
278k
    hb_object_init (this);
167
168
278k
    successful = true;
169
278k
    max_chain_length = 0;
170
278k
    population = occupancy = 0;
171
278k
    mask = 0;
172
278k
    prime = 0;
173
278k
    items = nullptr;
174
278k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::init()
hb_hashmap_t<unsigned int, hb_set_t, false>::init()
Line
Count
Source
165
57.6k
  {
166
57.6k
    hb_object_init (this);
167
168
57.6k
    successful = true;
169
57.6k
    max_chain_length = 0;
170
57.6k
    population = occupancy = 0;
171
57.6k
    mask = 0;
172
57.6k
    prime = 0;
173
57.6k
    items = nullptr;
174
57.6k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::init()
Line
Count
Source
165
173k
  {
166
173k
    hb_object_init (this);
167
168
173k
    successful = true;
169
173k
    max_chain_length = 0;
170
173k
    population = occupancy = 0;
171
173k
    mask = 0;
172
173k
    prime = 0;
173
173k
    items = nullptr;
174
173k
  }
hb_hashmap_t<unsigned int, face_table_info_t, false>::init()
Line
Count
Source
165
49.0k
  {
166
49.0k
    hb_object_init (this);
167
168
49.0k
    successful = true;
169
49.0k
    max_chain_length = 0;
170
49.0k
    population = occupancy = 0;
171
49.0k
    mask = 0;
172
49.0k
    prime = 0;
173
49.0k
    items = nullptr;
174
49.0k
  }
hb_hashmap_t<unsigned int, unsigned int, false>::init()
Line
Count
Source
165
677k
  {
166
677k
    hb_object_init (this);
167
168
677k
    successful = true;
169
677k
    max_chain_length = 0;
170
677k
    population = occupancy = 0;
171
677k
    mask = 0;
172
677k
    prime = 0;
173
677k
    items = nullptr;
174
677k
  }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::init()
Line
Count
Source
165
38.6k
  {
166
38.6k
    hb_object_init (this);
167
168
38.6k
    successful = true;
169
38.6k
    max_chain_length = 0;
170
38.6k
    population = occupancy = 0;
171
38.6k
    mask = 0;
172
38.6k
    prime = 0;
173
38.6k
    items = nullptr;
174
38.6k
  }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::init()
Line
Count
Source
165
4.60k
  {
166
4.60k
    hb_object_init (this);
167
168
4.60k
    successful = true;
169
4.60k
    max_chain_length = 0;
170
4.60k
    population = occupancy = 0;
171
4.60k
    mask = 0;
172
4.60k
    prime = 0;
173
4.60k
    items = nullptr;
174
4.60k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::init()
Line
Count
Source
165
49.2k
  {
166
49.2k
    hb_object_init (this);
167
168
49.2k
    successful = true;
169
49.2k
    max_chain_length = 0;
170
49.2k
    population = occupancy = 0;
171
49.2k
    mask = 0;
172
49.2k
    prime = 0;
173
49.2k
    items = nullptr;
174
49.2k
  }
hb_hashmap_t<unsigned int, Triple, false>::init()
Line
Count
Source
165
3.35M
  {
166
3.35M
    hb_object_init (this);
167
168
3.35M
    successful = true;
169
3.35M
    max_chain_length = 0;
170
3.35M
    population = occupancy = 0;
171
3.35M
    mask = 0;
172
3.35M
    prime = 0;
173
3.35M
    items = nullptr;
174
3.35M
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::init()
Line
Count
Source
165
8.93k
  {
166
8.93k
    hb_object_init (this);
167
168
8.93k
    successful = true;
169
8.93k
    max_chain_length = 0;
170
8.93k
    population = occupancy = 0;
171
8.93k
    mask = 0;
172
8.93k
    prime = 0;
173
8.93k
    items = nullptr;
174
8.93k
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::init()
Line
Count
Source
165
8.93k
  {
166
8.93k
    hb_object_init (this);
167
168
8.93k
    successful = true;
169
8.93k
    max_chain_length = 0;
170
8.93k
    population = occupancy = 0;
171
8.93k
    mask = 0;
172
8.93k
    prime = 0;
173
8.93k
    items = nullptr;
174
8.93k
  }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::init()
Line
Count
Source
165
692
  {
166
692
    hb_object_init (this);
167
168
692
    successful = true;
169
692
    max_chain_length = 0;
170
692
    population = occupancy = 0;
171
692
    mask = 0;
172
692
    prime = 0;
173
692
    items = nullptr;
174
692
  }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::init()
Line
Count
Source
165
124
  {
166
124
    hb_object_init (this);
167
168
124
    successful = true;
169
124
    max_chain_length = 0;
170
124
    population = occupancy = 0;
171
124
    mask = 0;
172
124
    prime = 0;
173
124
    items = nullptr;
174
124
  }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::init()
Line
Count
Source
165
248
  {
166
248
    hb_object_init (this);
167
168
248
    successful = true;
169
248
    max_chain_length = 0;
170
248
    population = occupancy = 0;
171
248
    mask = 0;
172
248
    prime = 0;
173
248
    items = nullptr;
174
248
  }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::init()
Line
Count
Source
165
1.26k
  {
166
1.26k
    hb_object_init (this);
167
168
1.26k
    successful = true;
169
1.26k
    max_chain_length = 0;
170
1.26k
    population = occupancy = 0;
171
1.26k
    mask = 0;
172
1.26k
    prime = 0;
173
1.26k
    items = nullptr;
174
1.26k
  }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::init()
Line
Count
Source
165
102k
  {
166
102k
    hb_object_init (this);
167
168
102k
    successful = true;
169
102k
    max_chain_length = 0;
170
102k
    population = occupancy = 0;
171
102k
    mask = 0;
172
102k
    prime = 0;
173
102k
    items = nullptr;
174
102k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::init()
Line
Count
Source
165
185
  {
166
185
    hb_object_init (this);
167
168
185
    successful = true;
169
185
    max_chain_length = 0;
170
185
    population = occupancy = 0;
171
185
    mask = 0;
172
185
    prime = 0;
173
185
    items = nullptr;
174
185
  }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::init()
Line
Count
Source
165
98.5k
  {
166
98.5k
    hb_object_init (this);
167
168
98.5k
    successful = true;
169
98.5k
    max_chain_length = 0;
170
98.5k
    population = occupancy = 0;
171
98.5k
    mask = 0;
172
98.5k
    prime = 0;
173
98.5k
    items = nullptr;
174
98.5k
  }
hb_hashmap_t<unsigned int, OT::Feature const*, false>::init()
Line
Count
Source
165
98.5k
  {
166
98.5k
    hb_object_init (this);
167
168
98.5k
    successful = true;
169
98.5k
    max_chain_length = 0;
170
98.5k
    population = occupancy = 0;
171
98.5k
    mask = 0;
172
98.5k
    prime = 0;
173
98.5k
    items = nullptr;
174
98.5k
  }
hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::init()
Line
Count
Source
165
98.5k
  {
166
98.5k
    hb_object_init (this);
167
168
98.5k
    successful = true;
169
98.5k
    max_chain_length = 0;
170
98.5k
    population = occupancy = 0;
171
98.5k
    mask = 0;
172
98.5k
    prime = 0;
173
98.5k
    items = nullptr;
174
98.5k
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::init()
Line
Count
Source
165
246k
  {
166
246k
    hb_object_init (this);
167
168
246k
    successful = true;
169
246k
    max_chain_length = 0;
170
246k
    population = occupancy = 0;
171
246k
    mask = 0;
172
246k
    prime = 0;
173
246k
    items = nullptr;
174
246k
  }
hb_hashmap_t<unsigned int, TripleDistances, false>::init()
Line
Count
Source
165
49.2k
  {
166
49.2k
    hb_object_init (this);
167
168
49.2k
    successful = true;
169
49.2k
    max_chain_length = 0;
170
49.2k
    population = occupancy = 0;
171
49.2k
    mask = 0;
172
49.2k
    prime = 0;
173
49.2k
    items = nullptr;
174
49.2k
  }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::init()
Line
Count
Source
165
49.2k
  {
166
49.2k
    hb_object_init (this);
167
168
49.2k
    successful = true;
169
49.2k
    max_chain_length = 0;
170
49.2k
    population = occupancy = 0;
171
49.2k
    mask = 0;
172
49.2k
    prime = 0;
173
49.2k
    items = nullptr;
174
49.2k
  }
hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::init()
Line
Count
Source
165
2.64k
  {
166
2.64k
    hb_object_init (this);
167
168
2.64k
    successful = true;
169
2.64k
    max_chain_length = 0;
170
2.64k
    population = occupancy = 0;
171
2.64k
    mask = 0;
172
2.64k
    prime = 0;
173
2.64k
    items = nullptr;
174
2.64k
  }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::init()
Line
Count
Source
165
306
  {
166
306
    hb_object_init (this);
167
168
306
    successful = true;
169
306
    max_chain_length = 0;
170
306
    population = occupancy = 0;
171
306
    mask = 0;
172
306
    prime = 0;
173
306
    items = nullptr;
174
306
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::init()
Line
Count
Source
165
183
  {
166
183
    hb_object_init (this);
167
168
183
    successful = true;
169
183
    max_chain_length = 0;
170
183
    population = occupancy = 0;
171
183
    mask = 0;
172
183
    prime = 0;
173
183
    items = nullptr;
174
183
  }
175
  void fini ()
176
7.09M
  {
177
7.09M
    hb_object_fini (this);
178
179
7.09M
    if (likely (items))
180
2.10M
    {
181
2.10M
      unsigned size = mask + 1;
182
1.68G
      for (unsigned i = 0; i < size; i++)
183
1.68G
  items[i].~item_t ();
184
2.10M
      hb_free (items);
185
2.10M
      items = nullptr;
186
2.10M
    }
187
7.09M
    population = occupancy = 0;
188
7.09M
  }
hb_hashmap_t<unsigned int, unsigned int, true>::fini()
Line
Count
Source
176
1.51M
  {
177
1.51M
    hb_object_fini (this);
178
179
1.51M
    if (likely (items))
180
613k
    {
181
613k
      unsigned size = mask + 1;
182
1.63G
      for (unsigned i = 0; i < size; i++)
183
1.63G
  items[i].~item_t ();
184
613k
      hb_free (items);
185
613k
      items = nullptr;
186
613k
    }
187
1.51M
    population = occupancy = 0;
188
1.51M
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::fini()
Line
Count
Source
176
410k
  {
177
410k
    hb_object_fini (this);
178
179
410k
    if (likely (items))
180
59.9k
    {
181
59.9k
      unsigned size = mask + 1;
182
2.62M
      for (unsigned i = 0; i < size; i++)
183
2.56M
  items[i].~item_t ();
184
59.9k
      hb_free (items);
185
59.9k
      items = nullptr;
186
59.9k
    }
187
410k
    population = occupancy = 0;
188
410k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::fini()
hb_hashmap_t<unsigned int, hb_set_t, false>::fini()
Line
Count
Source
176
57.6k
  {
177
57.6k
    hb_object_fini (this);
178
179
57.6k
    if (likely (items))
180
15.7k
    {
181
15.7k
      unsigned size = mask + 1;
182
141k
      for (unsigned i = 0; i < size; i++)
183
126k
  items[i].~item_t ();
184
15.7k
      hb_free (items);
185
15.7k
      items = nullptr;
186
15.7k
    }
187
57.6k
    population = occupancy = 0;
188
57.6k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::fini()
Line
Count
Source
176
173k
  {
177
173k
    hb_object_fini (this);
178
179
173k
    if (likely (items))
180
84.6k
    {
181
84.6k
      unsigned size = mask + 1;
182
5.19M
      for (unsigned i = 0; i < size; i++)
183
5.10M
  items[i].~item_t ();
184
84.6k
      hb_free (items);
185
84.6k
      items = nullptr;
186
84.6k
    }
187
173k
    population = occupancy = 0;
188
173k
  }
hb_hashmap_t<unsigned int, face_table_info_t, false>::fini()
Line
Count
Source
176
49.0k
  {
177
49.0k
    hb_object_fini (this);
178
179
49.0k
    if (likely (items))
180
36.1k
    {
181
36.1k
      unsigned size = mask + 1;
182
478k
      for (unsigned i = 0; i < size; i++)
183
442k
  items[i].~item_t ();
184
36.1k
      hb_free (items);
185
36.1k
      items = nullptr;
186
36.1k
    }
187
49.0k
    population = occupancy = 0;
188
49.0k
  }
hb_hashmap_t<unsigned int, unsigned int, false>::fini()
Line
Count
Source
176
677k
  {
177
677k
    hb_object_fini (this);
178
179
677k
    if (likely (items))
180
183k
    {
181
183k
      unsigned size = mask + 1;
182
1.89M
      for (unsigned i = 0; i < size; i++)
183
1.71M
  items[i].~item_t ();
184
183k
      hb_free (items);
185
183k
      items = nullptr;
186
183k
    }
187
677k
    population = occupancy = 0;
188
677k
  }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::fini()
Line
Count
Source
176
38.6k
  {
177
38.6k
    hb_object_fini (this);
178
179
38.6k
    if (likely (items))
180
29.5k
    {
181
29.5k
      unsigned size = mask + 1;
182
20.7M
      for (unsigned i = 0; i < size; i++)
183
20.6M
  items[i].~item_t ();
184
29.5k
      hb_free (items);
185
29.5k
      items = nullptr;
186
29.5k
    }
187
38.6k
    population = occupancy = 0;
188
38.6k
  }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::fini()
Line
Count
Source
176
4.60k
  {
177
4.60k
    hb_object_fini (this);
178
179
4.60k
    if (likely (items))
180
4.46k
    {
181
4.46k
      unsigned size = mask + 1;
182
40.1k
      for (unsigned i = 0; i < size; i++)
183
35.6k
  items[i].~item_t ();
184
4.46k
      hb_free (items);
185
4.46k
      items = nullptr;
186
4.46k
    }
187
4.60k
    population = occupancy = 0;
188
4.60k
  }
hb_hashmap_t<unsigned int, Triple, false>::fini()
Line
Count
Source
176
3.35M
  {
177
3.35M
    hb_object_fini (this);
178
179
3.35M
    if (likely (items))
180
1.01M
    {
181
1.01M
      unsigned size = mask + 1;
182
9.17M
      for (unsigned i = 0; i < size; i++)
183
8.15M
  items[i].~item_t ();
184
1.01M
      hb_free (items);
185
1.01M
      items = nullptr;
186
1.01M
    }
187
3.35M
    population = occupancy = 0;
188
3.35M
  }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::fini()
Line
Count
Source
176
102k
  {
177
102k
    hb_object_fini (this);
178
179
102k
    if (likely (items))
180
0
    {
181
0
      unsigned size = mask + 1;
182
0
      for (unsigned i = 0; i < size; i++)
183
0
  items[i].~item_t ();
184
0
      hb_free (items);
185
0
      items = nullptr;
186
0
    }
187
102k
    population = occupancy = 0;
188
102k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::fini()
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::fini()
Line
Count
Source
176
49.2k
  {
177
49.2k
    hb_object_fini (this);
178
179
49.2k
    if (likely (items))
180
48.9k
    {
181
48.9k
      unsigned size = mask + 1;
182
749k
      for (unsigned i = 0; i < size; i++)
183
700k
  items[i].~item_t ();
184
48.9k
      hb_free (items);
185
48.9k
      items = nullptr;
186
48.9k
    }
187
49.2k
    population = occupancy = 0;
188
49.2k
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::fini()
Line
Count
Source
176
8.93k
  {
177
8.93k
    hb_object_fini (this);
178
179
8.93k
    if (likely (items))
180
43
    {
181
43
      unsigned size = mask + 1;
182
387
      for (unsigned i = 0; i < size; i++)
183
344
  items[i].~item_t ();
184
43
      hb_free (items);
185
43
      items = nullptr;
186
43
    }
187
8.93k
    population = occupancy = 0;
188
8.93k
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::fini()
Line
Count
Source
176
8.93k
  {
177
8.93k
    hb_object_fini (this);
178
179
8.93k
    if (likely (items))
180
43
    {
181
43
      unsigned size = mask + 1;
182
387
      for (unsigned i = 0; i < size; i++)
183
344
  items[i].~item_t ();
184
43
      hb_free (items);
185
43
      items = nullptr;
186
43
    }
187
8.93k
    population = occupancy = 0;
188
8.93k
  }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::fini()
Line
Count
Source
176
876
  {
177
876
    hb_object_fini (this);
178
179
876
    if (likely (items))
180
547
    {
181
547
      unsigned size = mask + 1;
182
25.4k
      for (unsigned i = 0; i < size; i++)
183
24.9k
  items[i].~item_t ();
184
547
      hb_free (items);
185
547
      items = nullptr;
186
547
    }
187
876
    population = occupancy = 0;
188
876
  }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::fini()
Line
Count
Source
176
124
  {
177
124
    hb_object_fini (this);
178
179
124
    if (likely (items))
180
124
    {
181
124
      unsigned size = mask + 1;
182
45.8k
      for (unsigned i = 0; i < size; i++)
183
45.6k
  items[i].~item_t ();
184
124
      hb_free (items);
185
124
      items = nullptr;
186
124
    }
187
124
    population = occupancy = 0;
188
124
  }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::fini()
Line
Count
Source
176
248
  {
177
248
    hb_object_fini (this);
178
179
248
    if (likely (items))
180
248
    {
181
248
      unsigned size = mask + 1;
182
49.6k
      for (unsigned i = 0; i < size; i++)
183
49.4k
  items[i].~item_t ();
184
248
      hb_free (items);
185
248
      items = nullptr;
186
248
    }
187
248
    population = occupancy = 0;
188
248
  }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::fini()
Line
Count
Source
176
1.26k
  {
177
1.26k
    hb_object_fini (this);
178
179
1.26k
    if (likely (items))
180
1.01k
    {
181
1.01k
      unsigned size = mask + 1;
182
18.2k
      for (unsigned i = 0; i < size; i++)
183
17.2k
  items[i].~item_t ();
184
1.01k
      hb_free (items);
185
1.01k
      items = nullptr;
186
1.01k
    }
187
1.26k
    population = occupancy = 0;
188
1.26k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::fini()
Line
Count
Source
176
185
  {
177
185
    hb_object_fini (this);
178
179
185
    if (likely (items))
180
185
    {
181
185
      unsigned size = mask + 1;
182
7.48M
      for (unsigned i = 0; i < size; i++)
183
7.48M
  items[i].~item_t ();
184
185
      hb_free (items);
185
185
      items = nullptr;
186
185
    }
187
185
    population = occupancy = 0;
188
185
  }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::fini()
Line
Count
Source
176
98.5k
  {
177
98.5k
    hb_object_fini (this);
178
179
98.5k
    if (likely (items))
180
0
    {
181
0
      unsigned size = mask + 1;
182
0
      for (unsigned i = 0; i < size; i++)
183
0
  items[i].~item_t ();
184
0
      hb_free (items);
185
0
      items = nullptr;
186
0
    }
187
98.5k
    population = occupancy = 0;
188
98.5k
  }
hb_hashmap_t<unsigned int, OT::Feature const*, false>::fini()
Line
Count
Source
176
98.5k
  {
177
98.5k
    hb_object_fini (this);
178
179
98.5k
    if (likely (items))
180
0
    {
181
0
      unsigned size = mask + 1;
182
0
      for (unsigned i = 0; i < size; i++)
183
0
  items[i].~item_t ();
184
0
      hb_free (items);
185
0
      items = nullptr;
186
0
    }
187
98.5k
    population = occupancy = 0;
188
98.5k
  }
hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::fini()
Line
Count
Source
176
98.5k
  {
177
98.5k
    hb_object_fini (this);
178
179
98.5k
    if (likely (items))
180
0
    {
181
0
      unsigned size = mask + 1;
182
0
      for (unsigned i = 0; i < size; i++)
183
0
  items[i].~item_t ();
184
0
      hb_free (items);
185
0
      items = nullptr;
186
0
    }
187
98.5k
    population = occupancy = 0;
188
98.5k
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::fini()
Line
Count
Source
176
246k
  {
177
246k
    hb_object_fini (this);
178
179
246k
    if (likely (items))
180
3.22k
    {
181
3.22k
      unsigned size = mask + 1;
182
363k
      for (unsigned i = 0; i < size; i++)
183
360k
  items[i].~item_t ();
184
3.22k
      hb_free (items);
185
3.22k
      items = nullptr;
186
3.22k
    }
187
246k
    population = occupancy = 0;
188
246k
  }
hb_hashmap_t<unsigned int, TripleDistances, false>::fini()
Line
Count
Source
176
49.2k
  {
177
49.2k
    hb_object_fini (this);
178
179
49.2k
    if (likely (items))
180
1.32k
    {
181
1.32k
      unsigned size = mask + 1;
182
11.9k
      for (unsigned i = 0; i < size; i++)
183
10.6k
  items[i].~item_t ();
184
1.32k
      hb_free (items);
185
1.32k
      items = nullptr;
186
1.32k
    }
187
49.2k
    population = occupancy = 0;
188
49.2k
  }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::fini()
Line
Count
Source
176
49.2k
  {
177
49.2k
    hb_object_fini (this);
178
179
49.2k
    if (likely (items))
180
999
    {
181
999
      unsigned size = mask + 1;
182
36.8k
      for (unsigned i = 0; i < size; i++)
183
35.8k
  items[i].~item_t ();
184
999
      hb_free (items);
185
999
      items = nullptr;
186
999
    }
187
49.2k
    population = occupancy = 0;
188
49.2k
  }
hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::fini()
Line
Count
Source
176
2.64k
  {
177
2.64k
    hb_object_fini (this);
178
179
2.64k
    if (likely (items))
180
0
    {
181
0
      unsigned size = mask + 1;
182
0
      for (unsigned i = 0; i < size; i++)
183
0
  items[i].~item_t ();
184
0
      hb_free (items);
185
0
      items = nullptr;
186
0
    }
187
2.64k
    population = occupancy = 0;
188
2.64k
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::fini()
Line
Count
Source
176
183
  {
177
183
    hb_object_fini (this);
178
179
183
    if (likely (items))
180
183
    {
181
183
      unsigned size = mask + 1;
182
2.94k
      for (unsigned i = 0; i < size; i++)
183
2.76k
  items[i].~item_t ();
184
183
      hb_free (items);
185
183
      items = nullptr;
186
183
    }
187
183
    population = occupancy = 0;
188
183
  }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::fini()
Line
Count
Source
176
306
  {
177
306
    hb_object_fini (this);
178
179
306
    if (likely (items))
180
43
    {
181
43
      unsigned size = mask + 1;
182
387
      for (unsigned i = 0; i < size; i++)
183
344
  items[i].~item_t ();
184
43
      hb_free (items);
185
43
      items = nullptr;
186
43
    }
187
306
    population = occupancy = 0;
188
306
  }
189
190
  hb_hashmap_t& reset ()
191
480k
  {
192
480k
    successful = true;
193
480k
    clear ();
194
480k
    return *this;
195
480k
  }
hb_hashmap_t<unsigned int, unsigned int, true>::reset()
Line
Count
Source
191
287
  {
192
287
    successful = true;
193
287
    clear ();
194
287
    return *this;
195
287
  }
hb_hashmap_t<unsigned int, unsigned int, false>::reset()
Line
Count
Source
191
425k
  {
192
425k
    successful = true;
193
425k
    clear ();
194
425k
    return *this;
195
425k
  }
hb_hashmap_t<unsigned int, Triple, false>::reset()
Line
Count
Source
191
55.2k
  {
192
55.2k
    successful = true;
193
55.2k
    clear ();
194
55.2k
    return *this;
195
55.2k
  }
196
197
36.4M
  bool in_error () const { return !successful; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::in_error() const
Line
Count
Source
197
1.45M
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, unsigned int, true>::in_error() const
Line
Count
Source
197
16.0M
  bool in_error () const { return !successful; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::in_error() const
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::in_error() const
Line
Count
Source
197
15.4M
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::in_error() const
Line
Count
Source
197
16.4k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, unsigned int, false>::in_error() const
Line
Count
Source
197
270k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb_set_t, false>::in_error() const
Line
Count
Source
197
69
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, Triple, false>::in_error() const
Line
Count
Source
197
1.78M
  bool in_error () const { return !successful; }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::in_error() const
Line
Count
Source
197
150k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::in_error() const
Line
Count
Source
197
611k
  bool in_error () const { return !successful; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::in_error() const
Line
Count
Source
197
128
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::in_error() const
Line
Count
Source
197
97.0k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, OT::Feature const*, false>::in_error() const
Line
Count
Source
197
97.0k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::in_error() const
Line
Count
Source
197
97.0k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::in_error() const
Line
Count
Source
197
242k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, TripleDistances, false>::in_error() const
Line
Count
Source
197
48.5k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::in_error() const
Line
Count
Source
197
48.5k
  bool in_error () const { return !successful; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::in_error() const
Line
Count
Source
197
183
  bool in_error () const { return !successful; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::in_error() const
Line
Count
Source
197
43
  bool in_error () const { return !successful; }
198
199
  bool alloc (unsigned new_population = 0)
200
2.67M
  {
201
2.67M
    if (unlikely (!successful)) return false;
202
203
2.67M
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
2.58M
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
2.58M
    unsigned int new_size = 1u << power;
207
2.58M
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
2.58M
    if (unlikely (!new_items))
209
3.62k
    {
210
3.62k
      successful = false;
211
3.62k
      return false;
212
3.62k
    }
213
2.57M
    if (!item_t::is_trivially_constructible)
214
1.27M
      for (auto &_ : hb_iter (new_items, new_size))
215
27.0M
  new (&_) item_t ();
216
1.30M
    else
217
1.30M
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
2.57M
    unsigned int old_size = size ();
220
2.57M
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
2.57M
    population = occupancy = 0;
224
2.57M
    mask = new_size - 1;
225
2.57M
    prime = prime_for (power);
226
2.57M
    max_chain_length = power * 2;
227
2.57M
    items = new_items;
228
229
    /* Insert back old items. */
230
66.7M
    for (unsigned int i = 0; i < old_size; i++)
231
64.1M
    {
232
64.1M
      if (old_items[i].is_real ())
233
40.5M
      {
234
40.5M
  set_with_hash (std::move (old_items[i].key),
235
40.5M
           old_items[i].hash,
236
40.5M
           std::move (old_items[i].value));
237
40.5M
      }
238
64.1M
    }
239
66.7M
    for (unsigned int i = 0; i < old_size; i++)
240
64.1M
      old_items[i].~item_t ();
241
242
2.57M
    hb_free (old_items);
243
244
2.57M
    return true;
245
2.58M
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
147k
  {
201
147k
    if (unlikely (!successful)) return false;
202
203
147k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
147k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
147k
    unsigned int new_size = 1u << power;
207
147k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
147k
    if (unlikely (!new_items))
209
84
    {
210
84
      successful = false;
211
84
      return false;
212
84
    }
213
147k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
147k
    else
217
147k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
147k
    unsigned int old_size = size ();
220
147k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
147k
    population = occupancy = 0;
224
147k
    mask = new_size - 1;
225
147k
    prime = prime_for (power);
226
147k
    max_chain_length = power * 2;
227
147k
    items = new_items;
228
229
    /* Insert back old items. */
230
2.28M
    for (unsigned int i = 0; i < old_size; i++)
231
2.14M
    {
232
2.14M
      if (old_items[i].is_real ())
233
1.29M
      {
234
1.29M
  set_with_hash (std::move (old_items[i].key),
235
1.29M
           old_items[i].hash,
236
1.29M
           std::move (old_items[i].value));
237
1.29M
      }
238
2.14M
    }
239
2.28M
    for (unsigned int i = 0; i < old_size; i++)
240
2.14M
      old_items[i].~item_t ();
241
242
147k
    hb_free (old_items);
243
244
147k
    return true;
245
147k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, unsigned int, true>::alloc(unsigned int)
Line
Count
Source
200
851k
  {
201
851k
    if (unlikely (!successful)) return false;
202
203
850k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
754k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
754k
    unsigned int new_size = 1u << power;
207
754k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
754k
    if (unlikely (!new_items))
209
2.86k
    {
210
2.86k
      successful = false;
211
2.86k
      return false;
212
2.86k
    }
213
752k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
752k
    else
217
752k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
752k
    unsigned int old_size = size ();
220
752k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
752k
    population = occupancy = 0;
224
752k
    mask = new_size - 1;
225
752k
    prime = prime_for (power);
226
752k
    max_chain_length = power * 2;
227
752k
    items = new_items;
228
229
    /* Insert back old items. */
230
36.7M
    for (unsigned int i = 0; i < old_size; i++)
231
35.9M
    {
232
35.9M
      if (old_items[i].is_real ())
233
21.9M
      {
234
21.9M
  set_with_hash (std::move (old_items[i].key),
235
21.9M
           old_items[i].hash,
236
21.9M
           std::move (old_items[i].value));
237
21.9M
      }
238
35.9M
    }
239
36.7M
    for (unsigned int i = 0; i < old_size; i++)
240
35.9M
      old_items[i].~item_t ();
241
242
752k
    hb_free (old_items);
243
244
752k
    return true;
245
754k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::alloc(unsigned int)
Line
Count
Source
200
146k
  {
201
146k
    if (unlikely (!successful)) return false;
202
203
146k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
146k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
146k
    unsigned int new_size = 1u << power;
207
146k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
146k
    if (unlikely (!new_items))
209
258
    {
210
258
      successful = false;
211
258
      return false;
212
258
    }
213
145k
    if (!item_t::is_trivially_constructible)
214
145k
      for (auto &_ : hb_iter (new_items, new_size))
215
9.53M
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
145k
    unsigned int old_size = size ();
220
145k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
145k
    population = occupancy = 0;
224
145k
    mask = new_size - 1;
225
145k
    prime = prime_for (power);
226
145k
    max_chain_length = power * 2;
227
145k
    items = new_items;
228
229
    /* Insert back old items. */
230
4.57M
    for (unsigned int i = 0; i < old_size; i++)
231
4.42M
    {
232
4.42M
      if (old_items[i].is_real ())
233
2.92M
      {
234
2.92M
  set_with_hash (std::move (old_items[i].key),
235
2.92M
           old_items[i].hash,
236
2.92M
           std::move (old_items[i].value));
237
2.92M
      }
238
4.42M
    }
239
4.57M
    for (unsigned int i = 0; i < old_size; i++)
240
4.42M
      old_items[i].~item_t ();
241
242
145k
    hb_free (old_items);
243
244
145k
    return true;
245
146k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, Triple, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, hb_set_t, false>::alloc(unsigned int)
Line
Count
Source
200
15.8k
  {
201
15.8k
    if (unlikely (!successful)) return false;
202
203
15.8k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
15.8k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
15.8k
    unsigned int new_size = 1u << power;
207
15.8k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
15.8k
    if (unlikely (!new_items))
209
53
    {
210
53
      successful = false;
211
53
      return false;
212
53
    }
213
15.7k
    if (!item_t::is_trivially_constructible)
214
15.7k
      for (auto &_ : hb_iter (new_items, new_size))
215
126k
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
15.7k
    unsigned int old_size = size ();
220
15.7k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
15.7k
    population = occupancy = 0;
224
15.7k
    mask = new_size - 1;
225
15.7k
    prime = prime_for (power);
226
15.7k
    max_chain_length = power * 2;
227
15.7k
    items = new_items;
228
229
    /* Insert back old items. */
230
16.1k
    for (unsigned int i = 0; i < old_size; i++)
231
408
    {
232
408
      if (old_items[i].is_real ())
233
255
      {
234
255
  set_with_hash (std::move (old_items[i].key),
235
255
           old_items[i].hash,
236
255
           std::move (old_items[i].value));
237
255
      }
238
408
    }
239
16.1k
    for (unsigned int i = 0; i < old_size; i++)
240
408
      old_items[i].~item_t ();
241
242
15.7k
    hb_free (old_items);
243
244
15.7k
    return true;
245
15.8k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, face_table_info_t, false>::alloc(unsigned int)
Line
Count
Source
200
47.3k
  {
201
47.3k
    if (unlikely (!successful)) return false;
202
203
47.3k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
47.3k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
47.3k
    unsigned int new_size = 1u << power;
207
47.3k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
47.3k
    if (unlikely (!new_items))
209
25
    {
210
25
      successful = false;
211
25
      return false;
212
25
    }
213
47.3k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
47.3k
    else
217
47.3k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
47.3k
    unsigned int old_size = size ();
220
47.3k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
47.3k
    population = occupancy = 0;
224
47.3k
    mask = new_size - 1;
225
47.3k
    prime = prime_for (power);
226
47.3k
    max_chain_length = power * 2;
227
47.3k
    items = new_items;
228
229
    /* Insert back old items. */
230
200k
    for (unsigned int i = 0; i < old_size; i++)
231
153k
    {
232
153k
      if (old_items[i].is_real ())
233
97.2k
      {
234
97.2k
  set_with_hash (std::move (old_items[i].key),
235
97.2k
           old_items[i].hash,
236
97.2k
           std::move (old_items[i].value));
237
97.2k
      }
238
153k
    }
239
200k
    for (unsigned int i = 0; i < old_size; i++)
240
153k
      old_items[i].~item_t ();
241
242
47.3k
    hb_free (old_items);
243
244
47.3k
    return true;
245
47.3k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
203k
  {
201
203k
    if (unlikely (!successful)) return false;
202
203
203k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
203k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
203k
    unsigned int new_size = 1u << power;
207
203k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
203k
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
203k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
203k
    else
217
203k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
203k
    unsigned int old_size = size ();
220
203k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
203k
    population = occupancy = 0;
224
203k
    mask = new_size - 1;
225
203k
    prime = prime_for (power);
226
203k
    max_chain_length = power * 2;
227
203k
    items = new_items;
228
229
    /* Insert back old items. */
230
454k
    for (unsigned int i = 0; i < old_size; i++)
231
250k
    {
232
250k
      if (old_items[i].is_real ())
233
156k
      {
234
156k
  set_with_hash (std::move (old_items[i].key),
235
156k
           old_items[i].hash,
236
156k
           std::move (old_items[i].value));
237
156k
      }
238
250k
    }
239
454k
    for (unsigned int i = 0; i < old_size; i++)
240
250k
      old_items[i].~item_t ();
241
242
203k
    hb_free (old_items);
243
244
203k
    return true;
245
203k
  }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::alloc(unsigned int)
Line
Count
Source
200
144k
  {
201
144k
    if (unlikely (!successful)) return false;
202
203
144k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
144k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
144k
    unsigned int new_size = 1u << power;
207
144k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
144k
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
144k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
144k
    else
217
144k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
144k
    unsigned int old_size = size ();
220
144k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
144k
    population = occupancy = 0;
224
144k
    mask = new_size - 1;
225
144k
    prime = prime_for (power);
226
144k
    max_chain_length = power * 2;
227
144k
    items = new_items;
228
229
    /* Insert back old items. */
230
20.5M
    for (unsigned int i = 0; i < old_size; i++)
231
20.4M
    {
232
20.4M
      if (old_items[i].is_real ())
233
13.5M
      {
234
13.5M
  set_with_hash (std::move (old_items[i].key),
235
13.5M
           old_items[i].hash,
236
13.5M
           std::move (old_items[i].value));
237
13.5M
      }
238
20.4M
    }
239
20.5M
    for (unsigned int i = 0; i < old_size; i++)
240
20.4M
      old_items[i].~item_t ();
241
242
144k
    hb_free (old_items);
243
244
144k
    return true;
245
144k
  }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::alloc(unsigned int)
Line
Count
Source
200
4.46k
  {
201
4.46k
    if (unlikely (!successful)) return false;
202
203
4.46k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
4.46k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
4.46k
    unsigned int new_size = 1u << power;
207
4.46k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
4.46k
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
4.46k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
4.46k
    else
217
4.46k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
4.46k
    unsigned int old_size = size ();
220
4.46k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
4.46k
    population = occupancy = 0;
224
4.46k
    mask = new_size - 1;
225
4.46k
    prime = prime_for (power);
226
4.46k
    max_chain_length = power * 2;
227
4.46k
    items = new_items;
228
229
    /* Insert back old items. */
230
4.46k
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
4.46k
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
4.46k
    hb_free (old_items);
243
244
4.46k
    return true;
245
4.46k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, Triple, false>::alloc(unsigned int)
Line
Count
Source
200
1.01M
  {
201
1.01M
    if (unlikely (!successful)) return false;
202
203
1.01M
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
1.01M
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
1.01M
    unsigned int new_size = 1u << power;
207
1.01M
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
1.01M
    if (unlikely (!new_items))
209
1
    {
210
1
      successful = false;
211
1
      return false;
212
1
    }
213
1.01M
    if (!item_t::is_trivially_constructible)
214
1.01M
      for (auto &_ : hb_iter (new_items, new_size))
215
8.11M
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
1.01M
    unsigned int old_size = size ();
220
1.01M
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
1.01M
    population = occupancy = 0;
224
1.01M
    mask = new_size - 1;
225
1.01M
    prime = prime_for (power);
226
1.01M
    max_chain_length = power * 2;
227
1.01M
    items = new_items;
228
229
    /* Insert back old items. */
230
1.01M
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
1.01M
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
1.01M
    hb_free (old_items);
243
244
1.01M
    return true;
245
1.01M
  }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::alloc(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::alloc(unsigned int)
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
1.38k
  {
201
1.38k
    if (unlikely (!successful)) return false;
202
203
1.38k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
1.38k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
1.38k
    unsigned int new_size = 1u << power;
207
1.38k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
1.38k
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
1.38k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
1.38k
    else
217
1.38k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
1.38k
    unsigned int old_size = size ();
220
1.38k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
1.38k
    population = occupancy = 0;
224
1.38k
    mask = new_size - 1;
225
1.38k
    prime = prime_for (power);
226
1.38k
    max_chain_length = power * 2;
227
1.38k
    items = new_items;
228
229
    /* Insert back old items. */
230
21.9k
    for (unsigned int i = 0; i < old_size; i++)
231
20.5k
    {
232
20.5k
      if (old_items[i].is_real ())
233
13.2k
      {
234
13.2k
  set_with_hash (std::move (old_items[i].key),
235
13.2k
           old_items[i].hash,
236
13.2k
           std::move (old_items[i].value));
237
13.2k
      }
238
20.5k
    }
239
21.9k
    for (unsigned int i = 0; i < old_size; i++)
240
20.5k
      old_items[i].~item_t ();
241
242
1.38k
    hb_free (old_items);
243
244
1.38k
    return true;
245
1.38k
  }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::alloc(unsigned int)
Line
Count
Source
200
499
  {
201
499
    if (unlikely (!successful)) return false;
202
203
499
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
499
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
499
    unsigned int new_size = 1u << power;
207
499
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
499
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
499
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
499
    else
217
499
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
499
    unsigned int old_size = size ();
220
499
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
499
    population = occupancy = 0;
224
499
    mask = new_size - 1;
225
499
    prime = prime_for (power);
226
499
    max_chain_length = power * 2;
227
499
    items = new_items;
228
229
    /* Insert back old items. */
230
45.1k
    for (unsigned int i = 0; i < old_size; i++)
231
44.6k
    {
232
44.6k
      if (old_items[i].is_real ())
233
29.6k
      {
234
29.6k
  set_with_hash (std::move (old_items[i].key),
235
29.6k
           old_items[i].hash,
236
29.6k
           std::move (old_items[i].value));
237
29.6k
      }
238
44.6k
    }
239
45.1k
    for (unsigned int i = 0; i < old_size; i++)
240
44.6k
      old_items[i].~item_t ();
241
242
499
    hb_free (old_items);
243
244
499
    return true;
245
499
  }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
960
  {
201
960
    if (unlikely (!successful)) return false;
202
203
960
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
960
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
960
    unsigned int new_size = 1u << power;
207
960
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
960
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
960
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
960
    else
217
960
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
960
    unsigned int old_size = size ();
220
960
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
960
    population = occupancy = 0;
224
960
    mask = new_size - 1;
225
960
    prime = prime_for (power);
226
960
    max_chain_length = power * 2;
227
960
    items = new_items;
228
229
    /* Insert back old items. */
230
48.3k
    for (unsigned int i = 0; i < old_size; i++)
231
47.4k
    {
232
47.4k
      if (old_items[i].is_real ())
233
31.2k
      {
234
31.2k
  set_with_hash (std::move (old_items[i].key),
235
31.2k
           old_items[i].hash,
236
31.2k
           std::move (old_items[i].value));
237
31.2k
      }
238
47.4k
    }
239
48.3k
    for (unsigned int i = 0; i < old_size; i++)
240
47.4k
      old_items[i].~item_t ();
241
242
960
    hb_free (old_items);
243
244
960
    return true;
245
960
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::alloc(unsigned int)
Line
Count
Source
200
8.16k
  {
201
8.16k
    if (unlikely (!successful)) return false;
202
203
8.16k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
8.16k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
8.16k
    unsigned int new_size = 1u << power;
207
8.16k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
8.16k
    if (unlikely (!new_items))
209
9
    {
210
9
      successful = false;
211
9
      return false;
212
9
    }
213
8.15k
    if (!item_t::is_trivially_constructible)
214
8.15k
      for (auto &_ : hb_iter (new_items, new_size))
215
694k
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
8.15k
    unsigned int old_size = size ();
220
8.15k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
8.15k
    population = occupancy = 0;
224
8.15k
    mask = new_size - 1;
225
8.15k
    prime = prime_for (power);
226
8.15k
    max_chain_length = power * 2;
227
8.15k
    items = new_items;
228
229
    /* Insert back old items. */
230
342k
    for (unsigned int i = 0; i < old_size; i++)
231
334k
    {
232
334k
      if (old_items[i].is_real ())
233
220k
      {
234
220k
  set_with_hash (std::move (old_items[i].key),
235
220k
           old_items[i].hash,
236
220k
           std::move (old_items[i].value));
237
220k
      }
238
334k
    }
239
342k
    for (unsigned int i = 0; i < old_size; i++)
240
334k
      old_items[i].~item_t ();
241
242
8.15k
    hb_free (old_items);
243
244
8.15k
    return true;
245
8.16k
  }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
1.81k
  {
201
1.81k
    if (unlikely (!successful)) return false;
202
203
1.81k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
1.81k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
1.81k
    unsigned int new_size = 1u << power;
207
1.81k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
1.81k
    if (unlikely (!new_items))
209
1
    {
210
1
      successful = false;
211
1
      return false;
212
1
    }
213
1.81k
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
1.81k
    else
217
1.81k
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
1.81k
    unsigned int old_size = size ();
220
1.81k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
1.81k
    population = occupancy = 0;
224
1.81k
    mask = new_size - 1;
225
1.81k
    prime = prime_for (power);
226
1.81k
    max_chain_length = power * 2;
227
1.81k
    items = new_items;
228
229
    /* Insert back old items. */
230
10.9k
    for (unsigned int i = 0; i < old_size; i++)
231
9.17k
    {
232
9.17k
      if (old_items[i].is_real ())
233
5.80k
      {
234
5.80k
  set_with_hash (std::move (old_items[i].key),
235
5.80k
           old_items[i].hash,
236
5.80k
           std::move (old_items[i].value));
237
5.80k
      }
238
9.17k
    }
239
10.9k
    for (unsigned int i = 0; i < old_size; i++)
240
9.17k
      old_items[i].~item_t ();
241
242
1.81k
    hb_free (old_items);
243
244
1.81k
    return true;
245
1.81k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::alloc(unsigned int)
Line
Count
Source
200
86.0k
  {
201
86.0k
    if (unlikely (!successful)) return false;
202
203
86.0k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
86.0k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
86.0k
    unsigned int new_size = 1u << power;
207
86.0k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
86.0k
    if (unlikely (!new_items))
209
328
    {
210
328
      successful = false;
211
328
      return false;
212
328
    }
213
85.7k
    if (!item_t::is_trivially_constructible)
214
85.7k
      for (auto &_ : hb_iter (new_items, new_size))
215
1.00M
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
85.7k
    unsigned int old_size = size ();
220
85.7k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
85.7k
    population = occupancy = 0;
224
85.7k
    mask = new_size - 1;
225
85.7k
    prime = prime_for (power);
226
85.7k
    max_chain_length = power * 2;
227
85.7k
    items = new_items;
228
229
    /* Insert back old items. */
230
394k
    for (unsigned int i = 0; i < old_size; i++)
231
309k
    {
232
309k
      if (old_items[i].is_real ())
233
193k
      {
234
193k
  set_with_hash (std::move (old_items[i].key),
235
193k
           old_items[i].hash,
236
193k
           std::move (old_items[i].value));
237
193k
      }
238
309k
    }
239
394k
    for (unsigned int i = 0; i < old_size; i++)
240
309k
      old_items[i].~item_t ();
241
242
85.7k
    hb_free (old_items);
243
244
85.7k
    return true;
245
86.0k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::alloc(unsigned int)
Line
Count
Source
200
185
  {
201
185
    if (unlikely (!successful)) return false;
202
203
185
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
185
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
185
    unsigned int new_size = 1u << power;
207
185
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
185
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
185
    if (!item_t::is_trivially_constructible)
214
185
      for (auto &_ : hb_iter (new_items, new_size))
215
7.48M
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
185
    unsigned int old_size = size ();
220
185
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
185
    population = occupancy = 0;
224
185
    mask = new_size - 1;
225
185
    prime = prime_for (power);
226
185
    max_chain_length = power * 2;
227
185
    items = new_items;
228
229
    /* Insert back old items. */
230
185
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
185
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
185
    hb_free (old_items);
243
244
185
    return true;
245
185
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
43
  {
201
43
    if (unlikely (!successful)) return false;
202
203
43
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
43
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
43
    unsigned int new_size = 1u << power;
207
43
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
43
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
43
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
43
    else
217
43
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
43
    unsigned int old_size = size ();
220
43
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
43
    population = occupancy = 0;
224
43
    mask = new_size - 1;
225
43
    prime = prime_for (power);
226
43
    max_chain_length = power * 2;
227
43
    items = new_items;
228
229
    /* Insert back old items. */
230
43
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
43
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
43
    hb_free (old_items);
243
244
43
    return true;
245
43
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::alloc(unsigned int)
Line
Count
Source
200
43
  {
201
43
    if (unlikely (!successful)) return false;
202
203
43
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
43
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
43
    unsigned int new_size = 1u << power;
207
43
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
43
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
43
    if (!item_t::is_trivially_constructible)
214
43
      for (auto &_ : hb_iter (new_items, new_size))
215
344
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
43
    unsigned int old_size = size ();
220
43
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
43
    population = occupancy = 0;
224
43
    mask = new_size - 1;
225
43
    prime = prime_for (power);
226
43
    max_chain_length = power * 2;
227
43
    items = new_items;
228
229
    /* Insert back old items. */
230
43
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
43
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
43
    hb_free (old_items);
243
244
43
    return true;
245
43
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::alloc(unsigned int)
hb_hashmap_t<unsigned int, TripleDistances, false>::alloc(unsigned int)
Line
Count
Source
200
1.32k
  {
201
1.32k
    if (unlikely (!successful)) return false;
202
203
1.32k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
1.32k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
1.32k
    unsigned int new_size = 1u << power;
207
1.32k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
1.32k
    if (unlikely (!new_items))
209
1
    {
210
1
      successful = false;
211
1
      return false;
212
1
    }
213
1.32k
    if (!item_t::is_trivially_constructible)
214
1.32k
      for (auto &_ : hb_iter (new_items, new_size))
215
10.6k
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
1.32k
    unsigned int old_size = size ();
220
1.32k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
1.32k
    population = occupancy = 0;
224
1.32k
    mask = new_size - 1;
225
1.32k
    prime = prime_for (power);
226
1.32k
    max_chain_length = power * 2;
227
1.32k
    items = new_items;
228
229
    /* Insert back old items. */
230
1.32k
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
1.32k
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
1.32k
    hb_free (old_items);
243
244
1.32k
    return true;
245
1.32k
  }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::alloc(unsigned int)
Line
Count
Source
200
2.33k
  {
201
2.33k
    if (unlikely (!successful)) return false;
202
203
2.33k
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
2.33k
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
2.33k
    unsigned int new_size = 1u << power;
207
2.33k
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
2.33k
    if (unlikely (!new_items))
209
1
    {
210
1
      successful = false;
211
1
      return false;
212
1
    }
213
2.33k
    if (!item_t::is_trivially_constructible)
214
2.33k
      for (auto &_ : hb_iter (new_items, new_size))
215
63.7k
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
2.33k
    unsigned int old_size = size ();
220
2.33k
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
2.33k
    population = occupancy = 0;
224
2.33k
    mask = new_size - 1;
225
2.33k
    prime = prime_for (power);
226
2.33k
    max_chain_length = power * 2;
227
2.33k
    items = new_items;
228
229
    /* Insert back old items. */
230
30.2k
    for (unsigned int i = 0; i < old_size; i++)
231
27.8k
    {
232
27.8k
      if (old_items[i].is_real ())
233
17.9k
      {
234
17.9k
  set_with_hash (std::move (old_items[i].key),
235
17.9k
           old_items[i].hash,
236
17.9k
           std::move (old_items[i].value));
237
17.9k
      }
238
27.8k
    }
239
30.2k
    for (unsigned int i = 0; i < old_size; i++)
240
27.8k
      old_items[i].~item_t ();
241
242
2.33k
    hb_free (old_items);
243
244
2.33k
    return true;
245
2.33k
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::alloc(unsigned int)
Line
Count
Source
200
267
  {
201
267
    if (unlikely (!successful)) return false;
202
203
267
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
267
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
267
    unsigned int new_size = 1u << power;
207
267
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
267
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
267
    if (!item_t::is_trivially_constructible)
214
267
      for (auto &_ : hb_iter (new_items, new_size))
215
4.05k
  new (&_) item_t ();
216
0
    else
217
0
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
267
    unsigned int old_size = size ();
220
267
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
267
    population = occupancy = 0;
224
267
    mask = new_size - 1;
225
267
    prime = prime_for (power);
226
267
    max_chain_length = power * 2;
227
267
    items = new_items;
228
229
    /* Insert back old items. */
230
1.56k
    for (unsigned int i = 0; i < old_size; i++)
231
1.29k
    {
232
1.29k
      if (old_items[i].is_real ())
233
829
      {
234
829
  set_with_hash (std::move (old_items[i].key),
235
829
           old_items[i].hash,
236
829
           std::move (old_items[i].value));
237
829
      }
238
1.29k
    }
239
1.56k
    for (unsigned int i = 0; i < old_size; i++)
240
1.29k
      old_items[i].~item_t ();
241
242
267
    hb_free (old_items);
243
244
267
    return true;
245
267
  }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::alloc(unsigned int)
Line
Count
Source
200
43
  {
201
43
    if (unlikely (!successful)) return false;
202
203
43
    if (new_population != 0 && (new_population + new_population / 2) < mask) return true;
204
205
43
    unsigned int power = hb_bit_storage (hb_max (hb_max ((unsigned) population, new_population) * 2, 4u));
206
43
    unsigned int new_size = 1u << power;
207
43
    item_t *new_items = (item_t *) hb_malloc ((size_t) new_size * sizeof (item_t));
208
43
    if (unlikely (!new_items))
209
0
    {
210
0
      successful = false;
211
0
      return false;
212
0
    }
213
43
    if (!item_t::is_trivially_constructible)
214
0
      for (auto &_ : hb_iter (new_items, new_size))
215
0
  new (&_) item_t ();
216
43
    else
217
43
      hb_memset (new_items, 0, (size_t) new_size * sizeof (item_t));
218
219
43
    unsigned int old_size = size ();
220
43
    item_t *old_items = items;
221
222
    /* Switch to new, empty, array. */
223
43
    population = occupancy = 0;
224
43
    mask = new_size - 1;
225
43
    prime = prime_for (power);
226
43
    max_chain_length = power * 2;
227
43
    items = new_items;
228
229
    /* Insert back old items. */
230
43
    for (unsigned int i = 0; i < old_size; i++)
231
0
    {
232
0
      if (old_items[i].is_real ())
233
0
      {
234
0
  set_with_hash (std::move (old_items[i].key),
235
0
           old_items[i].hash,
236
0
           std::move (old_items[i].value));
237
0
      }
238
0
    }
239
43
    for (unsigned int i = 0; i < old_size; i++)
240
0
      old_items[i].~item_t ();
241
242
43
    hb_free (old_items);
243
244
43
    return true;
245
43
  }
246
247
  template <typename KK, typename VV>
248
  bool set_with_hash (KK&& key, uint32_t hash, VV&& value, bool overwrite = true)
249
359M
  {
250
359M
    if (unlikely (!successful)) return false;
251
357M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
357M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
357M
    unsigned int tombstone = (unsigned int) -1;
255
357M
    unsigned int i = hash % prime;
256
357M
    unsigned length = 0;
257
357M
    unsigned step = 0;
258
481M
    while (items[i].is_used ())
259
144M
    {
260
144M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
132M
    items[i] == key)
262
20.7M
      {
263
20.7M
        if (!overwrite)
264
667
    return false;
265
20.7M
        else
266
20.7M
    break;
267
20.7M
      }
268
123M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
66.3k
        tombstone = i;
270
123M
      i = (i + ++step) & mask;
271
123M
      length++;
272
123M
    }
273
274
357M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
357M
    if (item.is_used ())
277
20.8M
    {
278
20.8M
      occupancy--;
279
20.8M
      population -= item.is_real ();
280
20.8M
    }
281
282
357M
    item.key = std::forward<KK> (key);
283
357M
    item.value = std::forward<VV> (value);
284
357M
    item.hash = hash;
285
357M
    item.set_used (true);
286
357M
    item.set_real (true);
287
288
357M
    occupancy++;
289
357M
    population++;
290
291
357M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
1.56k
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
357M
    return true;
295
357M
  }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, unsigned int const&>(unsigned int const&, unsigned int, unsigned int const&, bool)
Line
Count
Source
249
71.8M
  {
250
71.8M
    if (unlikely (!successful)) return false;
251
71.8M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
71.8M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
71.8M
    unsigned int tombstone = (unsigned int) -1;
255
71.8M
    unsigned int i = hash % prime;
256
71.8M
    unsigned length = 0;
257
71.8M
    unsigned step = 0;
258
134M
    while (items[i].is_used ())
259
62.2M
    {
260
62.2M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
62.2M
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
62.2M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
62.2M
      i = (i + ++step) & mask;
271
62.2M
      length++;
272
62.2M
    }
273
274
71.8M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
71.8M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
71.8M
    item.key = std::forward<KK> (key);
283
71.8M
    item.value = std::forward<VV> (value);
284
71.8M
    item.hash = hash;
285
71.8M
    item.set_used (true);
286
71.8M
    item.set_real (true);
287
288
71.8M
    occupancy++;
289
71.8M
    population++;
290
291
71.8M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
6
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
71.8M
    return true;
295
71.8M
  }
bool hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::set_with_hash<hb_serialize_context_t::object_t*&, unsigned int&>(hb_serialize_context_t::object_t*&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
1.22M
  {
250
1.22M
    if (unlikely (!successful)) return false;
251
1.22M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
1.22M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
1.22M
    unsigned int tombstone = (unsigned int) -1;
255
1.22M
    unsigned int i = hash % prime;
256
1.22M
    unsigned length = 0;
257
1.22M
    unsigned step = 0;
258
2.37M
    while (items[i].is_used ())
259
1.18M
    {
260
1.18M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
156k
    items[i] == key)
262
40.4k
      {
263
40.4k
        if (!overwrite)
264
0
    return false;
265
40.4k
        else
266
40.4k
    break;
267
40.4k
      }
268
1.14M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
64.8k
        tombstone = i;
270
1.14M
      i = (i + ++step) & mask;
271
1.14M
      length++;
272
1.14M
    }
273
274
1.22M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
1.22M
    if (item.is_used ())
277
105k
    {
278
105k
      occupancy--;
279
105k
      population -= item.is_real ();
280
105k
    }
281
282
1.22M
    item.key = std::forward<KK> (key);
283
1.22M
    item.value = std::forward<VV> (value);
284
1.22M
    item.hash = hash;
285
1.22M
    item.set_used (true);
286
1.22M
    item.set_real (true);
287
288
1.22M
    occupancy++;
289
1.22M
    population++;
290
291
1.22M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
541
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
1.22M
    return true;
295
1.22M
  }
bool hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::set_with_hash<hb_serialize_context_t::object_t const*, unsigned int>(hb_serialize_context_t::object_t const*&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
1.29M
  {
250
1.29M
    if (unlikely (!successful)) return false;
251
1.29M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
1.29M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
1.29M
    unsigned int tombstone = (unsigned int) -1;
255
1.29M
    unsigned int i = hash % prime;
256
1.29M
    unsigned length = 0;
257
1.29M
    unsigned step = 0;
258
1.63M
    while (items[i].is_used ())
259
347k
    {
260
347k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
76.1k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
347k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
347k
      i = (i + ++step) & mask;
271
347k
      length++;
272
347k
    }
273
274
1.29M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
1.29M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
1.29M
    item.key = std::forward<KK> (key);
283
1.29M
    item.value = std::forward<VV> (value);
284
1.29M
    item.hash = hash;
285
1.29M
    item.set_used (true);
286
1.29M
    item.set_real (true);
287
288
1.29M
    occupancy++;
289
1.29M
    population++;
290
291
1.29M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
41
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
1.29M
    return true;
295
1.29M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::set_with_hash<unsigned int const&, hb_vector_t<unsigned int, false> >(unsigned int const&, unsigned int, hb_vector_t<unsigned int, false>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::set_with_hash<unsigned int, hb_vector_t<unsigned int, false> >(unsigned int&&, unsigned int, hb_vector_t<unsigned int, false>&&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, unsigned int&>(unsigned int const&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
222M
  {
250
222M
    if (unlikely (!successful)) return false;
251
220M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
220M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
220M
    unsigned int tombstone = (unsigned int) -1;
255
220M
    unsigned int i = hash % prime;
256
220M
    unsigned length = 0;
257
220M
    unsigned step = 0;
258
250M
    while (items[i].is_used ())
259
44.1M
    {
260
44.1M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
44.1M
    items[i] == key)
262
13.9M
      {
263
13.9M
        if (!overwrite)
264
667
    return false;
265
13.9M
        else
266
13.9M
    break;
267
13.9M
      }
268
30.2M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
30.2M
      i = (i + ++step) & mask;
271
30.2M
      length++;
272
30.2M
    }
273
274
220M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
220M
    if (item.is_used ())
277
13.9M
    {
278
13.9M
      occupancy--;
279
13.9M
      population -= item.is_real ();
280
13.9M
    }
281
282
220M
    item.key = std::forward<KK> (key);
283
220M
    item.value = std::forward<VV> (value);
284
220M
    item.hash = hash;
285
220M
    item.set_used (true);
286
220M
    item.set_real (true);
287
288
220M
    occupancy++;
289
220M
    population++;
290
291
220M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
160
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
220M
    return true;
295
220M
  }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int, unsigned int>(unsigned int&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
22.0M
  {
250
22.0M
    if (unlikely (!successful)) return false;
251
22.0M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
22.0M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
22.0M
    unsigned int tombstone = (unsigned int) -1;
255
22.0M
    unsigned int i = hash % prime;
256
22.0M
    unsigned length = 0;
257
22.0M
    unsigned step = 0;
258
32.2M
    while (items[i].is_used ())
259
10.2M
    {
260
10.2M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
10.2M
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
10.2M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
10.2M
      i = (i + ++step) & mask;
271
10.2M
      length++;
272
10.2M
    }
273
274
22.0M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
22.0M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
22.0M
    item.key = std::forward<KK> (key);
283
22.0M
    item.value = std::forward<VV> (value);
284
22.0M
    item.hash = hash;
285
22.0M
    item.set_used (true);
286
22.0M
    item.set_real (true);
287
288
22.0M
    occupancy++;
289
22.0M
    population++;
290
291
22.0M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
85
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
22.0M
    return true;
295
22.0M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int, unsigned int&>(unsigned int&&, unsigned int, unsigned int&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, unsigned int>(unsigned int const&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
8.69M
  {
250
8.69M
    if (unlikely (!successful)) return false;
251
8.69M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
8.69M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
8.69M
    unsigned int tombstone = (unsigned int) -1;
255
8.69M
    unsigned int i = hash % prime;
256
8.69M
    unsigned length = 0;
257
8.69M
    unsigned step = 0;
258
13.2M
    while (items[i].is_used ())
259
11.1M
    {
260
11.1M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
11.1M
    items[i] == key)
262
6.63M
      {
263
6.63M
        if (!overwrite)
264
0
    return false;
265
6.63M
        else
266
6.63M
    break;
267
6.63M
      }
268
4.55M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
4.55M
      i = (i + ++step) & mask;
271
4.55M
      length++;
272
4.55M
    }
273
274
8.69M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
8.69M
    if (item.is_used ())
277
6.63M
    {
278
6.63M
      occupancy--;
279
6.63M
      population -= item.is_real ();
280
6.63M
    }
281
282
8.69M
    item.key = std::forward<KK> (key);
283
8.69M
    item.value = std::forward<VV> (value);
284
8.69M
    item.hash = hash;
285
8.69M
    item.set_used (true);
286
8.69M
    item.set_real (true);
287
288
8.69M
    occupancy++;
289
8.69M
    population++;
290
291
8.69M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
205
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
8.69M
    return true;
295
8.69M
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::set_with_hash<unsigned int const&, hb::unique_ptr<hb_set_t> >(unsigned int const&, unsigned int, hb::unique_ptr<hb_set_t>&&, bool)
Line
Count
Source
249
2.11M
  {
250
2.11M
    if (unlikely (!successful)) return false;
251
2.11M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
2.11M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
2.11M
    unsigned int tombstone = (unsigned int) -1;
255
2.11M
    unsigned int i = hash % prime;
256
2.11M
    unsigned length = 0;
257
2.11M
    unsigned step = 0;
258
4.21M
    while (items[i].is_used ())
259
2.09M
    {
260
2.09M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
2.09M
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
2.09M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
2.09M
      i = (i + ++step) & mask;
271
2.09M
      length++;
272
2.09M
    }
273
274
2.11M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
2.11M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
2.11M
    item.key = std::forward<KK> (key);
283
2.11M
    item.value = std::forward<VV> (value);
284
2.11M
    item.hash = hash;
285
2.11M
    item.set_used (true);
286
2.11M
    item.set_real (true);
287
288
2.11M
    occupancy++;
289
2.11M
    population++;
290
291
2.11M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
201
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
2.11M
    return true;
295
2.11M
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::set_with_hash<unsigned int, hb::unique_ptr<hb_set_t> >(unsigned int&&, unsigned int, hb::unique_ptr<hb_set_t>&&, bool)
Line
Count
Source
249
2.92M
  {
250
2.92M
    if (unlikely (!successful)) return false;
251
2.92M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
2.92M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
2.92M
    unsigned int tombstone = (unsigned int) -1;
255
2.92M
    unsigned int i = hash % prime;
256
2.92M
    unsigned length = 0;
257
2.92M
    unsigned step = 0;
258
3.63M
    while (items[i].is_used ())
259
710k
    {
260
710k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
710k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
710k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
710k
      i = (i + ++step) & mask;
271
710k
      length++;
272
710k
    }
273
274
2.92M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
2.92M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
2.92M
    item.key = std::forward<KK> (key);
283
2.92M
    item.value = std::forward<VV> (value);
284
2.92M
    item.hash = hash;
285
2.92M
    item.set_used (true);
286
2.92M
    item.set_real (true);
287
288
2.92M
    occupancy++;
289
2.92M
    population++;
290
291
2.92M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
2.92M
    return true;
295
2.92M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int, Triple>(unsigned int&&, unsigned int, Triple&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::set_with_hash<hb::shared_ptr<hb_map_t> const&, int>(hb::shared_ptr<hb_map_t> const&, unsigned int, int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::set_with_hash<hb::shared_ptr<hb_map_t>, unsigned int>(hb::shared_ptr<hb_map_t>&&, unsigned int, unsigned int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::set_with_hash<unsigned int const&, hb::shared_ptr<hb_set_t>&>(unsigned int const&, unsigned int, hb::shared_ptr<hb_set_t>&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::set_with_hash<unsigned int, hb::shared_ptr<hb_set_t> >(unsigned int&&, unsigned int, hb::shared_ptr<hb_set_t>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, OT::Feature const*, false>::set_with_hash<unsigned int, OT::Feature const*>(unsigned int&&, unsigned int, OT::Feature const*&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int const&, Triple const&>(unsigned int const&, unsigned int, Triple const&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int const&, Triple&>(unsigned int const&, unsigned int, Triple&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set_with_hash<hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int&>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int, unsigned int&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, bool&>(unsigned int const&, unsigned int, bool&, bool)
Line
Count
Source
249
138k
  {
250
138k
    if (unlikely (!successful)) return false;
251
138k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
137k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
137k
    unsigned int tombstone = (unsigned int) -1;
255
137k
    unsigned int i = hash % prime;
256
137k
    unsigned length = 0;
257
137k
    unsigned step = 0;
258
166k
    while (items[i].is_used ())
259
28.0k
    {
260
28.0k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
28.0k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
28.0k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
28.0k
      i = (i + ++step) & mask;
271
28.0k
      length++;
272
28.0k
    }
273
274
137k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
137k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
137k
    item.key = std::forward<KK> (key);
283
137k
    item.value = std::forward<VV> (value);
284
137k
    item.hash = hash;
285
137k
    item.set_used (true);
286
137k
    item.set_real (true);
287
288
137k
    occupancy++;
289
137k
    population++;
290
291
137k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
137k
    return true;
295
137k
  }
bool hb_hashmap_t<unsigned int, hb_set_t, false>::set_with_hash<unsigned int const&, hb_set_t>(unsigned int const&, unsigned int, hb_set_t&&, bool)
Line
Count
Source
249
31.5k
  {
250
31.5k
    if (unlikely (!successful)) return false;
251
29.3k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
29.3k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
29.3k
    unsigned int tombstone = (unsigned int) -1;
255
29.3k
    unsigned int i = hash % prime;
256
29.3k
    unsigned length = 0;
257
29.3k
    unsigned step = 0;
258
29.6k
    while (items[i].is_used ())
259
339
    {
260
339
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
339
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
339
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
339
      i = (i + ++step) & mask;
271
339
      length++;
272
339
    }
273
274
29.3k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
29.3k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
29.3k
    item.key = std::forward<KK> (key);
283
29.3k
    item.value = std::forward<VV> (value);
284
29.3k
    item.hash = hash;
285
29.3k
    item.set_used (true);
286
29.3k
    item.set_real (true);
287
288
29.3k
    occupancy++;
289
29.3k
    population++;
290
291
29.3k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
29.3k
    return true;
295
29.3k
  }
bool hb_hashmap_t<unsigned int, hb_set_t, false>::set_with_hash<unsigned int, hb_set_t>(unsigned int&&, unsigned int, hb_set_t&&, bool)
Line
Count
Source
249
255
  {
250
255
    if (unlikely (!successful)) return false;
251
255
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
255
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
255
    unsigned int tombstone = (unsigned int) -1;
255
255
    unsigned int i = hash % prime;
256
255
    unsigned length = 0;
257
255
    unsigned step = 0;
258
290
    while (items[i].is_used ())
259
35
    {
260
35
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
35
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
35
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
35
      i = (i + ++step) & mask;
271
35
      length++;
272
35
    }
273
274
255
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
255
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
255
    item.key = std::forward<KK> (key);
283
255
    item.value = std::forward<VV> (value);
284
255
    item.hash = hash;
285
255
    item.set_used (true);
286
255
    item.set_real (true);
287
288
255
    occupancy++;
289
255
    population++;
290
291
255
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
255
    return true;
295
255
  }
bool hb_hashmap_t<unsigned int, face_table_info_t, false>::set_with_hash<unsigned int const&, face_table_info_t>(unsigned int const&, unsigned int, face_table_info_t&&, bool)
Line
Count
Source
249
161k
  {
250
161k
    if (unlikely (!successful)) return false;
251
161k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
161k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
161k
    unsigned int tombstone = (unsigned int) -1;
255
161k
    unsigned int i = hash % prime;
256
161k
    unsigned length = 0;
257
161k
    unsigned step = 0;
258
231k
    while (items[i].is_used ())
259
73.4k
    {
260
73.4k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
73.4k
    items[i] == key)
262
3.52k
      {
263
3.52k
        if (!overwrite)
264
0
    return false;
265
3.52k
        else
266
3.52k
    break;
267
3.52k
      }
268
69.9k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
69.9k
      i = (i + ++step) & mask;
271
69.9k
      length++;
272
69.9k
    }
273
274
161k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
161k
    if (item.is_used ())
277
3.52k
    {
278
3.52k
      occupancy--;
279
3.52k
      population -= item.is_real ();
280
3.52k
    }
281
282
161k
    item.key = std::forward<KK> (key);
283
161k
    item.value = std::forward<VV> (value);
284
161k
    item.hash = hash;
285
161k
    item.set_used (true);
286
161k
    item.set_real (true);
287
288
161k
    occupancy++;
289
161k
    population++;
290
291
161k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
6
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
161k
    return true;
295
161k
  }
bool hb_hashmap_t<unsigned int, face_table_info_t, false>::set_with_hash<unsigned int, face_table_info_t>(unsigned int&&, unsigned int, face_table_info_t&&, bool)
Line
Count
Source
249
97.2k
  {
250
97.2k
    if (unlikely (!successful)) return false;
251
97.2k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
97.2k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
97.2k
    unsigned int tombstone = (unsigned int) -1;
255
97.2k
    unsigned int i = hash % prime;
256
97.2k
    unsigned length = 0;
257
97.2k
    unsigned step = 0;
258
120k
    while (items[i].is_used ())
259
23.3k
    {
260
23.3k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
23.3k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
23.3k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
23.3k
      i = (i + ++step) & mask;
271
23.3k
      length++;
272
23.3k
    }
273
274
97.2k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
97.2k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
97.2k
    item.key = std::forward<KK> (key);
283
97.2k
    item.value = std::forward<VV> (value);
284
97.2k
    item.hash = hash;
285
97.2k
    item.set_used (true);
286
97.2k
    item.set_real (true);
287
288
97.2k
    occupancy++;
289
97.2k
    population++;
290
291
97.2k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
97.2k
    return true;
295
97.2k
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set_with_hash<unsigned int const&, int>(unsigned int const&, unsigned int, int&&, bool)
Line
Count
Source
249
581k
  {
250
581k
    if (unlikely (!successful)) return false;
251
581k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
581k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
581k
    unsigned int tombstone = (unsigned int) -1;
255
581k
    unsigned int i = hash % prime;
256
581k
    unsigned length = 0;
257
581k
    unsigned step = 0;
258
718k
    while (items[i].is_used ())
259
224k
    {
260
224k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
224k
    items[i] == key)
262
88.1k
      {
263
88.1k
        if (!overwrite)
264
0
    return false;
265
88.1k
        else
266
88.1k
    break;
267
88.1k
      }
268
136k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
1.48k
        tombstone = i;
270
136k
      i = (i + ++step) & mask;
271
136k
      length++;
272
136k
    }
273
274
581k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
581k
    if (item.is_used ())
277
89.6k
    {
278
89.6k
      occupancy--;
279
89.6k
      population -= item.is_real ();
280
89.6k
    }
281
282
581k
    item.key = std::forward<KK> (key);
283
581k
    item.value = std::forward<VV> (value);
284
581k
    item.hash = hash;
285
581k
    item.set_used (true);
286
581k
    item.set_real (true);
287
288
581k
    occupancy++;
289
581k
    population++;
290
291
581k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
5
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
581k
    return true;
295
581k
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set_with_hash<unsigned int, unsigned int>(unsigned int&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
156k
  {
250
156k
    if (unlikely (!successful)) return false;
251
156k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
156k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
156k
    unsigned int tombstone = (unsigned int) -1;
255
156k
    unsigned int i = hash % prime;
256
156k
    unsigned length = 0;
257
156k
    unsigned step = 0;
258
185k
    while (items[i].is_used ())
259
28.8k
    {
260
28.8k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
28.8k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
28.8k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
28.8k
      i = (i + ++step) & mask;
271
28.8k
      length++;
272
28.8k
    }
273
274
156k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
156k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
156k
    item.key = std::forward<KK> (key);
283
156k
    item.value = std::forward<VV> (value);
284
156k
    item.hash = hash;
285
156k
    item.set_used (true);
286
156k
    item.set_real (true);
287
288
156k
    occupancy++;
289
156k
    population++;
290
291
156k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
156k
    return true;
295
156k
  }
bool hb_hashmap_t<graph::overflow_record_t*, bool, false>::set_with_hash<graph::overflow_record_t*, bool>(graph::overflow_record_t*&&, unsigned int, bool&&, bool)
Line
Count
Source
249
23.6M
  {
250
23.6M
    if (unlikely (!successful)) return false;
251
23.6M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
23.6M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
23.6M
    unsigned int tombstone = (unsigned int) -1;
255
23.6M
    unsigned int i = hash % prime;
256
23.6M
    unsigned length = 0;
257
23.6M
    unsigned step = 0;
258
34.8M
    while (items[i].is_used ())
259
11.1M
    {
260
11.1M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
11.1M
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
11.1M
      i = (i + ++step) & mask;
271
11.1M
      length++;
272
11.1M
    }
273
274
23.6M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
23.6M
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
23.6M
    item.key = std::forward<KK> (key);
283
23.6M
    item.value = std::forward<VV> (value);
284
23.6M
    item.hash = hash;
285
23.6M
    item.set_used (true);
286
23.6M
    item.set_real (true);
287
288
23.6M
    occupancy++;
289
23.6M
    population++;
290
291
23.6M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
258
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
23.6M
    return true;
295
23.6M
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set_with_hash<unsigned int const&, unsigned int&>(unsigned int const&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
16.9k
  {
250
16.9k
    if (unlikely (!successful)) return false;
251
16.9k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
16.9k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
16.9k
    unsigned int tombstone = (unsigned int) -1;
255
16.9k
    unsigned int i = hash % prime;
256
16.9k
    unsigned length = 0;
257
16.9k
    unsigned step = 0;
258
23.9k
    while (items[i].is_used ())
259
6.96k
    {
260
6.96k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
6.96k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
6.96k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
6.96k
      i = (i + ++step) & mask;
271
6.96k
      length++;
272
6.96k
    }
273
274
16.9k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
16.9k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
16.9k
    item.key = std::forward<KK> (key);
283
16.9k
    item.value = std::forward<VV> (value);
284
16.9k
    item.hash = hash;
285
16.9k
    item.set_used (true);
286
16.9k
    item.set_real (true);
287
288
16.9k
    occupancy++;
289
16.9k
    population++;
290
291
16.9k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
3
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
16.9k
    return true;
295
16.9k
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set_with_hash<unsigned int const&, unsigned int const&>(unsigned int const&, unsigned int, unsigned int const&, bool)
Line
Count
Source
249
208
  {
250
208
    if (unlikely (!successful)) return false;
251
208
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
208
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
208
    unsigned int tombstone = (unsigned int) -1;
255
208
    unsigned int i = hash % prime;
256
208
    unsigned length = 0;
257
208
    unsigned step = 0;
258
208
    while (items[i].is_used ())
259
0
    {
260
0
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
208
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
208
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
208
    item.key = std::forward<KK> (key);
283
208
    item.value = std::forward<VV> (value);
284
208
    item.hash = hash;
285
208
    item.set_used (true);
286
208
    item.set_real (true);
287
288
208
    occupancy++;
289
208
    population++;
290
291
208
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
208
    return true;
295
208
  }
bool hb_hashmap_t<unsigned int, graph::Lookup*, false>::set_with_hash<unsigned int const&, graph::Lookup*&>(unsigned int const&, unsigned int, graph::Lookup*&, bool)
Line
Count
Source
249
8.51k
  {
250
8.51k
    if (unlikely (!successful)) return false;
251
8.51k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
8.51k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
8.51k
    unsigned int tombstone = (unsigned int) -1;
255
8.51k
    unsigned int i = hash % prime;
256
8.51k
    unsigned length = 0;
257
8.51k
    unsigned step = 0;
258
9.21k
    while (items[i].is_used ())
259
1.92k
    {
260
1.92k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
1.92k
    items[i] == key)
262
1.23k
      {
263
1.23k
        if (!overwrite)
264
0
    return false;
265
1.23k
        else
266
1.23k
    break;
267
1.23k
      }
268
692
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
692
      i = (i + ++step) & mask;
271
692
      length++;
272
692
    }
273
274
8.51k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
8.51k
    if (item.is_used ())
277
1.23k
    {
278
1.23k
      occupancy--;
279
1.23k
      population -= item.is_real ();
280
1.23k
    }
281
282
8.51k
    item.key = std::forward<KK> (key);
283
8.51k
    item.value = std::forward<VV> (value);
284
8.51k
    item.hash = hash;
285
8.51k
    item.set_used (true);
286
8.51k
    item.set_real (true);
287
288
8.51k
    occupancy++;
289
8.51k
    population++;
290
291
8.51k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
8.51k
    return true;
295
8.51k
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, graph::Lookup*, false>::set_with_hash<unsigned int, graph::Lookup*>(unsigned int&&, unsigned int, graph::Lookup*&&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, int>(unsigned int const&, unsigned int, int&&, bool)
Line
Count
Source
249
394k
  {
250
394k
    if (unlikely (!successful)) return false;
251
394k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
394k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
394k
    unsigned int tombstone = (unsigned int) -1;
255
394k
    unsigned int i = hash % prime;
256
394k
    unsigned length = 0;
257
394k
    unsigned step = 0;
258
638k
    while (items[i].is_used ())
259
243k
    {
260
243k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
243k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
243k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
243k
      i = (i + ++step) & mask;
271
243k
      length++;
272
243k
    }
273
274
394k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
394k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
394k
    item.key = std::forward<KK> (key);
283
394k
    item.value = std::forward<VV> (value);
284
394k
    item.hash = hash;
285
394k
    item.set_used (true);
286
394k
    item.set_real (true);
287
288
394k
    occupancy++;
289
394k
    population++;
290
291
394k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
21
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
394k
    return true;
295
394k
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::set_with_hash<unsigned int const&, hb_vector_t<unsigned int, false> >(unsigned int const&, unsigned int, hb_vector_t<unsigned int, false>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::set_with_hash<unsigned int, hb_vector_t<unsigned int, false> >(unsigned int&&, unsigned int, hb_vector_t<unsigned int, false>&&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int, int>(unsigned int&&, unsigned int, int&&, bool)
Line
Count
Source
249
15.9k
  {
250
15.9k
    if (unlikely (!successful)) return false;
251
15.9k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
15.9k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
15.9k
    unsigned int tombstone = (unsigned int) -1;
255
15.9k
    unsigned int i = hash % prime;
256
15.9k
    unsigned length = 0;
257
15.9k
    unsigned step = 0;
258
15.9k
    while (items[i].is_used ())
259
0
    {
260
0
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
15.9k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
15.9k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
15.9k
    item.key = std::forward<KK> (key);
283
15.9k
    item.value = std::forward<VV> (value);
284
15.9k
    item.hash = hash;
285
15.9k
    item.set_used (true);
286
15.9k
    item.set_real (true);
287
288
15.9k
    occupancy++;
289
15.9k
    population++;
290
291
15.9k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
15.9k
    return true;
295
15.9k
  }
bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int const&, Triple>(unsigned int const&, unsigned int, Triple&&, bool)
Line
Count
Source
249
1.01M
  {
250
1.01M
    if (unlikely (!successful)) return false;
251
1.01M
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
1.01M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
1.01M
    unsigned int tombstone = (unsigned int) -1;
255
1.01M
    unsigned int i = hash % prime;
256
1.01M
    unsigned length = 0;
257
1.01M
    unsigned step = 0;
258
1.01M
    while (items[i].is_used ())
259
791
    {
260
791
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
791
    items[i] == key)
262
771
      {
263
771
        if (!overwrite)
264
0
    return false;
265
771
        else
266
771
    break;
267
771
      }
268
20
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
20
      i = (i + ++step) & mask;
271
20
      length++;
272
20
    }
273
274
1.01M
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
1.01M
    if (item.is_used ())
277
771
    {
278
771
      occupancy--;
279
771
      population -= item.is_real ();
280
771
    }
281
282
1.01M
    item.key = std::forward<KK> (key);
283
1.01M
    item.value = std::forward<VV> (value);
284
1.01M
    item.hash = hash;
285
1.01M
    item.set_used (true);
286
1.01M
    item.set_real (true);
287
288
1.01M
    occupancy++;
289
1.01M
    population++;
290
291
1.01M
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
1.01M
    return true;
295
1.01M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int, Triple>(unsigned int&&, unsigned int, Triple&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::set_with_hash<hb::shared_ptr<hb_map_t> const&, int>(hb::shared_ptr<hb_map_t> const&, unsigned int, int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::set_with_hash<hb::shared_ptr<hb_map_t>, unsigned int>(hb::shared_ptr<hb_map_t>&&, unsigned int, unsigned int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::set_with_hash<unsigned int const&, hb::shared_ptr<hb_set_t>&>(unsigned int const&, unsigned int, hb::shared_ptr<hb_set_t>&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::set_with_hash<unsigned int, hb::shared_ptr<hb_set_t> >(unsigned int&&, unsigned int, hb::shared_ptr<hb_set_t>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, OT::Feature const*, false>::set_with_hash<unsigned int, OT::Feature const*>(unsigned int&&, unsigned int, OT::Feature const*&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int const&, Triple const&>(unsigned int const&, unsigned int, Triple const&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set_with_hash<unsigned int const&, Triple&>(unsigned int const&, unsigned int, Triple&, bool)
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set_with_hash<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int>(hb_hashmap_t<unsigned int, Triple, false> const*&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
16.0k
  {
250
16.0k
    if (unlikely (!successful)) return false;
251
16.0k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
16.0k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
16.0k
    unsigned int tombstone = (unsigned int) -1;
255
16.0k
    unsigned int i = hash % prime;
256
16.0k
    unsigned length = 0;
257
16.0k
    unsigned step = 0;
258
21.6k
    while (items[i].is_used ())
259
5.59k
    {
260
5.59k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
5.59k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
5.59k
      i = (i + ++step) & mask;
271
5.59k
      length++;
272
5.59k
    }
273
274
16.0k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
16.0k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
16.0k
    item.key = std::forward<KK> (key);
283
16.0k
    item.value = std::forward<VV> (value);
284
16.0k
    item.hash = hash;
285
16.0k
    item.set_used (true);
286
16.0k
    item.set_real (true);
287
288
16.0k
    occupancy++;
289
16.0k
    population++;
290
291
16.0k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
2
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
16.0k
    return true;
295
16.0k
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set_with_hash<hb_hashmap_t<unsigned int, Triple, false> const* const&, int>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int, int&&, bool)
Line
Count
Source
249
5.45k
  {
250
5.45k
    if (unlikely (!successful)) return false;
251
5.45k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
5.45k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
5.45k
    unsigned int tombstone = (unsigned int) -1;
255
5.45k
    unsigned int i = hash % prime;
256
5.45k
    unsigned length = 0;
257
5.45k
    unsigned step = 0;
258
10.3k
    while (items[i].is_used ())
259
4.92k
    {
260
4.92k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
4.92k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
4.92k
      i = (i + ++step) & mask;
271
4.92k
      length++;
272
4.92k
    }
273
274
5.45k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
5.45k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
5.45k
    item.key = std::forward<KK> (key);
283
5.45k
    item.value = std::forward<VV> (value);
284
5.45k
    item.hash = hash;
285
5.45k
    item.set_used (true);
286
5.45k
    item.set_real (true);
287
288
5.45k
    occupancy++;
289
5.45k
    population++;
290
291
5.45k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
4
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
5.45k
    return true;
295
5.45k
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set_with_hash<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int&>(hb_hashmap_t<unsigned int, Triple, false> const*&&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
2.69k
  {
250
2.69k
    if (unlikely (!successful)) return false;
251
2.69k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
2.69k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
2.69k
    unsigned int tombstone = (unsigned int) -1;
255
2.69k
    unsigned int i = hash % prime;
256
2.69k
    unsigned length = 0;
257
2.69k
    unsigned step = 0;
258
5.14k
    while (items[i].is_used ())
259
2.44k
    {
260
2.44k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
2.44k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
2.44k
      i = (i + ++step) & mask;
271
2.44k
      length++;
272
2.44k
    }
273
274
2.69k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
2.69k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
2.69k
    item.key = std::forward<KK> (key);
283
2.69k
    item.value = std::forward<VV> (value);
284
2.69k
    item.hash = hash;
285
2.69k
    item.set_used (true);
286
2.69k
    item.set_real (true);
287
288
2.69k
    occupancy++;
289
2.69k
    population++;
290
291
2.69k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
1
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
2.69k
    return true;
295
2.69k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set_with_hash<hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int&>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int, unsigned int&, bool)
bool hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::set_with_hash<unsigned int, hb_vector_t<int, false> const*>(unsigned int&&, unsigned int, hb_vector_t<int, false> const*&&, bool)
Line
Count
Source
249
50.7k
  {
250
50.7k
    if (unlikely (!successful)) return false;
251
50.7k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
50.7k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
50.7k
    unsigned int tombstone = (unsigned int) -1;
255
50.7k
    unsigned int i = hash % prime;
256
50.7k
    unsigned length = 0;
257
50.7k
    unsigned step = 0;
258
60.1k
    while (items[i].is_used ())
259
9.38k
    {
260
9.38k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
9.38k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
9.38k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
9.38k
      i = (i + ++step) & mask;
271
9.38k
      length++;
272
9.38k
    }
273
274
50.7k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
50.7k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
50.7k
    item.key = std::forward<KK> (key);
283
50.7k
    item.value = std::forward<VV> (value);
284
50.7k
    item.hash = hash;
285
50.7k
    item.set_used (true);
286
50.7k
    item.set_real (true);
287
288
50.7k
    occupancy++;
289
50.7k
    population++;
290
291
50.7k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
1
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
50.7k
    return true;
295
50.7k
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<int, false> const*, int>(hb_vector_t<int, false> const*&&, unsigned int, int&&, bool)
Line
Count
Source
249
11.5k
  {
250
11.5k
    if (unlikely (!successful)) return false;
251
11.5k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
11.5k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
11.5k
    unsigned int tombstone = (unsigned int) -1;
255
11.5k
    unsigned int i = hash % prime;
256
11.5k
    unsigned length = 0;
257
11.5k
    unsigned step = 0;
258
23.6k
    while (items[i].is_used ())
259
12.0k
    {
260
12.0k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
15
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
12.0k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
12.0k
      i = (i + ++step) & mask;
271
12.0k
      length++;
272
12.0k
    }
273
274
11.5k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
11.5k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
11.5k
    item.key = std::forward<KK> (key);
283
11.5k
    item.value = std::forward<VV> (value);
284
11.5k
    item.hash = hash;
285
11.5k
    item.set_used (true);
286
11.5k
    item.set_real (true);
287
288
11.5k
    occupancy++;
289
11.5k
    population++;
290
291
11.5k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
1
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
11.5k
    return true;
295
11.5k
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<int, false> const*, unsigned int>(hb_vector_t<int, false> const*&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
31.2k
  {
250
31.2k
    if (unlikely (!successful)) return false;
251
31.2k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
31.2k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
31.2k
    unsigned int tombstone = (unsigned int) -1;
255
31.2k
    unsigned int i = hash % prime;
256
31.2k
    unsigned length = 0;
257
31.2k
    unsigned step = 0;
258
38.6k
    while (items[i].is_used ())
259
7.35k
    {
260
7.35k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
12
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
7.35k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
7.35k
      i = (i + ++step) & mask;
271
7.35k
      length++;
272
7.35k
    }
273
274
31.2k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
31.2k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
31.2k
    item.key = std::forward<KK> (key);
283
31.2k
    item.value = std::forward<VV> (value);
284
31.2k
    item.hash = hash;
285
31.2k
    item.set_used (true);
286
31.2k
    item.set_real (true);
287
288
31.2k
    occupancy++;
289
31.2k
    population++;
290
291
31.2k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
31.2k
    return true;
295
31.2k
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<int, false> const* const&, unsigned int&>(hb_vector_t<int, false> const* const&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
11.5k
  {
250
11.5k
    if (unlikely (!successful)) return false;
251
11.5k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
11.5k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
11.5k
    unsigned int tombstone = (unsigned int) -1;
255
11.5k
    unsigned int i = hash % prime;
256
11.5k
    unsigned length = 0;
257
11.5k
    unsigned step = 0;
258
24.0k
    while (items[i].is_used ())
259
12.4k
    {
260
12.4k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
15
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
12.4k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
12.4k
      i = (i + ++step) & mask;
271
12.4k
      length++;
272
12.4k
    }
273
274
11.5k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
11.5k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
11.5k
    item.key = std::forward<KK> (key);
283
11.5k
    item.value = std::forward<VV> (value);
284
11.5k
    item.hash = hash;
285
11.5k
    item.set_used (true);
286
11.5k
    item.set_real (true);
287
288
11.5k
    occupancy++;
289
11.5k
    population++;
290
291
11.5k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
2
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
11.5k
    return true;
295
11.5k
  }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set_with_hash<unsigned int const&, OT::OffsetTo<OT::ClipBox, OT::NumType<true, unsigned int, 3u>, void, true> const&>(unsigned int const&, unsigned int, OT::OffsetTo<OT::ClipBox, OT::NumType<true, unsigned int, 3u>, void, true> const&, bool)
Line
Count
Source
249
3.61k
  {
250
3.61k
    if (unlikely (!successful)) return false;
251
3.61k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
3.61k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
3.61k
    unsigned int tombstone = (unsigned int) -1;
255
3.61k
    unsigned int i = hash % prime;
256
3.61k
    unsigned length = 0;
257
3.61k
    unsigned step = 0;
258
4.20k
    while (items[i].is_used ())
259
2.60k
    {
260
2.60k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
2.60k
    items[i] == key)
262
2.01k
      {
263
2.01k
        if (!overwrite)
264
0
    return false;
265
2.01k
        else
266
2.01k
    break;
267
2.01k
      }
268
590
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
590
      i = (i + ++step) & mask;
271
590
      length++;
272
590
    }
273
274
3.61k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
3.61k
    if (item.is_used ())
277
2.01k
    {
278
2.01k
      occupancy--;
279
2.01k
      population -= item.is_real ();
280
2.01k
    }
281
282
3.61k
    item.key = std::forward<KK> (key);
283
3.61k
    item.value = std::forward<VV> (value);
284
3.61k
    item.hash = hash;
285
3.61k
    item.set_used (true);
286
3.61k
    item.set_real (true);
287
288
3.61k
    occupancy++;
289
3.61k
    population++;
290
291
3.61k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
3.61k
    return true;
295
3.61k
  }
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set_with_hash<unsigned int&, hb_pair_t<unsigned int, int&> >(unsigned int&, unsigned int, hb_pair_t<unsigned int, int&>&&, bool)
Line
Count
Source
249
163k
  {
250
163k
    if (unlikely (!successful)) return false;
251
163k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
163k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
163k
    unsigned int tombstone = (unsigned int) -1;
255
163k
    unsigned int i = hash % prime;
256
163k
    unsigned length = 0;
257
163k
    unsigned step = 0;
258
249k
    while (items[i].is_used ())
259
196k
    {
260
196k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
196k
    items[i] == key)
262
110k
      {
263
110k
        if (!overwrite)
264
0
    return false;
265
110k
        else
266
110k
    break;
267
110k
      }
268
85.8k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
85.8k
      i = (i + ++step) & mask;
271
85.8k
      length++;
272
85.8k
    }
273
274
163k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
163k
    if (item.is_used ())
277
110k
    {
278
110k
      occupancy--;
279
110k
      population -= item.is_real ();
280
110k
    }
281
282
163k
    item.key = std::forward<KK> (key);
283
163k
    item.value = std::forward<VV> (value);
284
163k
    item.hash = hash;
285
163k
    item.set_used (true);
286
163k
    item.set_real (true);
287
288
163k
    occupancy++;
289
163k
    population++;
290
291
163k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
10
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
163k
    return true;
295
163k
  }
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set_with_hash<unsigned int, hb_pair_t<unsigned int, int> >(unsigned int&&, unsigned int, hb_pair_t<unsigned int, int>&&, bool)
Line
Count
Source
249
220k
  {
250
220k
    if (unlikely (!successful)) return false;
251
220k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
220k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
220k
    unsigned int tombstone = (unsigned int) -1;
255
220k
    unsigned int i = hash % prime;
256
220k
    unsigned length = 0;
257
220k
    unsigned step = 0;
258
267k
    while (items[i].is_used ())
259
47.3k
    {
260
47.3k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
47.3k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
47.3k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
47.3k
      i = (i + ++step) & mask;
271
47.3k
      length++;
272
47.3k
    }
273
274
220k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
220k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
220k
    item.key = std::forward<KK> (key);
283
220k
    item.value = std::forward<VV> (value);
284
220k
    item.hash = hash;
285
220k
    item.set_used (true);
286
220k
    item.set_real (true);
287
288
220k
    occupancy++;
289
220k
    population++;
290
291
220k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
220k
    return true;
295
220k
  }
bool hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::set_with_hash<hb_ot_name_record_ids_t const&, int>(hb_ot_name_record_ids_t const&, unsigned int, int&&, bool)
Line
Count
Source
249
7.01k
  {
250
7.01k
    if (unlikely (!successful)) return false;
251
7.01k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
7.01k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
7.01k
    unsigned int tombstone = (unsigned int) -1;
255
7.01k
    unsigned int i = hash % prime;
256
7.01k
    unsigned length = 0;
257
7.01k
    unsigned step = 0;
258
8.87k
    while (items[i].is_used ())
259
1.88k
    {
260
1.88k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
32
    items[i] == key)
262
32
      {
263
32
        if (!overwrite)
264
0
    return false;
265
32
        else
266
32
    break;
267
32
      }
268
1.85k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
1.85k
      i = (i + ++step) & mask;
271
1.85k
      length++;
272
1.85k
    }
273
274
7.01k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
7.01k
    if (item.is_used ())
277
32
    {
278
32
      occupancy--;
279
32
      population -= item.is_real ();
280
32
    }
281
282
7.01k
    item.key = std::forward<KK> (key);
283
7.01k
    item.value = std::forward<VV> (value);
284
7.01k
    item.hash = hash;
285
7.01k
    item.set_used (true);
286
7.01k
    item.set_real (true);
287
288
7.01k
    occupancy++;
289
7.01k
    population++;
290
291
7.01k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
7.01k
    return true;
295
7.01k
  }
bool hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::set_with_hash<hb_ot_name_record_ids_t, unsigned int>(hb_ot_name_record_ids_t&&, unsigned int, unsigned int&&, bool)
Line
Count
Source
249
5.80k
  {
250
5.80k
    if (unlikely (!successful)) return false;
251
5.80k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
5.80k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
5.80k
    unsigned int tombstone = (unsigned int) -1;
255
5.80k
    unsigned int i = hash % prime;
256
5.80k
    unsigned length = 0;
257
5.80k
    unsigned step = 0;
258
6.35k
    while (items[i].is_used ())
259
554
    {
260
554
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
554
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
554
      i = (i + ++step) & mask;
271
554
      length++;
272
554
    }
273
274
5.80k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
5.80k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
5.80k
    item.key = std::forward<KK> (key);
283
5.80k
    item.value = std::forward<VV> (value);
284
5.80k
    item.hash = hash;
285
5.80k
    item.set_used (true);
286
5.80k
    item.set_real (true);
287
288
5.80k
    occupancy++;
289
5.80k
    population++;
290
291
5.80k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
5.80k
    return true;
295
5.80k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::set_with_hash<hb_ot_name_record_ids_t, hb_array_t<char const>&>(hb_ot_name_record_ids_t&&, unsigned int, hb_array_t<char const>&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::set_with_hash<hb_ot_name_record_ids_t, hb_array_t<char const> >(hb_ot_name_record_ids_t&&, unsigned int, hb_array_t<char const>&&, bool)
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::set_with_hash<unsigned int, hb::unique_ptr<hb_blob_t> >(unsigned int&&, unsigned int, hb::unique_ptr<hb_blob_t>&&, bool)
Line
Count
Source
249
503k
  {
250
503k
    if (unlikely (!successful)) return false;
251
500k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
500k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
500k
    unsigned int tombstone = (unsigned int) -1;
255
500k
    unsigned int i = hash % prime;
256
500k
    unsigned length = 0;
257
500k
    unsigned step = 0;
258
762k
    while (items[i].is_used ())
259
261k
    {
260
261k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
261k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
261k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
261k
      i = (i + ++step) & mask;
271
261k
      length++;
272
261k
    }
273
274
500k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
500k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
500k
    item.key = std::forward<KK> (key);
283
500k
    item.value = std::forward<VV> (value);
284
500k
    item.hash = hash;
285
500k
    item.set_used (true);
286
500k
    item.set_real (true);
287
288
500k
    occupancy++;
289
500k
    population++;
290
291
500k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
500k
    return true;
295
500k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::set_with_hash<hb_array_t<char const>, unsigned int>(hb_array_t<char const>&&, unsigned int, unsigned int&&, bool)
bool hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::set_with_hash<hb_array_t<char const> const&, unsigned int&>(hb_array_t<char const> const&, unsigned int, unsigned int&, bool)
Line
Count
Source
249
939
  {
250
939
    if (unlikely (!successful)) return false;
251
939
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
939
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
939
    unsigned int tombstone = (unsigned int) -1;
255
939
    unsigned int i = hash % prime;
256
939
    unsigned length = 0;
257
939
    unsigned step = 0;
258
1.02k
    while (items[i].is_used ())
259
82
    {
260
82
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
82
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
82
      i = (i + ++step) & mask;
271
82
      length++;
272
82
    }
273
274
939
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
939
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
939
    item.key = std::forward<KK> (key);
283
939
    item.value = std::forward<VV> (value);
284
939
    item.hash = hash;
285
939
    item.set_used (true);
286
939
    item.set_real (true);
287
288
939
    occupancy++;
289
939
    population++;
290
291
939
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
939
    return true;
295
939
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<bool, false> const* const&, unsigned int>(hb_vector_t<bool, false> const* const&, unsigned int, unsigned int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<bool, false> const*, unsigned int>(hb_vector_t<bool, false> const*&&, unsigned int, unsigned int&&, bool)
bool hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::set_with_hash<hb_vector_t<bool, false> const* const&, hb_vector_t<unsigned char, false> >(hb_vector_t<bool, false> const* const&, unsigned int, hb_vector_t<unsigned char, false>&&, bool)
Line
Count
Source
249
43
  {
250
43
    if (unlikely (!successful)) return false;
251
43
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
43
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
43
    unsigned int tombstone = (unsigned int) -1;
255
43
    unsigned int i = hash % prime;
256
43
    unsigned length = 0;
257
43
    unsigned step = 0;
258
43
    while (items[i].is_used ())
259
0
    {
260
0
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
43
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
43
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
43
    item.key = std::forward<KK> (key);
283
43
    item.value = std::forward<VV> (value);
284
43
    item.hash = hash;
285
43
    item.set_used (true);
286
43
    item.set_real (true);
287
288
43
    occupancy++;
289
43
    population++;
290
291
43
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
43
    return true;
295
43
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::set_with_hash<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false> >(hb_vector_t<bool, false> const*&&, unsigned int, hb_vector_t<unsigned char, false>&&, bool)
bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<bool, false> const* const&, int>(hb_vector_t<bool, false> const* const&, unsigned int, int&&, bool)
Line
Count
Source
249
43
  {
250
43
    if (unlikely (!successful)) return false;
251
43
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
43
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
43
    unsigned int tombstone = (unsigned int) -1;
255
43
    unsigned int i = hash % prime;
256
43
    unsigned length = 0;
257
43
    unsigned step = 0;
258
43
    while (items[i].is_used ())
259
0
    {
260
0
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
43
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
43
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
43
    item.key = std::forward<KK> (key);
283
43
    item.value = std::forward<VV> (value);
284
43
    item.hash = hash;
285
43
    item.set_used (true);
286
43
    item.set_real (true);
287
288
43
    occupancy++;
289
43
    population++;
290
291
43
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
43
    return true;
295
43
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::set_with_hash<hb_ot_name_record_ids_t const&, hb_array_t<char const> >(hb_ot_name_record_ids_t const&, unsigned int, hb_array_t<char const>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::set_with_hash<unsigned int const&, hb_pair_t<OT::Feature const*, void const*&> >(unsigned int const&, unsigned int, hb_pair_t<OT::Feature const*, void const*&>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::set_with_hash<unsigned int, hb_pair_t<void const*, void const*> >(unsigned int&&, unsigned int, hb_pair_t<void const*, void const*>&&, bool)
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set_with_hash<unsigned int const&, hb_pair_t<unsigned int, int> >(unsigned int const&, unsigned int, hb_pair_t<unsigned int, int>&&, bool)
Line
Count
Source
249
100k
  {
250
100k
    if (unlikely (!successful)) return false;
251
100k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
100k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
100k
    unsigned int tombstone = (unsigned int) -1;
255
100k
    unsigned int i = hash % prime;
256
100k
    unsigned length = 0;
257
100k
    unsigned step = 0;
258
208k
    while (items[i].is_used ())
259
108k
    {
260
108k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
108k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
108k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
108k
      i = (i + ++step) & mask;
271
108k
      length++;
272
108k
    }
273
274
100k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
100k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
100k
    item.key = std::forward<KK> (key);
283
100k
    item.value = std::forward<VV> (value);
284
100k
    item.hash = hash;
285
100k
    item.set_used (true);
286
100k
    item.set_real (true);
287
288
100k
    occupancy++;
289
100k
    population++;
290
291
100k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
9
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
100k
    return true;
295
100k
  }
bool hb_hashmap_t<unsigned int, TripleDistances, false>::set_with_hash<unsigned int const&, TripleDistances>(unsigned int const&, unsigned int, TripleDistances&&, bool)
Line
Count
Source
249
1.78k
  {
250
1.78k
    if (unlikely (!successful)) return false;
251
1.78k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
1.78k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
1.78k
    unsigned int tombstone = (unsigned int) -1;
255
1.78k
    unsigned int i = hash % prime;
256
1.78k
    unsigned length = 0;
257
1.78k
    unsigned step = 0;
258
1.78k
    while (items[i].is_used ())
259
376
    {
260
376
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
376
    items[i] == key)
262
376
      {
263
376
        if (!overwrite)
264
0
    return false;
265
376
        else
266
376
    break;
267
376
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
1.78k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
1.78k
    if (item.is_used ())
277
376
    {
278
376
      occupancy--;
279
376
      population -= item.is_real ();
280
376
    }
281
282
1.78k
    item.key = std::forward<KK> (key);
283
1.78k
    item.value = std::forward<VV> (value);
284
1.78k
    item.hash = hash;
285
1.78k
    item.set_used (true);
286
1.78k
    item.set_real (true);
287
288
1.78k
    occupancy++;
289
1.78k
    population++;
290
291
1.78k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
1.78k
    return true;
295
1.78k
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, TripleDistances, false>::set_with_hash<unsigned int, TripleDistances>(unsigned int&&, unsigned int, TripleDistances&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set_with_hash<unsigned int const&, hb_pair_t<unsigned int, int&> >(unsigned int const&, unsigned int, hb_pair_t<unsigned int, int&>&&, bool)
bool hb_hashmap_t<unsigned int, contour_point_vector_t, false>::set_with_hash<unsigned int const&, contour_point_vector_t&>(unsigned int const&, unsigned int, contour_point_vector_t&, bool)
Line
Count
Source
249
16.4k
  {
250
16.4k
    if (unlikely (!successful)) return false;
251
16.4k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
16.4k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
16.4k
    unsigned int tombstone = (unsigned int) -1;
255
16.4k
    unsigned int i = hash % prime;
256
16.4k
    unsigned length = 0;
257
16.4k
    unsigned step = 0;
258
23.9k
    while (items[i].is_used ())
259
7.48k
    {
260
7.48k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
7.48k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
7.48k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
7.48k
      i = (i + ++step) & mask;
271
7.48k
      length++;
272
7.48k
    }
273
274
16.4k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
16.4k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
16.4k
    item.key = std::forward<KK> (key);
283
16.4k
    item.value = std::forward<VV> (value);
284
16.4k
    item.hash = hash;
285
16.4k
    item.set_used (true);
286
16.4k
    item.set_real (true);
287
288
16.4k
    occupancy++;
289
16.4k
    population++;
290
291
16.4k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
1
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
16.4k
    return true;
295
16.4k
  }
bool hb_hashmap_t<unsigned int, contour_point_vector_t, false>::set_with_hash<unsigned int, contour_point_vector_t>(unsigned int&&, unsigned int, contour_point_vector_t&&, bool)
Line
Count
Source
249
17.9k
  {
250
17.9k
    if (unlikely (!successful)) return false;
251
17.9k
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
17.9k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
17.9k
    unsigned int tombstone = (unsigned int) -1;
255
17.9k
    unsigned int i = hash % prime;
256
17.9k
    unsigned length = 0;
257
17.9k
    unsigned step = 0;
258
19.7k
    while (items[i].is_used ())
259
1.78k
    {
260
1.78k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
1.78k
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
1.78k
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
1.78k
      i = (i + ++step) & mask;
271
1.78k
      length++;
272
1.78k
    }
273
274
17.9k
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
17.9k
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
17.9k
    item.key = std::forward<KK> (key);
283
17.9k
    item.value = std::forward<VV> (value);
284
17.9k
    item.hash = hash;
285
17.9k
    item.set_used (true);
286
17.9k
    item.set_real (true);
287
288
17.9k
    occupancy++;
289
17.9k
    population++;
290
291
17.9k
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
17.9k
    return true;
295
17.9k
  }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::set_with_hash<unsigned int, hb_array_t<char const> >(unsigned int&&, unsigned int, hb_array_t<char const>&&, bool)
Line
Count
Source
249
862
  {
250
862
    if (unlikely (!successful)) return false;
251
862
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
862
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
862
    unsigned int tombstone = (unsigned int) -1;
255
862
    unsigned int i = hash % prime;
256
862
    unsigned length = 0;
257
862
    unsigned step = 0;
258
991
    while (items[i].is_used ())
259
129
    {
260
129
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
129
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
129
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
129
      i = (i + ++step) & mask;
271
129
      length++;
272
129
    }
273
274
862
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
862
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
862
    item.key = std::forward<KK> (key);
283
862
    item.value = std::forward<VV> (value);
284
862
    item.hash = hash;
285
862
    item.set_used (true);
286
862
    item.set_real (true);
287
288
862
    occupancy++;
289
862
    population++;
290
291
862
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
862
    return true;
295
862
  }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::set_with_hash<unsigned int const&, hb_array_t<char const>&>(unsigned int const&, unsigned int, hb_array_t<char const>&, bool)
Line
Count
Source
249
917
  {
250
917
    if (unlikely (!successful)) return false;
251
917
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
917
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
917
    unsigned int tombstone = (unsigned int) -1;
255
917
    unsigned int i = hash % prime;
256
917
    unsigned length = 0;
257
917
    unsigned step = 0;
258
1.18k
    while (items[i].is_used ())
259
270
    {
260
270
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
270
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
270
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
270
      i = (i + ++step) & mask;
271
270
      length++;
272
270
    }
273
274
917
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
917
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
917
    item.key = std::forward<KK> (key);
283
917
    item.value = std::forward<VV> (value);
284
917
    item.hash = hash;
285
917
    item.set_used (true);
286
917
    item.set_real (true);
287
288
917
    occupancy++;
289
917
    population++;
290
291
917
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
917
    return true;
295
917
  }
bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false>*, int>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false>*&&, unsigned int, int&&, bool)
Line
Count
Source
249
43
  {
250
43
    if (unlikely (!successful)) return false;
251
43
    if (unlikely ((occupancy + occupancy / 2) >= mask && !alloc ())) return false;
252
253
43
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
254
43
    unsigned int tombstone = (unsigned int) -1;
255
43
    unsigned int i = hash % prime;
256
43
    unsigned length = 0;
257
43
    unsigned step = 0;
258
43
    while (items[i].is_used ())
259
0
    {
260
0
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
261
0
    items[i] == key)
262
0
      {
263
0
        if (!overwrite)
264
0
    return false;
265
0
        else
266
0
    break;
267
0
      }
268
0
      if (!items[i].is_real () && tombstone == (unsigned) -1)
269
0
        tombstone = i;
270
0
      i = (i + ++step) & mask;
271
0
      length++;
272
0
    }
273
274
43
    item_t &item = items[tombstone == (unsigned) -1 ? i : tombstone];
275
276
43
    if (item.is_used ())
277
0
    {
278
0
      occupancy--;
279
0
      population -= item.is_real ();
280
0
    }
281
282
43
    item.key = std::forward<KK> (key);
283
43
    item.value = std::forward<VV> (value);
284
43
    item.hash = hash;
285
43
    item.set_used (true);
286
43
    item.set_real (true);
287
288
43
    occupancy++;
289
43
    population++;
290
291
43
    if (unlikely (length > max_chain_length) && occupancy * 8 > mask)
292
0
      alloc (mask - 8); // This ensures we jump to next larger size
293
294
43
    return true;
295
43
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*&&, unsigned int, unsigned int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::set_with_hash<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int&>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int, unsigned int&, bool)
296
297
  template <typename VV>
298
307M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<unsigned int const&>(unsigned int const&, unsigned int const&, bool)
Line
Count
Source
298
71.8M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::set<hb_vector_t<unsigned int, false> >(unsigned int const&, hb_vector_t<unsigned int, false>&&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<unsigned int&>(unsigned int const&, unsigned int&, bool)
Line
Count
Source
298
222M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<unsigned int>(unsigned int const&, unsigned int&&, bool)
Line
Count
Source
298
8.69M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::set<hb::unique_ptr<hb_set_t> >(unsigned int const&, hb::unique_ptr<hb_set_t>&&, bool)
Line
Count
Source
298
2.11M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::set<int>(hb::shared_ptr<hb_map_t> const&, int&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::set<hb::shared_ptr<hb_set_t>&>(unsigned int const&, hb::shared_ptr<hb_set_t>&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set<Triple const&>(unsigned int const&, Triple const&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, Triple, false>::set<Triple&>(unsigned int const&, Triple&, bool)
Unexecuted instantiation: bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set<unsigned int&>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int&, bool)
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<bool&>(unsigned int const&, bool&, bool)
Line
Count
Source
298
138k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, hb_set_t, false>::set<hb_set_t>(unsigned int const&, hb_set_t&&, bool)
Line
Count
Source
298
31.5k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, face_table_info_t, false>::set<face_table_info_t>(unsigned int const&, face_table_info_t&&, bool)
Line
Count
Source
298
161k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set<int>(unsigned int const&, int&&, bool)
Line
Count
Source
298
581k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set<unsigned int&>(unsigned int const&, unsigned int&, bool)
Line
Count
Source
298
16.9k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, false>::set<unsigned int const&>(unsigned int const&, unsigned int const&, bool)
Line
Count
Source
298
208
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, graph::Lookup*, false>::set<graph::Lookup*&>(unsigned int const&, graph::Lookup*&, bool)
Line
Count
Source
298
8.51k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<int>(unsigned int const&, int&&, bool)
Line
Count
Source
298
394k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, Triple, false>::set<Triple>(unsigned int const&, Triple&&, bool)
Line
Count
Source
298
1.01M
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set<int>(hb_hashmap_t<unsigned int, Triple, false> const* const&, int&&, bool)
Line
Count
Source
298
5.45k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::set<unsigned int&>(hb_vector_t<int, false> const* const&, unsigned int&, bool)
Line
Count
Source
298
11.5k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<OT::OffsetTo<OT::ClipBox, OT::NumType<true, unsigned int, 3u>, void, true> const&>(unsigned int const&, OT::OffsetTo<OT::ClipBox, OT::NumType<true, unsigned int, 3u>, void, true> const&, bool)
Line
Count
Source
298
3.61k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::set<int>(hb_ot_name_record_ids_t const&, int&&, bool)
Line
Count
Source
298
7.01k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::set<unsigned int&>(hb_array_t<char const> const&, unsigned int&, bool)
Line
Count
Source
298
939
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::set<unsigned int>(hb_vector_t<bool, false> const* const&, unsigned int&&, bool)
bool hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::set<hb_vector_t<unsigned char, false> >(hb_vector_t<bool, false> const* const&, hb_vector_t<unsigned char, false>&&, bool)
Line
Count
Source
298
43
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::set<int>(hb_vector_t<bool, false> const* const&, int&&, bool)
Line
Count
Source
298
43
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::set<hb_array_t<char const> >(hb_ot_name_record_ids_t const&, hb_array_t<char const>&&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::set<hb_pair_t<OT::Feature const*, void const*&> >(unsigned int const&, hb_pair_t<OT::Feature const*, void const*&>&&, bool)
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set<hb_pair_t<unsigned int, int> >(unsigned int const&, hb_pair_t<unsigned int, int>&&, bool)
Line
Count
Source
298
100k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, TripleDistances, false>::set<TripleDistances>(unsigned int const&, TripleDistances&&, bool)
Line
Count
Source
298
1.78k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::set<hb_pair_t<unsigned int, int&> >(unsigned int const&, hb_pair_t<unsigned int, int&>&&, bool)
bool hb_hashmap_t<unsigned int, contour_point_vector_t, false>::set<contour_point_vector_t&>(unsigned int const&, contour_point_vector_t&, bool)
Line
Count
Source
298
16.4k
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::set<hb_array_t<char const>&>(unsigned int const&, hb_array_t<char const>&, bool)
Line
Count
Source
298
917
  bool set (const K &key, VV&& value, bool overwrite = true) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value), overwrite); }
Unexecuted instantiation: bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::set<unsigned int&>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int&, bool)
299
  template <typename VV>
300
  bool set (K &&key, VV&& value, bool overwrite = true)
301
10.4M
  {
302
10.4M
    uint32_t hash = hb_hash (key);
303
10.4M
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
10.4M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, unsigned int, true>::set<unsigned int&>(unsigned int&&, unsigned int&, bool)
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, OT::Feature const*, false>::set<OT::Feature const*>(unsigned int&&, OT::Feature const*&&, bool)
bool hb_hashmap_t<graph::overflow_record_t*, bool, false>::set<bool>(graph::overflow_record_t*&&, bool&&, bool)
Line
Count
Source
301
10.0M
  {
302
10.0M
    uint32_t hash = hb_hash (key);
303
10.0M
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
10.0M
  }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<int>(unsigned int&&, int&&, bool)
Line
Count
Source
301
15.9k
  {
302
15.9k
    uint32_t hash = hb_hash (key);
303
15.9k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
15.9k
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set<unsigned int>(hb_hashmap_t<unsigned int, Triple, false> const*&&, unsigned int&&, bool)
Line
Count
Source
301
2.79k
  {
302
2.79k
    uint32_t hash = hb_hash (key);
303
2.79k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
2.79k
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::set<unsigned int&>(hb_hashmap_t<unsigned int, Triple, false> const*&&, unsigned int&, bool)
Line
Count
Source
301
2.69k
  {
302
2.69k
    uint32_t hash = hb_hash (key);
303
2.69k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
2.69k
  }
bool hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::set<hb_vector_t<int, false> const*>(unsigned int&&, hb_vector_t<int, false> const*&&, bool)
Line
Count
Source
301
21.1k
  {
302
21.1k
    uint32_t hash = hb_hash (key);
303
21.1k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
21.1k
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::set<int>(hb_vector_t<int, false> const*&&, int&&, bool)
Line
Count
Source
301
11.5k
  {
302
11.5k
    uint32_t hash = hb_hash (key);
303
11.5k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
11.5k
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::set<hb::unique_ptr<hb_set_t> >(unsigned int&&, hb::unique_ptr<hb_set_t>&&, bool)
Line
Count
Source
301
6.11k
  {
302
6.11k
    uint32_t hash = hb_hash (key);
303
6.11k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
6.11k
  }
bool hb_hashmap_t<unsigned int, unsigned int, true>::set<unsigned int>(unsigned int&&, unsigned int&&, bool)
Line
Count
Source
301
49.9k
  {
302
49.9k
    uint32_t hash = hb_hash (key);
303
49.9k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
49.9k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::set<hb_array_t<char const>&>(hb_ot_name_record_ids_t&&, hb_array_t<char const>&, bool)
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::set<hb::unique_ptr<hb_blob_t> >(unsigned int&&, hb::unique_ptr<hb_blob_t>&&, bool)
Line
Count
Source
301
309k
  {
302
309k
    uint32_t hash = hb_hash (key);
303
309k
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
309k
  }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::set<hb_array_t<char const> >(unsigned int&&, hb_array_t<char const>&&, bool)
Line
Count
Source
301
33
  {
302
33
    uint32_t hash = hb_hash (key);
303
33
    return set_with_hash (std::move (key), hash, std::forward<VV> (value), overwrite);
304
33
  }
305
  bool add (const K &key)
306
  {
307
    uint32_t hash = hb_hash (key);
308
    return set_with_hash (key, hash, item_t::default_value ());
309
  }
310
311
  const V& get_with_hash (const K &key, uint32_t hash) const
312
1.82G
  {
313
1.82G
    if (!items) return item_t::default_value ();
314
1.82G
    auto *item = fetch_item (key, hash);
315
1.82G
    if (item)
316
1.78G
      return item->value;
317
44.3M
    return item_t::default_value ();
318
1.82G
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::get_with_hash(hb_serialize_context_t::object_t const* const&, unsigned int) const
Line
Count
Source
312
7.50M
  {
313
7.50M
    if (!items) return item_t::default_value ();
314
7.44M
    auto *item = fetch_item (key, hash);
315
7.44M
    if (item)
316
6.27M
      return item->value;
317
1.16M
    return item_t::default_value ();
318
7.44M
  }
hb_hashmap_t<unsigned int, unsigned int, true>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
1.79G
  {
313
1.79G
    if (!items) return item_t::default_value ();
314
1.79G
    auto *item = fetch_item (key, hash);
315
1.79G
    if (item)
316
1.75G
      return item->value;
317
42.9M
    return item_t::default_value ();
318
1.79G
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
24.5M
  {
313
24.5M
    if (!items) return item_t::default_value ();
314
24.5M
    auto *item = fetch_item (key, hash);
315
24.5M
    if (item)
316
24.5M
      return item->value;
317
4.89k
    return item_t::default_value ();
318
24.5M
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::get_with_hash(unsigned int const&, unsigned int) const
hb_hashmap_t<unsigned int, face_table_info_t, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
125k
  {
313
125k
    if (!items) return item_t::default_value ();
314
125k
    auto *item = fetch_item (key, hash);
315
125k
    if (item)
316
3.87k
      return item->value;
317
122k
    return item_t::default_value ();
318
125k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::get_with_hash(hb_ot_name_record_ids_t const&, unsigned int) const
hb_hashmap_t<unsigned int, graph::Lookup*, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
12.9k
  {
313
12.9k
    if (!items) return item_t::default_value ();
314
12.9k
    auto *item = fetch_item (key, hash);
315
12.9k
    if (item)
316
12.9k
      return item->value;
317
0
    return item_t::default_value ();
318
12.9k
  }
hb_hashmap_t<unsigned int, hb_set_t, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
34
  {
313
34
    if (!items) return item_t::default_value ();
314
34
    auto *item = fetch_item (key, hash);
315
34
    if (item)
316
34
      return item->value;
317
0
    return item_t::default_value ();
318
34
  }
hb_hashmap_t<unsigned int, unsigned int, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
74
  {
313
74
    if (!items) return item_t::default_value ();
314
74
    auto *item = fetch_item (key, hash);
315
74
    if (item)
316
34
      return item->value;
317
40
    return item_t::default_value ();
318
74
  }
hb_hashmap_t<unsigned int, TripleDistances, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
184
  {
313
184
    if (!items) return item_t::default_value ();
314
184
    auto *item = fetch_item (key, hash);
315
184
    if (item)
316
184
      return item->value;
317
0
    return item_t::default_value ();
318
184
  }
hb_hashmap_t<unsigned int, Triple, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
40.1k
  {
313
40.1k
    if (!items) return item_t::default_value ();
314
40.1k
    auto *item = fetch_item (key, hash);
315
40.1k
    if (item)
316
40.1k
      return item->value;
317
0
    return item_t::default_value ();
318
40.1k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
252k
  {
313
252k
    if (!items) return item_t::default_value ();
314
252k
    auto *item = fetch_item (key, hash);
315
252k
    if (item)
316
252k
      return item->value;
317
0
    return item_t::default_value ();
318
252k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::get_with_hash(hb_array_t<char const> const&, unsigned int) const
Line
Count
Source
312
2.31k
  {
313
2.31k
    if (!items) return item_t::default_value ();
314
2.31k
    auto *item = fetch_item (key, hash);
315
2.31k
    if (item)
316
1.37k
      return item->value;
317
939
    return item_t::default_value ();
318
2.31k
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
932
  {
313
932
    if (!items) return item_t::default_value ();
314
932
    auto *item = fetch_item (key, hash);
315
932
    if (item)
316
932
      return item->value;
317
0
    return item_t::default_value ();
318
932
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::get_with_hash(unsigned int const&, unsigned int) const
Line
Count
Source
312
96.4k
  {
313
96.4k
    if (!items) return item_t::default_value ();
314
96.4k
    auto *item = fetch_item (key, hash);
315
96.4k
    if (item)
316
1.18k
      return item->value;
317
95.2k
    return item_t::default_value ();
318
96.4k
  }
319
  const V& get (const K &key) const
320
1.82G
  {
321
1.82G
    if (!items) return item_t::default_value ();
322
1.82G
    return get_with_hash (key, hb_hash (key));
323
1.82G
  }
hb_hashmap_t<unsigned int, unsigned int, true>::get(unsigned int const&) const
Line
Count
Source
320
1.79G
  {
321
1.79G
    if (!items) return item_t::default_value ();
322
1.79G
    return get_with_hash (key, hb_hash (key));
323
1.79G
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::get(unsigned int const&) const
Line
Count
Source
320
24.5M
  {
321
24.5M
    if (!items) return item_t::default_value ();
322
24.5M
    return get_with_hash (key, hb_hash (key));
323
24.5M
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::get(unsigned int const&) const
hb_hashmap_t<unsigned int, face_table_info_t, false>::get(unsigned int const&) const
Line
Count
Source
320
162k
  {
321
162k
    if (!items) return item_t::default_value ();
322
125k
    return get_with_hash (key, hb_hash (key));
323
162k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::get(hb_ot_name_record_ids_t const&) const
hb_hashmap_t<unsigned int, graph::Lookup*, false>::get(unsigned int const&) const
Line
Count
Source
320
12.9k
  {
321
12.9k
    if (!items) return item_t::default_value ();
322
12.9k
    return get_with_hash (key, hb_hash (key));
323
12.9k
  }
hb_hashmap_t<unsigned int, hb_set_t, false>::get(unsigned int const&) const
Line
Count
Source
320
34
  {
321
34
    if (!items) return item_t::default_value ();
322
34
    return get_with_hash (key, hb_hash (key));
323
34
  }
hb_hashmap_t<unsigned int, unsigned int, false>::get(unsigned int const&) const
Line
Count
Source
320
121
  {
321
121
    if (!items) return item_t::default_value ();
322
74
    return get_with_hash (key, hb_hash (key));
323
121
  }
hb_hashmap_t<unsigned int, TripleDistances, false>::get(unsigned int const&) const
Line
Count
Source
320
184
  {
321
184
    if (!items) return item_t::default_value ();
322
184
    return get_with_hash (key, hb_hash (key));
323
184
  }
hb_hashmap_t<unsigned int, Triple, false>::get(unsigned int const&) const
Line
Count
Source
320
40.1k
  {
321
40.1k
    if (!items) return item_t::default_value ();
322
40.1k
    return get_with_hash (key, hb_hash (key));
323
40.1k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::get(unsigned int const&) const
Line
Count
Source
320
252k
  {
321
252k
    if (!items) return item_t::default_value ();
322
252k
    return get_with_hash (key, hb_hash (key));
323
252k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::get(hb_array_t<char const> const&) const
Line
Count
Source
320
2.31k
  {
321
2.31k
    if (!items) return item_t::default_value ();
322
2.31k
    return get_with_hash (key, hb_hash (key));
323
2.31k
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::get(unsigned int const&) const
Line
Count
Source
320
932
  {
321
932
    if (!items) return item_t::default_value ();
322
932
    return get_with_hash (key, hb_hash (key));
323
932
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::get(unsigned int const&) const
Line
Count
Source
320
96.4k
  {
321
96.4k
    if (!items) return item_t::default_value ();
322
96.4k
    return get_with_hash (key, hb_hash (key));
323
96.4k
  }
324
325
  void del (const K &key)
326
408k
  {
327
408k
    if (!items) return;
328
408k
    auto *item = fetch_item (key, hb_hash (key));
329
408k
    if (item)
330
408k
    {
331
408k
      item->set_real (false);
332
408k
      population--;
333
408k
    }
334
408k
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::del(hb_serialize_context_t::object_t const* const&)
Line
Count
Source
326
145k
  {
327
145k
    if (!items) return;
328
145k
    auto *item = fetch_item (key, hb_hash (key));
329
145k
    if (item)
330
145k
    {
331
145k
      item->set_real (false);
332
145k
      population--;
333
145k
    }
334
145k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::del(unsigned int const&)
Unexecuted instantiation: hb_hashmap_t<unsigned int, Triple, false>::del(unsigned int const&)
hb_hashmap_t<unsigned int, unsigned int, false>::del(unsigned int const&)
Line
Count
Source
326
260k
  {
327
260k
    if (!items) return;
328
260k
    auto *item = fetch_item (key, hb_hash (key));
329
260k
    if (item)
330
260k
    {
331
260k
      item->set_real (false);
332
260k
      population--;
333
260k
    }
334
260k
  }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::del(hb_hashmap_t<unsigned int, Triple, false> const* const&)
Line
Count
Source
326
2.69k
  {
327
2.69k
    if (!items) return;
328
2.69k
    auto *item = fetch_item (key, hb_hash (key));
329
2.69k
    if (item)
330
2.69k
    {
331
2.69k
      item->set_real (false);
332
2.69k
      population--;
333
2.69k
    }
334
2.69k
  }
335
336
  /* Has interface. */
337
891M
  const V& operator [] (K k) const { return get (k); }
hb_hashmap_t<unsigned int, face_table_info_t, false>::operator[](unsigned int) const
Line
Count
Source
337
358
  const V& operator [] (K k) const { return get (k); }
hb_hashmap_t<unsigned int, unsigned int, true>::operator[](unsigned int) const
Line
Count
Source
337
891M
  const V& operator [] (K k) const { return get (k); }
338
  template <typename VV=V>
339
  bool has (const K &key, VV **vp = nullptr) const
340
233M
  {
341
233M
    if (!items) return false;
342
214M
    return has_with_hash (key, hb_hash (key), vp);
343
233M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::has<hb_vector_t<unsigned int, false> >(unsigned int const&, hb_vector_t<unsigned int, false>**) const
bool hb_hashmap_t<unsigned int, unsigned int, true>::has<unsigned int>(unsigned int const&, unsigned int**) const
Line
Count
Source
340
143M
  {
341
143M
    if (!items) return false;
342
131M
    return has_with_hash (key, hb_hash (key), vp);
343
143M
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::has<hb::unique_ptr<hb_set_t> >(unsigned int const&, hb::unique_ptr<hb_set_t>**) const
Line
Count
Source
340
8.79M
  {
341
8.79M
    if (!items) return false;
342
8.70M
    return has_with_hash (key, hb_hash (key), vp);
343
8.79M
  }
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::has<unsigned int>(hb::shared_ptr<hb_map_t> const&, unsigned int**) const
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::has<hb::shared_ptr<hb_set_t> >(unsigned int const&, hb::shared_ptr<hb_set_t>**) const
bool hb_hashmap_t<unsigned int, hb_set_t, false>::has<hb_set_t>(unsigned int const&, hb_set_t**) const
Line
Count
Source
340
120k
  {
341
120k
    if (!items) return false;
342
103k
    return has_with_hash (key, hb_hash (key), vp);
343
120k
  }
bool hb_hashmap_t<unsigned int, face_table_info_t, false>::has<face_table_info_t>(unsigned int const&, face_table_info_t**) const
Line
Count
Source
340
32.2k
  {
341
32.2k
    if (!items) return false;
342
29.5k
    return has_with_hash (key, hb_hash (key), vp);
343
32.2k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::has<unsigned int>(hb_ot_name_record_ids_t const&, unsigned int**) const
bool hb_hashmap_t<unsigned int, unsigned int, true>::has<unsigned int const>(unsigned int const&, unsigned int const**) const
Line
Count
Source
340
1.18M
  {
341
1.18M
    if (!items) return false;
342
1.15M
    return has_with_hash (key, hb_hash (key), vp);
343
1.18M
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::has<unsigned int>(unsigned int const&, unsigned int**) const
Line
Count
Source
340
6.85M
  {
341
6.85M
    if (!items) return false;
342
6.85M
    return has_with_hash (key, hb_hash (key), vp);
343
6.85M
  }
bool hb_hashmap_t<graph::overflow_record_t*, bool, false>::has<bool>(graph::overflow_record_t* const&, bool**) const
Line
Count
Source
340
63.3M
  {
341
63.3M
    if (!items) return false;
342
63.3M
    return has_with_hash (key, hb_hash (key), vp);
343
63.3M
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::has<unsigned int const>(unsigned int const&, unsigned int const**) const
Line
Count
Source
340
997
  {
341
997
    if (!items) return false;
342
997
    return has_with_hash (key, hb_hash (key), vp);
343
997
  }
bool hb_hashmap_t<unsigned int, OT::Feature const*, false>::has<OT::Feature const*>(unsigned int const&, OT::Feature const***) const
Line
Count
Source
340
2.44M
  {
341
2.44M
    if (!items) return false;
342
0
    return has_with_hash (key, hb_hash (key), vp);
343
2.44M
  }
bool hb_hashmap_t<unsigned int, Triple, false>::has<Triple>(unsigned int const&, Triple**) const
Line
Count
Source
340
650k
  {
341
650k
    if (!items) return false;
342
62.5k
    return has_with_hash (key, hb_hash (key), vp);
343
650k
  }
bool hb_hashmap_t<unsigned int, TripleDistances, false>::has<TripleDistances>(unsigned int const&, TripleDistances**) const
Line
Count
Source
340
184
  {
341
184
    if (!items) return false;
342
184
    return has_with_hash (key, hb_hash (key), vp);
343
184
  }
bool hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::has<hb_pair_t<void const*, void const*> >(unsigned int const&, hb_pair_t<void const*, void const*>**) const
Line
Count
Source
340
37.9k
  {
341
37.9k
    if (!items) return false;
342
0
    return has_with_hash (key, hb_hash (key), vp);
343
37.9k
  }
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::has<hb_pair_t<unsigned int, int> >(unsigned int const&, hb_pair_t<unsigned int, int>**) const
Line
Count
Source
340
4.86M
  {
341
4.86M
    if (!items) return false;
342
855k
    return has_with_hash (key, hb_hash (key), vp);
343
4.86M
  }
bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::has<unsigned int>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int**) const
Line
Count
Source
340
41
  {
341
41
    if (!items) return false;
342
0
    return has_with_hash (key, hb_hash (key), vp);
343
41
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::has<unsigned int>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int**) const
Line
Count
Source
340
1.47M
  {
341
1.47M
    if (!items) return false;
342
1.47M
    return has_with_hash (key, hb_hash (key), vp);
343
1.47M
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::has<unsigned int>(hb_vector_t<int, false> const* const&, unsigned int**) const
Line
Count
Source
340
42.2k
  {
341
42.2k
    if (!items) return false;
342
42.1k
    return has_with_hash (key, hb_hash (key), vp);
343
42.2k
  }
bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::has<hb_array_t<char const> >(hb_ot_name_record_ids_t const&, hb_array_t<char const>**) const
Line
Count
Source
340
7.01k
  {
341
7.01k
    if (!items) return false;
342
0
    return has_with_hash (key, hb_hash (key), vp);
343
7.01k
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::has<hb::unique_ptr<hb_blob_t> >(unsigned int const&, hb::unique_ptr<hb_blob_t>**) const
Line
Count
Source
340
560k
  {
341
560k
    if (!items) return false;
342
511k
    return has_with_hash (key, hb_hash (key), vp);
343
560k
  }
bool hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::has<hb_vector_t<unsigned char, false> >(hb_vector_t<bool, false> const* const&, hb_vector_t<unsigned char, false>**) const
Line
Count
Source
340
129
  {
341
129
    if (!items) return false;
342
86
    return has_with_hash (key, hb_hash (key), vp);
343
129
  }
bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::has<unsigned int>(hb_vector_t<bool, false> const* const&, unsigned int**) const
Line
Count
Source
340
41
  {
341
41
    if (!items) return false;
342
41
    return has_with_hash (key, hb_hash (key), vp);
343
41
  }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::has<hb_array_t<char const> >(unsigned int const&, hb_array_t<char const>**) const
Line
Count
Source
340
932
  {
341
932
    if (!items) return false;
342
932
    return has_with_hash (key, hb_hash (key), vp);
343
932
  }
bool hb_hashmap_t<unsigned int, contour_point_vector_t, false>::has<contour_point_vector_t>(unsigned int const&, contour_point_vector_t**) const
Line
Count
Source
340
1.78k
  {
341
1.78k
    if (!items) return false;
342
1.78k
    return has_with_hash (key, hb_hash (key), vp);
343
1.78k
  }
344
  template <typename VV=V>
345
  bool has_with_hash (const K &key, uint32_t hash, VV **vp = nullptr) const
346
214M
  {
347
214M
    if (!items) return false;
348
214M
    auto *item = fetch_item (key, hash);
349
214M
    if (item)
350
139M
    {
351
139M
      if (vp) *vp = std::addressof (item->value);
352
139M
      return true;
353
139M
    }
354
75.3M
    return false;
355
214M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::has_with_hash<hb_vector_t<unsigned int, false> >(unsigned int const&, unsigned int, hb_vector_t<unsigned int, false>**) const
bool hb_hashmap_t<unsigned int, unsigned int, true>::has_with_hash<unsigned int>(unsigned int const&, unsigned int, unsigned int**) const
Line
Count
Source
346
131M
  {
347
131M
    if (!items) return false;
348
131M
    auto *item = fetch_item (key, hash);
349
131M
    if (item)
350
71.7M
    {
351
71.7M
      if (vp) *vp = std::addressof (item->value);
352
71.7M
      return true;
353
71.7M
    }
354
59.7M
    return false;
355
131M
  }
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, OT::Feature const*, false>::has_with_hash<OT::Feature const*>(unsigned int const&, unsigned int, OT::Feature const***) const
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::has_with_hash<hb::unique_ptr<hb_set_t> >(unsigned int const&, unsigned int, hb::unique_ptr<hb_set_t>**) const
Line
Count
Source
346
8.70M
  {
347
8.70M
    if (!items) return false;
348
8.70M
    auto *item = fetch_item (key, hash);
349
8.70M
    if (item)
350
6.67M
    {
351
6.67M
      if (vp) *vp = std::addressof (item->value);
352
6.67M
      return true;
353
6.67M
    }
354
2.03M
    return false;
355
8.70M
  }
Unexecuted instantiation: bool hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::has_with_hash<unsigned int>(hb::shared_ptr<hb_map_t> const&, unsigned int, unsigned int**) const
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::has_with_hash<hb_pair_t<void const*, void const*> >(unsigned int const&, unsigned int, hb_pair_t<void const*, void const*>**) const
Unexecuted instantiation: bool hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::has_with_hash<hb::shared_ptr<hb_set_t> >(unsigned int const&, unsigned int, hb::shared_ptr<hb_set_t>**) const
bool hb_hashmap_t<unsigned int, hb_set_t, false>::has_with_hash<hb_set_t>(unsigned int const&, unsigned int, hb_set_t**) const
Line
Count
Source
346
103k
  {
347
103k
    if (!items) return false;
348
103k
    auto *item = fetch_item (key, hash);
349
103k
    if (item)
350
89.3k
    {
351
89.3k
      if (vp) *vp = std::addressof (item->value);
352
89.3k
      return true;
353
89.3k
    }
354
13.6k
    return false;
355
103k
  }
bool hb_hashmap_t<unsigned int, face_table_info_t, false>::has_with_hash<face_table_info_t>(unsigned int const&, unsigned int, face_table_info_t**) const
Line
Count
Source
346
29.5k
  {
347
29.5k
    if (!items) return false;
348
29.5k
    auto *item = fetch_item (key, hash);
349
29.5k
    if (item)
350
973
    {
351
973
      if (vp) *vp = std::addressof (item->value);
352
973
      return true;
353
973
    }
354
28.5k
    return false;
355
29.5k
  }
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::has_with_hash<hb_array_t<char const> >(hb_ot_name_record_ids_t const&, unsigned int, hb_array_t<char const>**) const
Unexecuted instantiation: bool hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::has_with_hash<unsigned int>(hb_ot_name_record_ids_t const&, unsigned int, unsigned int**) const
bool hb_hashmap_t<unsigned int, unsigned int, true>::has_with_hash<unsigned int const>(unsigned int const&, unsigned int, unsigned int const**) const
Line
Count
Source
346
1.15M
  {
347
1.15M
    if (!items) return false;
348
1.15M
    auto *item = fetch_item (key, hash);
349
1.15M
    if (item)
350
460k
    {
351
460k
      if (vp) *vp = std::addressof (item->value);
352
460k
      return true;
353
460k
    }
354
694k
    return false;
355
1.15M
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::has_with_hash<unsigned int>(unsigned int const&, unsigned int, unsigned int**) const
Line
Count
Source
346
6.85M
  {
347
6.85M
    if (!items) return false;
348
6.85M
    auto *item = fetch_item (key, hash);
349
6.85M
    if (item)
350
6.44M
    {
351
6.44M
      if (vp) *vp = std::addressof (item->value);
352
6.44M
      return true;
353
6.44M
    }
354
404k
    return false;
355
6.85M
  }
bool hb_hashmap_t<graph::overflow_record_t*, bool, false>::has_with_hash<bool>(graph::overflow_record_t* const&, unsigned int, bool**) const
Line
Count
Source
346
63.3M
  {
347
63.3M
    if (!items) return false;
348
63.3M
    auto *item = fetch_item (key, hash);
349
63.3M
    if (item)
350
53.2M
    {
351
53.2M
      if (vp) *vp = std::addressof (item->value);
352
53.2M
      return true;
353
53.2M
    }
354
10.0M
    return false;
355
63.3M
  }
bool hb_hashmap_t<unsigned int, unsigned int, false>::has_with_hash<unsigned int const>(unsigned int const&, unsigned int, unsigned int const**) const
Line
Count
Source
346
997
  {
347
997
    if (!items) return false;
348
997
    auto *item = fetch_item (key, hash);
349
997
    if (item)
350
997
    {
351
997
      if (vp) *vp = std::addressof (item->value);
352
997
      return true;
353
997
    }
354
0
    return false;
355
997
  }
bool hb_hashmap_t<unsigned int, Triple, false>::has_with_hash<Triple>(unsigned int const&, unsigned int, Triple**) const
Line
Count
Source
346
62.5k
  {
347
62.5k
    if (!items) return false;
348
62.5k
    auto *item = fetch_item (key, hash);
349
62.5k
    if (item)
350
30.3k
    {
351
30.3k
      if (vp) *vp = std::addressof (item->value);
352
30.3k
      return true;
353
30.3k
    }
354
32.1k
    return false;
355
62.5k
  }
bool hb_hashmap_t<unsigned int, TripleDistances, false>::has_with_hash<TripleDistances>(unsigned int const&, unsigned int, TripleDistances**) const
Line
Count
Source
346
184
  {
347
184
    if (!items) return false;
348
184
    auto *item = fetch_item (key, hash);
349
184
    if (item)
350
184
    {
351
184
      if (vp) *vp = std::addressof (item->value);
352
184
      return true;
353
184
    }
354
0
    return false;
355
184
  }
bool hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::has_with_hash<hb_pair_t<unsigned int, int> >(unsigned int const&, unsigned int, hb_pair_t<unsigned int, int>**) const
Line
Count
Source
346
855k
  {
347
855k
    if (!items) return false;
348
855k
    auto *item = fetch_item (key, hash);
349
855k
    if (item)
350
230k
    {
351
230k
      if (vp) *vp = std::addressof (item->value);
352
230k
      return true;
353
230k
    }
354
624k
    return false;
355
855k
  }
bool hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::has_with_hash<unsigned int>(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int, unsigned int**) const
Line
Count
Source
346
43
  {
347
43
    if (!items) return false;
348
0
    auto *item = fetch_item (key, hash);
349
0
    if (item)
350
0
    {
351
0
      if (vp) *vp = std::addressof (item->value);
352
0
      return true;
353
0
    }
354
0
    return false;
355
0
  }
bool hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::has_with_hash<unsigned int>(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int, unsigned int**) const
Line
Count
Source
346
1.47M
  {
347
1.47M
    if (!items) return false;
348
1.47M
    auto *item = fetch_item (key, hash);
349
1.47M
    if (item)
350
9.47k
    {
351
9.47k
      if (vp) *vp = std::addressof (item->value);
352
9.47k
      return true;
353
9.47k
    }
354
1.46M
    return false;
355
1.47M
  }
bool hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::has_with_hash<unsigned int>(hb_vector_t<int, false> const* const&, unsigned int, unsigned int**) const
Line
Count
Source
346
42.1k
  {
347
42.1k
    if (!items) return false;
348
42.1k
    auto *item = fetch_item (key, hash);
349
42.1k
    if (item)
350
30.6k
    {
351
30.6k
      if (vp) *vp = std::addressof (item->value);
352
30.6k
      return true;
353
30.6k
    }
354
11.4k
    return false;
355
42.1k
  }
bool hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::has_with_hash<hb::unique_ptr<hb_blob_t> >(unsigned int const&, unsigned int, hb::unique_ptr<hb_blob_t>**) const
Line
Count
Source
346
511k
  {
347
511k
    if (!items) return false;
348
511k
    auto *item = fetch_item (key, hash);
349
511k
    if (item)
350
252k
    {
351
252k
      if (vp) *vp = std::addressof (item->value);
352
252k
      return true;
353
252k
    }
354
258k
    return false;
355
511k
  }
bool hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::has_with_hash<hb_vector_t<unsigned char, false> >(hb_vector_t<bool, false> const* const&, unsigned int, hb_vector_t<unsigned char, false>**) const
Line
Count
Source
346
86
  {
347
86
    if (!items) return false;
348
86
    auto *item = fetch_item (key, hash);
349
86
    if (item)
350
86
    {
351
86
      if (vp) *vp = std::addressof (item->value);
352
86
      return true;
353
86
    }
354
0
    return false;
355
86
  }
bool hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::has_with_hash<unsigned int>(hb_vector_t<bool, false> const* const&, unsigned int, unsigned int**) const
Line
Count
Source
346
41
  {
347
41
    if (!items) return false;
348
41
    auto *item = fetch_item (key, hash);
349
41
    if (item)
350
41
    {
351
41
      if (vp) *vp = std::addressof (item->value);
352
41
      return true;
353
41
    }
354
0
    return false;
355
41
  }
bool hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::has_with_hash<hb_array_t<char const> >(unsigned int const&, unsigned int, hb_array_t<char const>**) const
Line
Count
Source
346
932
  {
347
932
    if (!items) return false;
348
932
    auto *item = fetch_item (key, hash);
349
932
    if (item)
350
932
    {
351
932
      if (vp) *vp = std::addressof (item->value);
352
932
      return true;
353
932
    }
354
0
    return false;
355
932
  }
bool hb_hashmap_t<unsigned int, contour_point_vector_t, false>::has_with_hash<contour_point_vector_t>(unsigned int const&, unsigned int, contour_point_vector_t**) const
Line
Count
Source
346
1.78k
  {
347
1.78k
    if (!items) return false;
348
1.78k
    auto *item = fetch_item (key, hash);
349
1.78k
    if (item)
350
1.78k
    {
351
1.78k
      if (vp) *vp = std::addressof (item->value);
352
1.78k
      return true;
353
1.78k
    }
354
0
    return false;
355
1.78k
  }
356
  item_t *fetch_item (const K &key, uint32_t hash) const
357
2.04G
  {
358
2.04G
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
2.04G
    unsigned int i = hash % prime;
360
2.04G
    unsigned step = 0;
361
3.16G
    while (items[i].is_used ())
362
3.04G
    {
363
3.04G
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
2.98G
    items[i] == key)
365
1.92G
      {
366
1.92G
  if (items[i].is_real ())
367
1.92G
    return &items[i];
368
136k
  else
369
136k
    return nullptr;
370
1.92G
      }
371
1.11G
      i = (i + ++step) & mask;
372
1.11G
    }
373
119M
    return nullptr;
374
2.04G
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::fetch_item(hb_serialize_context_t::object_t const* const&, unsigned int) const
Line
Count
Source
357
7.58M
  {
358
7.58M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
7.58M
    unsigned int i = hash % prime;
360
7.58M
    unsigned step = 0;
361
11.3M
    while (items[i].is_used ())
362
10.2M
    {
363
10.2M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
6.59M
    items[i] == key)
365
6.46M
      {
366
6.46M
  if (items[i].is_real ())
367
6.41M
    return &items[i];
368
41.1k
  else
369
41.1k
    return nullptr;
370
6.46M
      }
371
3.75M
      i = (i + ++step) & mask;
372
3.75M
    }
373
1.12M
    return nullptr;
374
7.58M
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::fetch_item(unsigned int const&, unsigned int) const
hb_hashmap_t<unsigned int, unsigned int, true>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
1.92G
  {
358
1.92G
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
1.92G
    unsigned int i = hash % prime;
360
1.92G
    unsigned step = 0;
361
2.96G
    while (items[i].is_used ())
362
2.86G
    {
363
2.86G
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
2.86G
    items[i] == key)
365
1.82G
      {
366
1.82G
  if (items[i].is_real ())
367
1.82G
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
1.82G
      }
371
1.03G
      i = (i + ++step) & mask;
372
1.03G
    }
373
103M
    return nullptr;
374
1.92G
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::fetch_item(unsigned int const&, unsigned int) const
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
33.2M
  {
358
33.2M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
33.2M
    unsigned int i = hash % prime;
360
33.2M
    unsigned step = 0;
361
48.4M
    while (items[i].is_used ())
362
46.4M
    {
363
46.4M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
46.4M
    items[i] == key)
365
31.2M
      {
366
31.2M
  if (items[i].is_real ())
367
31.2M
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
31.2M
      }
371
15.2M
      i = (i + ++step) & mask;
372
15.2M
    }
373
2.04M
    return nullptr;
374
33.2M
  }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::fetch_item(hb::shared_ptr<hb_map_t> const&, unsigned int) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::fetch_item(unsigned int const&, unsigned int) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::fetch_item(unsigned int const&, unsigned int) const
Unexecuted instantiation: hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::fetch_item(hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const* const&, unsigned int) const
hb_hashmap_t<unsigned int, hb_set_t, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
103k
  {
358
103k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
103k
    unsigned int i = hash % prime;
360
103k
    unsigned step = 0;
361
104k
    while (items[i].is_used ())
362
90.6k
    {
363
90.6k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
90.6k
    items[i] == key)
365
89.3k
      {
366
89.3k
  if (items[i].is_real ())
367
89.3k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
89.3k
      }
371
1.26k
      i = (i + ++step) & mask;
372
1.26k
    }
373
13.6k
    return nullptr;
374
103k
  }
hb_hashmap_t<unsigned int, face_table_info_t, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
155k
  {
358
155k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
155k
    unsigned int i = hash % prime;
360
155k
    unsigned step = 0;
361
254k
    while (items[i].is_used ())
362
103k
    {
363
103k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
103k
    items[i] == key)
365
4.85k
      {
366
4.85k
  if (items[i].is_real ())
367
4.85k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
4.85k
      }
371
99.0k
      i = (i + ++step) & mask;
372
99.0k
    }
373
150k
    return nullptr;
374
155k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::fetch_item(hb_ot_name_record_ids_t const&, unsigned int) const
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::fetch_item(hb_ot_name_record_ids_t const&, unsigned int) const
hb_hashmap_t<unsigned int, unsigned int, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
7.11M
  {
358
7.11M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
7.11M
    unsigned int i = hash % prime;
360
7.11M
    unsigned step = 0;
361
16.1M
    while (items[i].is_used ())
362
15.8M
    {
363
15.8M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
15.8M
    items[i] == key)
365
6.79M
      {
366
6.79M
  if (items[i].is_real ())
367
6.71M
    return &items[i];
368
88.5k
  else
369
88.5k
    return nullptr;
370
6.79M
      }
371
9.01M
      i = (i + ++step) & mask;
372
9.01M
    }
373
315k
    return nullptr;
374
7.11M
  }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::fetch_item(graph::overflow_record_t* const&, unsigned int) const
Line
Count
Source
357
63.3M
  {
358
63.3M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
63.3M
    unsigned int i = hash % prime;
360
63.3M
    unsigned step = 0;
361
114M
    while (items[i].is_used ())
362
104M
    {
363
104M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
53.2M
    items[i] == key)
365
53.2M
      {
366
53.2M
  if (items[i].is_real ())
367
53.2M
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
53.2M
      }
371
51.4M
      i = (i + ++step) & mask;
372
51.4M
    }
373
10.0M
    return nullptr;
374
63.3M
  }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
12.9k
  {
358
12.9k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
12.9k
    unsigned int i = hash % prime;
360
12.9k
    unsigned step = 0;
361
13.8k
    while (items[i].is_used ())
362
13.8k
    {
363
13.8k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
13.8k
    items[i] == key)
365
12.9k
      {
366
12.9k
  if (items[i].is_real ())
367
12.9k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
12.9k
      }
371
932
      i = (i + ++step) & mask;
372
932
    }
373
0
    return nullptr;
374
12.9k
  }
hb_hashmap_t<unsigned int, Triple, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
102k
  {
358
102k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
102k
    unsigned int i = hash % prime;
360
102k
    unsigned step = 0;
361
108k
    while (items[i].is_used ())
362
76.0k
    {
363
76.0k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
76.0k
    items[i] == key)
365
70.4k
      {
366
70.4k
  if (items[i].is_real ())
367
70.4k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
70.4k
      }
371
5.50k
      i = (i + ++step) & mask;
372
5.50k
    }
373
32.1k
    return nullptr;
374
102k
  }
hb_hashmap_t<unsigned int, TripleDistances, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
368
  {
358
368
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
368
    unsigned int i = hash % prime;
360
368
    unsigned step = 0;
361
368
    while (items[i].is_used ())
362
368
    {
363
368
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
368
    items[i] == key)
365
368
      {
366
368
  if (items[i].is_real ())
367
368
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
368
      }
371
0
      i = (i + ++step) & mask;
372
0
    }
373
0
    return nullptr;
374
368
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
951k
  {
358
951k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
951k
    unsigned int i = hash % prime;
360
951k
    unsigned step = 0;
361
1.75M
    while (items[i].is_used ())
362
1.03M
    {
363
1.03M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
1.03M
    items[i] == key)
365
232k
      {
366
232k
  if (items[i].is_real ())
367
232k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
232k
      }
371
800k
      i = (i + ++step) & mask;
372
800k
    }
373
719k
    return nullptr;
374
951k
  }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::fetch_item(hb_hashmap_t<unsigned int, Triple, false> const* const&, unsigned int) const
Line
Count
Source
357
1.48M
  {
358
1.48M
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
1.48M
    unsigned int i = hash % prime;
360
1.48M
    unsigned step = 0;
361
2.69M
    while (items[i].is_used ())
362
1.22M
    {
363
1.22M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
19.0k
    items[i] == key)
365
19.0k
      {
366
19.0k
  if (items[i].is_real ())
367
12.1k
    return &items[i];
368
6.89k
  else
369
6.89k
    return nullptr;
370
19.0k
      }
371
1.21M
      i = (i + ++step) & mask;
372
1.21M
    }
373
1.46M
    return nullptr;
374
1.48M
  }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::fetch_item(hb_vector_t<int, false> const* const&, unsigned int) const
Line
Count
Source
357
42.1k
  {
358
42.1k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
42.1k
    unsigned int i = hash % prime;
360
42.1k
    unsigned step = 0;
361
65.2k
    while (items[i].is_used ())
362
53.8k
    {
363
53.8k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
30.7k
    items[i] == key)
365
30.6k
      {
366
30.6k
  if (items[i].is_real ())
367
30.6k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
30.6k
      }
371
23.1k
      i = (i + ++step) & mask;
372
23.1k
    }
373
11.4k
    return nullptr;
374
42.1k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
764k
  {
358
764k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
764k
    unsigned int i = hash % prime;
360
764k
    unsigned step = 0;
361
1.38M
    while (items[i].is_used ())
362
1.13M
    {
363
1.13M
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
1.13M
    items[i] == key)
365
505k
      {
366
505k
  if (items[i].is_real ())
367
505k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
505k
      }
371
624k
      i = (i + ++step) & mask;
372
624k
    }
373
258k
    return nullptr;
374
764k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::fetch_item(hb_array_t<char const> const&, unsigned int) const
Line
Count
Source
357
2.31k
  {
358
2.31k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
2.31k
    unsigned int i = hash % prime;
360
2.31k
    unsigned step = 0;
361
2.43k
    while (items[i].is_used ())
362
1.49k
    {
363
1.49k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
1.37k
    items[i] == key)
365
1.37k
      {
366
1.37k
  if (items[i].is_real ())
367
1.37k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
1.37k
      }
371
121
      i = (i + ++step) & mask;
372
121
    }
373
939
    return nullptr;
374
2.31k
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::fetch_item(hb_vector_t<bool, false> const* const&, unsigned int) const
Line
Count
Source
357
86
  {
358
86
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
86
    unsigned int i = hash % prime;
360
86
    unsigned step = 0;
361
86
    while (items[i].is_used ())
362
86
    {
363
86
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
86
    items[i] == key)
365
86
      {
366
86
  if (items[i].is_real ())
367
86
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
86
      }
371
0
      i = (i + ++step) & mask;
372
0
    }
373
0
    return nullptr;
374
86
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::fetch_item(hb_vector_t<bool, false> const* const&, unsigned int) const
Line
Count
Source
357
41
  {
358
41
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
41
    unsigned int i = hash % prime;
360
41
    unsigned step = 0;
361
41
    while (items[i].is_used ())
362
41
    {
363
41
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
41
    items[i] == key)
365
41
      {
366
41
  if (items[i].is_real ())
367
41
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
41
      }
371
0
      i = (i + ++step) & mask;
372
0
    }
373
0
    return nullptr;
374
41
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
1.86k
  {
358
1.86k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
1.86k
    unsigned int i = hash % prime;
360
1.86k
    unsigned step = 0;
361
2.54k
    while (items[i].is_used ())
362
2.54k
    {
363
2.54k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
2.54k
    items[i] == key)
365
1.86k
      {
366
1.86k
  if (items[i].is_real ())
367
1.86k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
1.86k
      }
371
680
      i = (i + ++step) & mask;
372
680
    }
373
0
    return nullptr;
374
1.86k
  }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::fetch_item(unsigned int const&, unsigned int) const
Line
Count
Source
357
1.78k
  {
358
1.78k
    hash &= 0x3FFFFFFF; // We only store lower 30bit of hash
359
1.78k
    unsigned int i = hash % prime;
360
1.78k
    unsigned step = 0;
361
2.46k
    while (items[i].is_used ())
362
2.46k
    {
363
2.46k
      if ((std::is_integral<K>::value || items[i].hash == hash) &&
364
2.46k
    items[i] == key)
365
1.78k
      {
366
1.78k
  if (items[i].is_real ())
367
1.78k
    return &items[i];
368
0
  else
369
0
    return nullptr;
370
1.78k
      }
371
674
      i = (i + ++step) & mask;
372
674
    }
373
0
    return nullptr;
374
1.78k
  }
375
  /* Projection. */
376
  const V& operator () (K k) const { return get (k); }
377
378
34.3M
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::size() const
Line
Count
Source
378
147k
  unsigned size () const { return mask ? mask + 1 : 0; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::size() const
hb_hashmap_t<unsigned int, unsigned int, true>::size() const
Line
Count
Source
378
773k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::size() const
Line
Count
Source
378
145k
  unsigned size () const { return mask ? mask + 1 : 0; }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::size() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::size() const
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::size() const
hb_hashmap_t<unsigned int, hb_set_t, false>::size() const
Line
Count
Source
378
15.8k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::size() const
Line
Count
Source
378
129k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, unsigned int, false>::size() const
Line
Count
Source
378
30.1M
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::size() const
Line
Count
Source
378
144k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::size() const
Line
Count
Source
378
8.75k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::size() const
Line
Count
Source
378
200k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, Triple, false>::size() const
Line
Count
Source
378
2.58M
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::size() const
Line
Count
Source
378
1.38k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::size() const
Line
Count
Source
378
623
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::size() const
Line
Count
Source
378
960
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::size() const
Line
Count
Source
378
9.01k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::size() const
Line
Count
Source
378
1.81k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::size() const
Line
Count
Source
378
85.7k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::size() const
Line
Count
Source
378
185
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::size() const
Line
Count
Source
378
43
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::size() const
Line
Count
Source
378
86
  unsigned size () const { return mask ? mask + 1 : 0; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::size() const
hb_hashmap_t<unsigned int, TripleDistances, false>::size() const
Line
Count
Source
378
1.32k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::size() const
Line
Count
Source
378
2.33k
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::size() const
Line
Count
Source
378
267
  unsigned size () const { return mask ? mask + 1 : 0; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::size() const
Line
Count
Source
378
86
  unsigned size () const { return mask ? mask + 1 : 0; }
379
380
  void clear ()
381
484k
  {
382
484k
    if (unlikely (!successful)) return;
383
384
484k
    for (auto &_ : hb_iter (items, size ()))
385
591k
    {
386
      /* Reconstruct items. */
387
591k
      _.~item_t ();
388
591k
      new (&_) item_t ();
389
591k
    }
390
391
484k
    population = occupancy = 0;
392
484k
  }
hb_hashmap_t<unsigned int, unsigned int, true>::clear()
Line
Count
Source
381
4.03k
  {
382
4.03k
    if (unlikely (!successful)) return;
383
384
4.03k
    for (auto &_ : hb_iter (items, size ()))
385
10.5k
    {
386
      /* Reconstruct items. */
387
10.5k
      _.~item_t ();
388
10.5k
      new (&_) item_t ();
389
10.5k
    }
390
391
4.03k
    population = occupancy = 0;
392
4.03k
  }
hb_hashmap_t<unsigned int, unsigned int, false>::clear()
Line
Count
Source
381
425k
  {
382
425k
    if (unlikely (!successful)) return;
383
384
425k
    for (auto &_ : hb_iter (items, size ()))
385
581k
    {
386
      /* Reconstruct items. */
387
581k
      _.~item_t ();
388
581k
      new (&_) item_t ();
389
581k
    }
390
391
425k
    population = occupancy = 0;
392
425k
  }
hb_hashmap_t<unsigned int, Triple, false>::clear()
Line
Count
Source
381
55.2k
  {
382
55.2k
    if (unlikely (!successful)) return;
383
384
55.2k
    for (auto &_ : hb_iter (items, size ()))
385
0
    {
386
      /* Reconstruct items. */
387
0
      _.~item_t ();
388
0
      new (&_) item_t ();
389
0
    }
390
391
55.2k
    population = occupancy = 0;
392
55.2k
  }
393
394
7.93M
  bool is_empty () const { return population == 0; }
hb_hashmap_t<unsigned int, unsigned int, true>::is_empty() const
Line
Count
Source
394
56.3k
  bool is_empty () const { return population == 0; }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::is_empty() const
Line
Count
Source
394
2.14k
  bool is_empty () const { return population == 0; }
hb_hashmap_t<unsigned int, Triple, false>::is_empty() const
Line
Count
Source
394
465k
  bool is_empty () const { return population == 0; }
hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::is_empty() const
Line
Count
Source
394
2.64k
  bool is_empty () const { return population == 0; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::is_empty() const
Line
Count
Source
394
158
  bool is_empty () const { return population == 0; }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::is_empty() const
Line
Count
Source
394
7.38M
  bool is_empty () const { return population == 0; }
hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::is_empty() const
Line
Count
Source
394
20.2k
  bool is_empty () const { return population == 0; }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::is_empty() const
Line
Count
Source
394
123
  bool is_empty () const { return population == 0; }
395
59.2k
  explicit operator bool () const { return !is_empty (); }
hb_hashmap_t<unsigned int, unsigned int, true>::operator bool() const
Line
Count
Source
395
55.9k
  explicit operator bool () const { return !is_empty (); }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::operator bool() const
Line
Count
Source
395
2.14k
  explicit operator bool () const { return !is_empty (); }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::operator bool() const
Line
Count
Source
395
158
  explicit operator bool () const { return !is_empty (); }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::operator bool() const
Line
Count
Source
395
951
  explicit operator bool () const { return !is_empty (); }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::operator bool() const
Line
Count
Source
395
123
  explicit operator bool () const { return !is_empty (); }
396
397
  uint32_t hash () const
398
1.49M
  {
399
1.49M
    return
400
1.49M
    + iter_items ()
401
1.49M
    | hb_reduce ([] (uint32_t h, const item_t &_) { return h ^ _.total_hash (); }, (uint32_t) 0u)
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::hash() const::{lambda(unsigned int, hb_hashmap_t<unsigned int, unsigned int, true>::item_t const&)#1}::operator()(unsigned int, hb_hashmap_t<unsigned int, unsigned int, true>::item_t const&) const
hb_hashmap_t<unsigned int, Triple, false>::hash() const::{lambda(unsigned int, hb_hashmap_t<unsigned int, Triple, false>::item_t const&)#1}::operator()(unsigned int, hb_hashmap_t<unsigned int, Triple, false>::item_t const&) const
Line
Count
Source
401
1.03M
    | hb_reduce ([] (uint32_t h, const item_t &_) { return h ^ _.total_hash (); }, (uint32_t) 0u)
402
1.49M
    ;
403
1.49M
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::hash() const
hb_hashmap_t<unsigned int, Triple, false>::hash() const
Line
Count
Source
398
1.49M
  {
399
1.49M
    return
400
1.49M
    + iter_items ()
401
1.49M
    | hb_reduce ([] (uint32_t h, const item_t &_) { return h ^ _.total_hash (); }, (uint32_t) 0u)
402
1.49M
    ;
403
1.49M
  }
404
405
  bool is_equal (const hb_hashmap_t &other) const
406
0
  {
407
0
    if (population != other.population) return false;
408
409
0
    for (auto pair : iter ())
410
0
      if (other.get (pair.first) != pair.second)
411
0
        return false;
412
413
0
    return true;
414
0
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::is_equal(hb_hashmap_t<unsigned int, unsigned int, true> const&) const
Unexecuted instantiation: hb_hashmap_t<unsigned int, Triple, false>::is_equal(hb_hashmap_t<unsigned int, Triple, false> const&) const
415
19.0k
  bool operator == (const hb_hashmap_t &other) const { return is_equal (other); }
Unexecuted instantiation: hb_hashmap_t<unsigned int, unsigned int, true>::operator==(hb_hashmap_t<unsigned int, unsigned int, true> const&) const
hb_hashmap_t<unsigned int, Triple, false>::operator==(hb_hashmap_t<unsigned int, Triple, false> const&) const
Line
Count
Source
415
19.0k
  bool operator == (const hb_hashmap_t &other) const { return is_equal (other); }
416
  bool operator != (const hb_hashmap_t &other) const { return !is_equal (other); }
417
418
1.72M
  unsigned int get_population () const { return population; }
hb_hashmap_t<unsigned int, unsigned int, true>::get_population() const
Line
Count
Source
418
241k
  unsigned int get_population () const { return population; }
hb_hashmap_t<unsigned int, face_table_info_t, false>::get_population() const
Line
Count
Source
418
16.5k
  unsigned int get_population () const { return population; }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::get_population() const
hb_hashmap_t<unsigned int, graph::Lookup*, false>::get_population() const
Line
Count
Source
418
2.14k
  unsigned int get_population () const { return population; }
hb_hashmap_t<unsigned int, unsigned int, false>::get_population() const
Line
Count
Source
418
1.46M
  unsigned int get_population () const { return population; }
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::get_population() const
Line
Count
Source
418
128
  unsigned int get_population () const { return population; }
hb_hashmap_t<unsigned int, Triple, false>::get_population() const
Line
Count
Source
418
2.55k
  unsigned int get_population () const { return population; }
419
420
  void update (const hb_hashmap_t &other)
421
0
  {
422
0
    if (unlikely (!successful)) return;
423
424
0
    hb_copy (other, *this);
425
0
  }
426
427
  /*
428
   * Iterator
429
   */
430
431
  auto iter_items () const HB_AUTO_RETURN
432
  (
433
    + hb_iter (items, this->size ())
434
    | hb_filter (&item_t::is_real)
435
  )
436
  auto iter_ref () const HB_AUTO_RETURN
437
  (
438
    + this->iter_items ()
439
    | hb_map (&item_t::get_pair_ref)
440
  )
441
  auto iter () const HB_AUTO_RETURN
442
  (
443
    + this->iter_items ()
444
    | hb_map (&item_t::get_pair)
445
  )
446
  auto keys_ref () const HB_AUTO_RETURN
447
  (
448
    + this->iter_items ()
449
    | hb_map (&item_t::get_key)
450
  )
451
  auto keys () const HB_AUTO_RETURN
452
  (
453
    + this->keys_ref ()
454
    | hb_map (hb_ridentity)
455
  )
456
  auto values_ref () const HB_AUTO_RETURN
457
  (
458
    + this->iter_items ()
459
    | hb_map (&item_t::get_value)
460
  )
461
  auto values () const HB_AUTO_RETURN
462
  (
463
    + this->values_ref ()
464
    | hb_map (hb_ridentity)
465
  )
466
467
  /* C iterator. */
468
  bool next (int *idx,
469
       K *key,
470
       V *value) const
471
0
  {
472
0
    unsigned i = (unsigned) (*idx + 1);
473
474
0
    unsigned count = size ();
475
0
    while (i < count && !items[i].is_real ())
476
0
      i++;
477
478
0
    if (i >= count)
479
0
    {
480
0
      *idx = -1;
481
0
      return false;
482
0
    }
483
484
0
    *key = items[i].key;
485
0
    *value = items[i].value;
486
487
0
    *idx = (signed) i;
488
0
    return true;
489
0
  }
490
491
  /* Sink interface. */
492
  hb_hashmap_t& operator << (const hb_pair_t<K, V>& v)
493
71.8M
  { set (v.first, v.second); return *this; }
hb_hashmap_t<unsigned int, unsigned int, true>::operator<<(hb_pair_t<unsigned int, unsigned int> const&)
Line
Count
Source
493
71.8M
  { set (v.first, v.second); return *this; }
Unexecuted instantiation: hb_hashmap_t<unsigned int, Triple, false>::operator<<(hb_pair_t<unsigned int, Triple> const&)
494
  template <typename V2 = V,
495
      hb_enable_if (!std::is_trivially_copyable<V2>::value)>
496
  hb_hashmap_t& operator << (const hb_pair_t<K, V&&>& v)
497
  { set (v.first, std::move (v.second)); return *this; }
498
  template <typename K2 = K,
499
      hb_enable_if (!std::is_trivially_copyable<K2>::value)>
500
  hb_hashmap_t& operator << (const hb_pair_t<K&&, V>& v)
501
  { set (std::move (v.first), v.second); return *this; }
502
  template <typename K2 = K, typename V2 = V,
503
      hb_enable_if (!std::is_trivially_copyable<K2>::value &&
504
        !std::is_trivially_copyable<V2>::value)>
505
  hb_hashmap_t& operator << (const hb_pair_t<K&&, V&&>& v)
506
  { set (std::move (v.first), std::move (v.second)); return *this; }
507
508
  static unsigned int prime_for (unsigned int shift)
509
2.57M
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
2.57M
    /*static*/ const unsigned int prime_mod [32] =
518
2.57M
    {
519
2.57M
      1,          /* For 1 << 0 */
520
2.57M
      2,
521
2.57M
      3,
522
2.57M
      7,
523
2.57M
      13,
524
2.57M
      31,
525
2.57M
      61,
526
2.57M
      127,
527
2.57M
      251,
528
2.57M
      509,
529
2.57M
      1021,
530
2.57M
      2039,
531
2.57M
      4093,
532
2.57M
      8191,
533
2.57M
      16381,
534
2.57M
      32749,
535
2.57M
      65521,      /* For 1 << 16 */
536
2.57M
      131071,
537
2.57M
      262139,
538
2.57M
      524287,
539
2.57M
      1048573,
540
2.57M
      2097143,
541
2.57M
      4194301,
542
2.57M
      8388593,
543
2.57M
      16777213,
544
2.57M
      33554393,
545
2.57M
      67108859,
546
2.57M
      134217689,
547
2.57M
      268435399,
548
2.57M
      536870909,
549
2.57M
      1073741789,
550
2.57M
      2147483647  /* For 1 << 31 */
551
2.57M
    };
552
553
2.57M
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
2.57M
    return prime_mod[shift];
557
2.57M
  }
hb_hashmap_t<hb_serialize_context_t::object_t const*, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
147k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
147k
    /*static*/ const unsigned int prime_mod [32] =
518
147k
    {
519
147k
      1,          /* For 1 << 0 */
520
147k
      2,
521
147k
      3,
522
147k
      7,
523
147k
      13,
524
147k
      31,
525
147k
      61,
526
147k
      127,
527
147k
      251,
528
147k
      509,
529
147k
      1021,
530
147k
      2039,
531
147k
      4093,
532
147k
      8191,
533
147k
      16381,
534
147k
      32749,
535
147k
      65521,      /* For 1 << 16 */
536
147k
      131071,
537
147k
      262139,
538
147k
      524287,
539
147k
      1048573,
540
147k
      2097143,
541
147k
      4194301,
542
147k
      8388593,
543
147k
      16777213,
544
147k
      33554393,
545
147k
      67108859,
546
147k
      134217689,
547
147k
      268435399,
548
147k
      536870909,
549
147k
      1073741789,
550
147k
      2147483647  /* For 1 << 31 */
551
147k
    };
552
553
147k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
147k
    return prime_mod[shift];
557
147k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::prime_for(unsigned int)
hb_hashmap_t<unsigned int, unsigned int, true>::prime_for(unsigned int)
Line
Count
Source
509
752k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
752k
    /*static*/ const unsigned int prime_mod [32] =
518
752k
    {
519
752k
      1,          /* For 1 << 0 */
520
752k
      2,
521
752k
      3,
522
752k
      7,
523
752k
      13,
524
752k
      31,
525
752k
      61,
526
752k
      127,
527
752k
      251,
528
752k
      509,
529
752k
      1021,
530
752k
      2039,
531
752k
      4093,
532
752k
      8191,
533
752k
      16381,
534
752k
      32749,
535
752k
      65521,      /* For 1 << 16 */
536
752k
      131071,
537
752k
      262139,
538
752k
      524287,
539
752k
      1048573,
540
752k
      2097143,
541
752k
      4194301,
542
752k
      8388593,
543
752k
      16777213,
544
752k
      33554393,
545
752k
      67108859,
546
752k
      134217689,
547
752k
      268435399,
548
752k
      536870909,
549
752k
      1073741789,
550
752k
      2147483647  /* For 1 << 31 */
551
752k
    };
552
553
752k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
752k
    return prime_mod[shift];
557
752k
  }
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_set_t>, false>::prime_for(unsigned int)
Line
Count
Source
509
145k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
145k
    /*static*/ const unsigned int prime_mod [32] =
518
145k
    {
519
145k
      1,          /* For 1 << 0 */
520
145k
      2,
521
145k
      3,
522
145k
      7,
523
145k
      13,
524
145k
      31,
525
145k
      61,
526
145k
      127,
527
145k
      251,
528
145k
      509,
529
145k
      1021,
530
145k
      2039,
531
145k
      4093,
532
145k
      8191,
533
145k
      16381,
534
145k
      32749,
535
145k
      65521,      /* For 1 << 16 */
536
145k
      131071,
537
145k
      262139,
538
145k
      524287,
539
145k
      1048573,
540
145k
      2097143,
541
145k
      4194301,
542
145k
      8388593,
543
145k
      16777213,
544
145k
      33554393,
545
145k
      67108859,
546
145k
      134217689,
547
145k
      268435399,
548
145k
      536870909,
549
145k
      1073741789,
550
145k
      2147483647  /* For 1 << 31 */
551
145k
    };
552
553
145k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
145k
    return prime_mod[shift];
557
145k
  }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::prime_for(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::prime_for(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::prime_for(unsigned int)
hb_hashmap_t<unsigned int, hb_set_t, false>::prime_for(unsigned int)
Line
Count
Source
509
15.7k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
15.7k
    /*static*/ const unsigned int prime_mod [32] =
518
15.7k
    {
519
15.7k
      1,          /* For 1 << 0 */
520
15.7k
      2,
521
15.7k
      3,
522
15.7k
      7,
523
15.7k
      13,
524
15.7k
      31,
525
15.7k
      61,
526
15.7k
      127,
527
15.7k
      251,
528
15.7k
      509,
529
15.7k
      1021,
530
15.7k
      2039,
531
15.7k
      4093,
532
15.7k
      8191,
533
15.7k
      16381,
534
15.7k
      32749,
535
15.7k
      65521,      /* For 1 << 16 */
536
15.7k
      131071,
537
15.7k
      262139,
538
15.7k
      524287,
539
15.7k
      1048573,
540
15.7k
      2097143,
541
15.7k
      4194301,
542
15.7k
      8388593,
543
15.7k
      16777213,
544
15.7k
      33554393,
545
15.7k
      67108859,
546
15.7k
      134217689,
547
15.7k
      268435399,
548
15.7k
      536870909,
549
15.7k
      1073741789,
550
15.7k
      2147483647  /* For 1 << 31 */
551
15.7k
    };
552
553
15.7k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
15.7k
    return prime_mod[shift];
557
15.7k
  }
hb_hashmap_t<unsigned int, face_table_info_t, false>::prime_for(unsigned int)
Line
Count
Source
509
47.3k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
47.3k
    /*static*/ const unsigned int prime_mod [32] =
518
47.3k
    {
519
47.3k
      1,          /* For 1 << 0 */
520
47.3k
      2,
521
47.3k
      3,
522
47.3k
      7,
523
47.3k
      13,
524
47.3k
      31,
525
47.3k
      61,
526
47.3k
      127,
527
47.3k
      251,
528
47.3k
      509,
529
47.3k
      1021,
530
47.3k
      2039,
531
47.3k
      4093,
532
47.3k
      8191,
533
47.3k
      16381,
534
47.3k
      32749,
535
47.3k
      65521,      /* For 1 << 16 */
536
47.3k
      131071,
537
47.3k
      262139,
538
47.3k
      524287,
539
47.3k
      1048573,
540
47.3k
      2097143,
541
47.3k
      4194301,
542
47.3k
      8388593,
543
47.3k
      16777213,
544
47.3k
      33554393,
545
47.3k
      67108859,
546
47.3k
      134217689,
547
47.3k
      268435399,
548
47.3k
      536870909,
549
47.3k
      1073741789,
550
47.3k
      2147483647  /* For 1 << 31 */
551
47.3k
    };
552
553
47.3k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
47.3k
    return prime_mod[shift];
557
47.3k
  }
hb_hashmap_t<unsigned int, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
203k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
203k
    /*static*/ const unsigned int prime_mod [32] =
518
203k
    {
519
203k
      1,          /* For 1 << 0 */
520
203k
      2,
521
203k
      3,
522
203k
      7,
523
203k
      13,
524
203k
      31,
525
203k
      61,
526
203k
      127,
527
203k
      251,
528
203k
      509,
529
203k
      1021,
530
203k
      2039,
531
203k
      4093,
532
203k
      8191,
533
203k
      16381,
534
203k
      32749,
535
203k
      65521,      /* For 1 << 16 */
536
203k
      131071,
537
203k
      262139,
538
203k
      524287,
539
203k
      1048573,
540
203k
      2097143,
541
203k
      4194301,
542
203k
      8388593,
543
203k
      16777213,
544
203k
      33554393,
545
203k
      67108859,
546
203k
      134217689,
547
203k
      268435399,
548
203k
      536870909,
549
203k
      1073741789,
550
203k
      2147483647  /* For 1 << 31 */
551
203k
    };
552
553
203k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
203k
    return prime_mod[shift];
557
203k
  }
hb_hashmap_t<graph::overflow_record_t*, bool, false>::prime_for(unsigned int)
Line
Count
Source
509
144k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
144k
    /*static*/ const unsigned int prime_mod [32] =
518
144k
    {
519
144k
      1,          /* For 1 << 0 */
520
144k
      2,
521
144k
      3,
522
144k
      7,
523
144k
      13,
524
144k
      31,
525
144k
      61,
526
144k
      127,
527
144k
      251,
528
144k
      509,
529
144k
      1021,
530
144k
      2039,
531
144k
      4093,
532
144k
      8191,
533
144k
      16381,
534
144k
      32749,
535
144k
      65521,      /* For 1 << 16 */
536
144k
      131071,
537
144k
      262139,
538
144k
      524287,
539
144k
      1048573,
540
144k
      2097143,
541
144k
      4194301,
542
144k
      8388593,
543
144k
      16777213,
544
144k
      33554393,
545
144k
      67108859,
546
144k
      134217689,
547
144k
      268435399,
548
144k
      536870909,
549
144k
      1073741789,
550
144k
      2147483647  /* For 1 << 31 */
551
144k
    };
552
553
144k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
144k
    return prime_mod[shift];
557
144k
  }
hb_hashmap_t<unsigned int, graph::Lookup*, false>::prime_for(unsigned int)
Line
Count
Source
509
4.46k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
4.46k
    /*static*/ const unsigned int prime_mod [32] =
518
4.46k
    {
519
4.46k
      1,          /* For 1 << 0 */
520
4.46k
      2,
521
4.46k
      3,
522
4.46k
      7,
523
4.46k
      13,
524
4.46k
      31,
525
4.46k
      61,
526
4.46k
      127,
527
4.46k
      251,
528
4.46k
      509,
529
4.46k
      1021,
530
4.46k
      2039,
531
4.46k
      4093,
532
4.46k
      8191,
533
4.46k
      16381,
534
4.46k
      32749,
535
4.46k
      65521,      /* For 1 << 16 */
536
4.46k
      131071,
537
4.46k
      262139,
538
4.46k
      524287,
539
4.46k
      1048573,
540
4.46k
      2097143,
541
4.46k
      4194301,
542
4.46k
      8388593,
543
4.46k
      16777213,
544
4.46k
      33554393,
545
4.46k
      67108859,
546
4.46k
      134217689,
547
4.46k
      268435399,
548
4.46k
      536870909,
549
4.46k
      1073741789,
550
4.46k
      2147483647  /* For 1 << 31 */
551
4.46k
    };
552
553
4.46k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
4.46k
    return prime_mod[shift];
557
4.46k
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_vector_t<unsigned int, false>, false>::prime_for(unsigned int)
hb_hashmap_t<unsigned int, Triple, false>::prime_for(unsigned int)
Line
Count
Source
509
1.01M
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
1.01M
    /*static*/ const unsigned int prime_mod [32] =
518
1.01M
    {
519
1.01M
      1,          /* For 1 << 0 */
520
1.01M
      2,
521
1.01M
      3,
522
1.01M
      7,
523
1.01M
      13,
524
1.01M
      31,
525
1.01M
      61,
526
1.01M
      127,
527
1.01M
      251,
528
1.01M
      509,
529
1.01M
      1021,
530
1.01M
      2039,
531
1.01M
      4093,
532
1.01M
      8191,
533
1.01M
      16381,
534
1.01M
      32749,
535
1.01M
      65521,      /* For 1 << 16 */
536
1.01M
      131071,
537
1.01M
      262139,
538
1.01M
      524287,
539
1.01M
      1048573,
540
1.01M
      2097143,
541
1.01M
      4194301,
542
1.01M
      8388593,
543
1.01M
      16777213,
544
1.01M
      33554393,
545
1.01M
      67108859,
546
1.01M
      134217689,
547
1.01M
      268435399,
548
1.01M
      536870909,
549
1.01M
      1073741789,
550
1.01M
      2147483647  /* For 1 << 31 */
551
1.01M
    };
552
553
1.01M
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
1.01M
    return prime_mod[shift];
557
1.01M
  }
Unexecuted instantiation: hb_hashmap_t<hb::shared_ptr<hb_map_t>, unsigned int, false>::prime_for(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb::shared_ptr<hb_set_t>, false>::prime_for(unsigned int)
Unexecuted instantiation: hb_hashmap_t<unsigned int, OT::Feature const*, false>::prime_for(unsigned int)
hb_hashmap_t<hb_hashmap_t<unsigned int, Triple, false> const*, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
1.38k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
1.38k
    /*static*/ const unsigned int prime_mod [32] =
518
1.38k
    {
519
1.38k
      1,          /* For 1 << 0 */
520
1.38k
      2,
521
1.38k
      3,
522
1.38k
      7,
523
1.38k
      13,
524
1.38k
      31,
525
1.38k
      61,
526
1.38k
      127,
527
1.38k
      251,
528
1.38k
      509,
529
1.38k
      1021,
530
1.38k
      2039,
531
1.38k
      4093,
532
1.38k
      8191,
533
1.38k
      16381,
534
1.38k
      32749,
535
1.38k
      65521,      /* For 1 << 16 */
536
1.38k
      131071,
537
1.38k
      262139,
538
1.38k
      524287,
539
1.38k
      1048573,
540
1.38k
      2097143,
541
1.38k
      4194301,
542
1.38k
      8388593,
543
1.38k
      16777213,
544
1.38k
      33554393,
545
1.38k
      67108859,
546
1.38k
      134217689,
547
1.38k
      268435399,
548
1.38k
      536870909,
549
1.38k
      1073741789,
550
1.38k
      2147483647  /* For 1 << 31 */
551
1.38k
    };
552
553
1.38k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
1.38k
    return prime_mod[shift];
557
1.38k
  }
hb_hashmap_t<unsigned int, hb_vector_t<int, false> const*, false>::prime_for(unsigned int)
Line
Count
Source
509
499
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
499
    /*static*/ const unsigned int prime_mod [32] =
518
499
    {
519
499
      1,          /* For 1 << 0 */
520
499
      2,
521
499
      3,
522
499
      7,
523
499
      13,
524
499
      31,
525
499
      61,
526
499
      127,
527
499
      251,
528
499
      509,
529
499
      1021,
530
499
      2039,
531
499
      4093,
532
499
      8191,
533
499
      16381,
534
499
      32749,
535
499
      65521,      /* For 1 << 16 */
536
499
      131071,
537
499
      262139,
538
499
      524287,
539
499
      1048573,
540
499
      2097143,
541
499
      4194301,
542
499
      8388593,
543
499
      16777213,
544
499
      33554393,
545
499
      67108859,
546
499
      134217689,
547
499
      268435399,
548
499
      536870909,
549
499
      1073741789,
550
499
      2147483647  /* For 1 << 31 */
551
499
    };
552
553
499
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
499
    return prime_mod[shift];
557
499
  }
hb_hashmap_t<hb_vector_t<int, false> const*, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
960
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
960
    /*static*/ const unsigned int prime_mod [32] =
518
960
    {
519
960
      1,          /* For 1 << 0 */
520
960
      2,
521
960
      3,
522
960
      7,
523
960
      13,
524
960
      31,
525
960
      61,
526
960
      127,
527
960
      251,
528
960
      509,
529
960
      1021,
530
960
      2039,
531
960
      4093,
532
960
      8191,
533
960
      16381,
534
960
      32749,
535
960
      65521,      /* For 1 << 16 */
536
960
      131071,
537
960
      262139,
538
960
      524287,
539
960
      1048573,
540
960
      2097143,
541
960
      4194301,
542
960
      8388593,
543
960
      16777213,
544
960
      33554393,
545
960
      67108859,
546
960
      134217689,
547
960
      268435399,
548
960
      536870909,
549
960
      1073741789,
550
960
      2147483647  /* For 1 << 31 */
551
960
    };
552
553
960
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
960
    return prime_mod[shift];
557
960
  }
hb_hashmap_t<unsigned int, hb_pair_t<unsigned int, int>, false>::prime_for(unsigned int)
Line
Count
Source
509
8.15k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
8.15k
    /*static*/ const unsigned int prime_mod [32] =
518
8.15k
    {
519
8.15k
      1,          /* For 1 << 0 */
520
8.15k
      2,
521
8.15k
      3,
522
8.15k
      7,
523
8.15k
      13,
524
8.15k
      31,
525
8.15k
      61,
526
8.15k
      127,
527
8.15k
      251,
528
8.15k
      509,
529
8.15k
      1021,
530
8.15k
      2039,
531
8.15k
      4093,
532
8.15k
      8191,
533
8.15k
      16381,
534
8.15k
      32749,
535
8.15k
      65521,      /* For 1 << 16 */
536
8.15k
      131071,
537
8.15k
      262139,
538
8.15k
      524287,
539
8.15k
      1048573,
540
8.15k
      2097143,
541
8.15k
      4194301,
542
8.15k
      8388593,
543
8.15k
      16777213,
544
8.15k
      33554393,
545
8.15k
      67108859,
546
8.15k
      134217689,
547
8.15k
      268435399,
548
8.15k
      536870909,
549
8.15k
      1073741789,
550
8.15k
      2147483647  /* For 1 << 31 */
551
8.15k
    };
552
553
8.15k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
8.15k
    return prime_mod[shift];
557
8.15k
  }
hb_hashmap_t<hb_ot_name_record_ids_t, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
1.81k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
1.81k
    /*static*/ const unsigned int prime_mod [32] =
518
1.81k
    {
519
1.81k
      1,          /* For 1 << 0 */
520
1.81k
      2,
521
1.81k
      3,
522
1.81k
      7,
523
1.81k
      13,
524
1.81k
      31,
525
1.81k
      61,
526
1.81k
      127,
527
1.81k
      251,
528
1.81k
      509,
529
1.81k
      1021,
530
1.81k
      2039,
531
1.81k
      4093,
532
1.81k
      8191,
533
1.81k
      16381,
534
1.81k
      32749,
535
1.81k
      65521,      /* For 1 << 16 */
536
1.81k
      131071,
537
1.81k
      262139,
538
1.81k
      524287,
539
1.81k
      1048573,
540
1.81k
      2097143,
541
1.81k
      4194301,
542
1.81k
      8388593,
543
1.81k
      16777213,
544
1.81k
      33554393,
545
1.81k
      67108859,
546
1.81k
      134217689,
547
1.81k
      268435399,
548
1.81k
      536870909,
549
1.81k
      1073741789,
550
1.81k
      2147483647  /* For 1 << 31 */
551
1.81k
    };
552
553
1.81k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
1.81k
    return prime_mod[shift];
557
1.81k
  }
Unexecuted instantiation: hb_hashmap_t<hb_ot_name_record_ids_t, hb_array_t<char const>, false>::prime_for(unsigned int)
hb_hashmap_t<unsigned int, hb::unique_ptr<hb_blob_t>, false>::prime_for(unsigned int)
Line
Count
Source
509
85.7k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
85.7k
    /*static*/ const unsigned int prime_mod [32] =
518
85.7k
    {
519
85.7k
      1,          /* For 1 << 0 */
520
85.7k
      2,
521
85.7k
      3,
522
85.7k
      7,
523
85.7k
      13,
524
85.7k
      31,
525
85.7k
      61,
526
85.7k
      127,
527
85.7k
      251,
528
85.7k
      509,
529
85.7k
      1021,
530
85.7k
      2039,
531
85.7k
      4093,
532
85.7k
      8191,
533
85.7k
      16381,
534
85.7k
      32749,
535
85.7k
      65521,      /* For 1 << 16 */
536
85.7k
      131071,
537
85.7k
      262139,
538
85.7k
      524287,
539
85.7k
      1048573,
540
85.7k
      2097143,
541
85.7k
      4194301,
542
85.7k
      8388593,
543
85.7k
      16777213,
544
85.7k
      33554393,
545
85.7k
      67108859,
546
85.7k
      134217689,
547
85.7k
      268435399,
548
85.7k
      536870909,
549
85.7k
      1073741789,
550
85.7k
      2147483647  /* For 1 << 31 */
551
85.7k
    };
552
553
85.7k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
85.7k
    return prime_mod[shift];
557
85.7k
  }
hb_hashmap_t<hb_array_t<char const>, unsigned int, true>::prime_for(unsigned int)
Line
Count
Source
509
185
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
185
    /*static*/ const unsigned int prime_mod [32] =
518
185
    {
519
185
      1,          /* For 1 << 0 */
520
185
      2,
521
185
      3,
522
185
      7,
523
185
      13,
524
185
      31,
525
185
      61,
526
185
      127,
527
185
      251,
528
185
      509,
529
185
      1021,
530
185
      2039,
531
185
      4093,
532
185
      8191,
533
185
      16381,
534
185
      32749,
535
185
      65521,      /* For 1 << 16 */
536
185
      131071,
537
185
      262139,
538
185
      524287,
539
185
      1048573,
540
185
      2097143,
541
185
      4194301,
542
185
      8388593,
543
185
      16777213,
544
185
      33554393,
545
185
      67108859,
546
185
      134217689,
547
185
      268435399,
548
185
      536870909,
549
185
      1073741789,
550
185
      2147483647  /* For 1 << 31 */
551
185
    };
552
553
185
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
185
    return prime_mod[shift];
557
185
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
43
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
43
    /*static*/ const unsigned int prime_mod [32] =
518
43
    {
519
43
      1,          /* For 1 << 0 */
520
43
      2,
521
43
      3,
522
43
      7,
523
43
      13,
524
43
      31,
525
43
      61,
526
43
      127,
527
43
      251,
528
43
      509,
529
43
      1021,
530
43
      2039,
531
43
      4093,
532
43
      8191,
533
43
      16381,
534
43
      32749,
535
43
      65521,      /* For 1 << 16 */
536
43
      131071,
537
43
      262139,
538
43
      524287,
539
43
      1048573,
540
43
      2097143,
541
43
      4194301,
542
43
      8388593,
543
43
      16777213,
544
43
      33554393,
545
43
      67108859,
546
43
      134217689,
547
43
      268435399,
548
43
      536870909,
549
43
      1073741789,
550
43
      2147483647  /* For 1 << 31 */
551
43
    };
552
553
43
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
43
    return prime_mod[shift];
557
43
  }
hb_hashmap_t<hb_vector_t<bool, false> const*, hb_vector_t<unsigned char, false>, false>::prime_for(unsigned int)
Line
Count
Source
509
43
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
43
    /*static*/ const unsigned int prime_mod [32] =
518
43
    {
519
43
      1,          /* For 1 << 0 */
520
43
      2,
521
43
      3,
522
43
      7,
523
43
      13,
524
43
      31,
525
43
      61,
526
43
      127,
527
43
      251,
528
43
      509,
529
43
      1021,
530
43
      2039,
531
43
      4093,
532
43
      8191,
533
43
      16381,
534
43
      32749,
535
43
      65521,      /* For 1 << 16 */
536
43
      131071,
537
43
      262139,
538
43
      524287,
539
43
      1048573,
540
43
      2097143,
541
43
      4194301,
542
43
      8388593,
543
43
      16777213,
544
43
      33554393,
545
43
      67108859,
546
43
      134217689,
547
43
      268435399,
548
43
      536870909,
549
43
      1073741789,
550
43
      2147483647  /* For 1 << 31 */
551
43
    };
552
553
43
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
43
    return prime_mod[shift];
557
43
  }
Unexecuted instantiation: hb_hashmap_t<unsigned int, hb_pair_t<void const*, void const*>, false>::prime_for(unsigned int)
hb_hashmap_t<unsigned int, TripleDistances, false>::prime_for(unsigned int)
Line
Count
Source
509
1.32k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
1.32k
    /*static*/ const unsigned int prime_mod [32] =
518
1.32k
    {
519
1.32k
      1,          /* For 1 << 0 */
520
1.32k
      2,
521
1.32k
      3,
522
1.32k
      7,
523
1.32k
      13,
524
1.32k
      31,
525
1.32k
      61,
526
1.32k
      127,
527
1.32k
      251,
528
1.32k
      509,
529
1.32k
      1021,
530
1.32k
      2039,
531
1.32k
      4093,
532
1.32k
      8191,
533
1.32k
      16381,
534
1.32k
      32749,
535
1.32k
      65521,      /* For 1 << 16 */
536
1.32k
      131071,
537
1.32k
      262139,
538
1.32k
      524287,
539
1.32k
      1048573,
540
1.32k
      2097143,
541
1.32k
      4194301,
542
1.32k
      8388593,
543
1.32k
      16777213,
544
1.32k
      33554393,
545
1.32k
      67108859,
546
1.32k
      134217689,
547
1.32k
      268435399,
548
1.32k
      536870909,
549
1.32k
      1073741789,
550
1.32k
      2147483647  /* For 1 << 31 */
551
1.32k
    };
552
553
1.32k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
1.32k
    return prime_mod[shift];
557
1.32k
  }
hb_hashmap_t<unsigned int, contour_point_vector_t, false>::prime_for(unsigned int)
Line
Count
Source
509
2.33k
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
2.33k
    /*static*/ const unsigned int prime_mod [32] =
518
2.33k
    {
519
2.33k
      1,          /* For 1 << 0 */
520
2.33k
      2,
521
2.33k
      3,
522
2.33k
      7,
523
2.33k
      13,
524
2.33k
      31,
525
2.33k
      61,
526
2.33k
      127,
527
2.33k
      251,
528
2.33k
      509,
529
2.33k
      1021,
530
2.33k
      2039,
531
2.33k
      4093,
532
2.33k
      8191,
533
2.33k
      16381,
534
2.33k
      32749,
535
2.33k
      65521,      /* For 1 << 16 */
536
2.33k
      131071,
537
2.33k
      262139,
538
2.33k
      524287,
539
2.33k
      1048573,
540
2.33k
      2097143,
541
2.33k
      4194301,
542
2.33k
      8388593,
543
2.33k
      16777213,
544
2.33k
      33554393,
545
2.33k
      67108859,
546
2.33k
      134217689,
547
2.33k
      268435399,
548
2.33k
      536870909,
549
2.33k
      1073741789,
550
2.33k
      2147483647  /* For 1 << 31 */
551
2.33k
    };
552
553
2.33k
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
2.33k
    return prime_mod[shift];
557
2.33k
  }
hb_hashmap_t<unsigned int, hb_array_t<char const>, false>::prime_for(unsigned int)
Line
Count
Source
509
267
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
267
    /*static*/ const unsigned int prime_mod [32] =
518
267
    {
519
267
      1,          /* For 1 << 0 */
520
267
      2,
521
267
      3,
522
267
      7,
523
267
      13,
524
267
      31,
525
267
      61,
526
267
      127,
527
267
      251,
528
267
      509,
529
267
      1021,
530
267
      2039,
531
267
      4093,
532
267
      8191,
533
267
      16381,
534
267
      32749,
535
267
      65521,      /* For 1 << 16 */
536
267
      131071,
537
267
      262139,
538
267
      524287,
539
267
      1048573,
540
267
      2097143,
541
267
      4194301,
542
267
      8388593,
543
267
      16777213,
544
267
      33554393,
545
267
      67108859,
546
267
      134217689,
547
267
      268435399,
548
267
      536870909,
549
267
      1073741789,
550
267
      2147483647  /* For 1 << 31 */
551
267
    };
552
553
267
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
267
    return prime_mod[shift];
557
267
  }
hb_hashmap_t<hb_vector_t<OT::HBFixed<OT::NumType<true, short, 2u>, 14u>, false> const*, unsigned int, false>::prime_for(unsigned int)
Line
Count
Source
509
43
  {
510
    /* Following comment and table copied from glib. */
511
    /* Each table size has an associated prime modulo (the first prime
512
     * lower than the table size) used to find the initial bucket. Probing
513
     * then works modulo 2^n. The prime modulo is necessary to get a
514
     * good distribution with poor hash functions.
515
     */
516
    /* Not declaring static to make all kinds of compilers happy... */
517
43
    /*static*/ const unsigned int prime_mod [32] =
518
43
    {
519
43
      1,          /* For 1 << 0 */
520
43
      2,
521
43
      3,
522
43
      7,
523
43
      13,
524
43
      31,
525
43
      61,
526
43
      127,
527
43
      251,
528
43
      509,
529
43
      1021,
530
43
      2039,
531
43
      4093,
532
43
      8191,
533
43
      16381,
534
43
      32749,
535
43
      65521,      /* For 1 << 16 */
536
43
      131071,
537
43
      262139,
538
43
      524287,
539
43
      1048573,
540
43
      2097143,
541
43
      4194301,
542
43
      8388593,
543
43
      16777213,
544
43
      33554393,
545
43
      67108859,
546
43
      134217689,
547
43
      268435399,
548
43
      536870909,
549
43
      1073741789,
550
43
      2147483647  /* For 1 << 31 */
551
43
    };
552
553
43
    if (unlikely (shift >= ARRAY_LENGTH (prime_mod)))
554
0
      return prime_mod[ARRAY_LENGTH (prime_mod) - 1];
555
556
43
    return prime_mod[shift];
557
43
  }
558
};
559
560
/*
561
 * hb_map_t
562
 */
563
564
struct hb_map_t : hb_hashmap_t<hb_codepoint_t,
565
             hb_codepoint_t,
566
             true>
567
{
568
  using hashmap = hb_hashmap_t<hb_codepoint_t,
569
             hb_codepoint_t,
570
             true>;
571
572
  ~hb_map_t () = default;
573
1.51M
  hb_map_t () : hashmap () {}
574
0
  hb_map_t (const hb_map_t &o) : hashmap ((hashmap &) o) {}
575
0
  hb_map_t (hb_map_t &&o)  noexcept : hashmap (std::move ((hashmap &) o)) {}
576
0
  hb_map_t& operator= (const hb_map_t&) = default;
577
0
  hb_map_t& operator= (hb_map_t&&) = default;
578
0
  hb_map_t (std::initializer_list<hb_codepoint_pair_t> lst) : hashmap (lst) {}
579
  template <typename Iterable,
580
      hb_requires (hb_is_iterable (Iterable))>
581
1.29k
  hb_map_t (const Iterable &o) : hashmap (o) {}
582
};
583
584
585
#endif /* HB_MAP_HH */