/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&) consthb_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&) constLine | 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 */ |