Revert "[map] Allow std::move-ing keys into the map"

This reverts commit f657ef7e57.

This breaks many compilers with messages like this:

hb-subset-plan.hh:226: undefined reference to `OT::head::tableTag'

I'm out of my depth re how to fix it.
This commit is contained in:
Behdad Esfahbod 2022-11-18 19:35:49 -07:00
parent 039e476bac
commit 3ff8abf272
2 changed files with 10 additions and 11 deletions

View File

@ -186,7 +186,7 @@ struct hb_hashmap_t
{
if (old_items[i].is_real ())
{
set_with_hash (std::move (old_items[i].key),
set_with_hash (old_items[i].key,
old_items[i].hash,
std::move (old_items[i].value));
}
@ -199,9 +199,7 @@ struct hb_hashmap_t
}
template <typename VV>
bool set (const K &key, VV&& value) { return set_with_hash (hb_ridentity (key), hb_hash (key), std::forward<VV> (value)); }
template <typename VV>
bool set (K&& key, VV&& value) { return set_with_hash (std::move (key), hb_hash (key), std::forward<VV> (value)); }
bool set (K key, VV&& value) { return set_with_hash (key, hb_hash (key), std::forward<VV> (value)); }
const V& get (K key) const
{
@ -210,8 +208,7 @@ struct hb_hashmap_t
return item.is_real () && item == key ? item.value : item_t::default_value ();
}
void del (const K &key) { set_with_hash (hb_ridentity (key), hb_hash (key), item_t::default_value (), true); }
void del (K&& key) { set_with_hash (std::move (key), hb_hash (key), item_t::default_value (), true); }
void del (K key) { set_with_hash (key, hb_hash (key), item_t::default_value (), true); }
/* Has interface. */
typedef const V& value_t;
@ -327,8 +324,8 @@ struct hb_hashmap_t
protected:
template <typename KK, typename VV>
bool set_with_hash (KK&& key, uint32_t hash, VV&& value, bool is_delete=false)
template <typename VV>
bool set_with_hash (K key, uint32_t hash, VV&& value, bool is_delete=false)
{
if (unlikely (!successful)) return false;
if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
@ -344,7 +341,7 @@ struct hb_hashmap_t
population--;
}
item.key = std::forward<KK> (key);
item.key = key;
item.value = std::forward<VV> (value);
item.hash = hash;
item.set_used (true);

View File

@ -228,8 +228,10 @@ main (int argc, char **argv)
{
hb_hashmap_t<hb::unique_ptr<hb_set_t>, hb::unique_ptr<hb_set_t>> m;
m.set (hb::unique_ptr<hb_set_t> (hb_set_get_empty ()),
hb::unique_ptr<hb_set_t> (hb_set_get_empty ()));
// Doesn't work.
// See commit f657ef7e57c889309c2d9d37934368ca255f9d5b and its revert.
//m.set (hb::unique_ptr<hb_set_t> (hb_set_get_empty ()),
// hb::unique_ptr<hb_set_t> (hb_set_get_empty ()));
m.get (hb::unique_ptr<hb_set_t> (hb_set_get_empty ()));
m.iter_ref ();
m.keys_ref ();