src/hb-map.hh


Log

Author Commit Date CI Message
Behdad Esfahbod 86a763c6 2022-11-21T20:53:44 [map] Make keys moveable
Behdad Esfahbod cf20d2ec 2022-11-21T20:46:01 [map] Take const key
Behdad Esfahbod 3d1c76f7 2022-11-21T19:40:32 [serializer] Don't hash objects twice
Behdad Esfahbod 3ff8abf2 2022-11-18T19:35:49 Revert "[map] Allow std::move-ing keys into the map" This reverts commit f657ef7e57c889309c2d9d37934368ca255f9d5b. 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.
Behdad Esfahbod a3a218ed 2022-11-18T19:24:41 [map] Add a couple more sink interfaces
Behdad Esfahbod f657ef7e 2022-11-18T19:17:03 [map] Allow std::move-ing keys into the map
Behdad Esfahbod a1768ad8 2022-11-18T19:08:34 [map] Fix use of !=
Behdad Esfahbod a9c6a20b 2022-11-18T18:29:12 [map] Support moving value in sink interface
Behdad Esfahbod 3ead9863 2022-11-18T16:43:47 [map] Add size()
Behdad Esfahbod 42db8be1 2022-11-18T16:41:50 [map] Minor remove if condition
Behdad Esfahbod 4ec70698 2022-11-18T16:39:30 [map] Rewrite hash() as dagger Somehow our daggers instead of for loop save size. I cannot pinpoint why, other than maybe not inlining.
Behdad Esfahbod 025a68cb 2022-11-18T16:33:04 [map] Optimize copy resizing logic
Behdad Esfahbod f1d71687 2022-11-18T16:31:27 [map] Change bucket_for_hash() to item_for_hash()
Behdad Esfahbod d012f9a9 2022-11-18T16:29:06 [map] Change bucket_for() to item_for()
Behdad Esfahbod 81a57300 2022-11-17T16:59:36 [map] Optimize storage
Behdad Esfahbod ae080bf2 2022-11-17T16:34:58 [map] Initialize key and value explicitly If they are of int time they won't be initialized otherwise.
Behdad Esfahbod ff0bb748 2022-11-17T16:17:37 [map] Call item_t constructor/destructor directly
Behdad Esfahbod 5c887159 2022-11-17T16:14:16 [map] Add item_t.destruct()
Behdad Esfahbod 7f830408 2022-11-17T16:10:37 [map] Simplify (de)construction of item_t
Behdad Esfahbod 99103bd9 2022-11-17T15:57:06 [map] Destruct objects when clearing
Behdad Esfahbod e93c01c3 2022-11-17T15:50:00 [map] Rename item clear() to construct()
Behdad Esfahbod 89637746 2022-11-17T15:25:45 [map] Don't resize map if not necessary
Behdad Esfahbod 7595fa2d 2022-11-17T15:19:29 [map] Fix copy-assignment operator Ouch!
Behdad Esfahbod 41f4bdac 2022-11-17T15:16:00 [map] Fix resize during copy-construction/assignment
Behdad Esfahbod 7bd10172 2022-11-17T15:01:55 [map] Minor use hb_iter instead of hb_array
Behdad Esfahbod 238fc147 2022-11-17T14:58:50 [map] Simplify iterators
Behdad Esfahbod 410c14bf 2022-11-17T14:53:00 [map] Fix equality Ouch!
Qunxin Liu dbb7f47b 2022-11-03T11:55:41 fix bug in hb_hashmap_t has() interface It was not working when the value type is hb_bytes_t because hb_array_t overloaded operator &
Behdad Esfahbod bcd59b51 2022-07-20T15:57:09 [set/map] Remove init_shallow/fini_shallow()
Behdad Esfahbod e1b5f2f8 2022-07-20T15:03:20 [object] Call destructor in hb_object_destroy()
Behdad Esfahbod 9ea4ab60 2022-07-20T14:57:32 [object] Call constructor
Behdad Esfahbod 61c04384 2022-07-20T14:43:58 [map] Allow geting non-const value pointer out with has()
Behdad Esfahbod 00cfc5c1 2022-07-20T14:38:28 [map] Don't set out value in has() if not found
Behdad Esfahbod 485f0432 2022-07-20T14:34:55 [map] Enable using hashmap with unique_ptr
Qunxin Liu 2a4773e4 2022-06-21T19:29:52 add option "--instance", store axes_location in subset_plan and drop all variation tables when all axes are pinned at default
Behdad Esfahbod d8f9d517 2022-07-12T13:19:31 [hashmap] Add keys_ref() and values_ref()
Behdad Esfahbod 5da341ce 2022-06-27T13:29:22 [map] Another try at hiding minus1 To fix https://github.com/harfbuzz/harfbuzz/issues/3684
Behdad Esfahbod c72d3104 2022-06-27T13:31:05 [map] Return const reference in operator[]
Behdad Esfahbod 69d53f3e 2022-06-27T13:17:10 [map] Make default_value() inline See if it make fix https://github.com/harfbuzz/harfbuzz/issues/3684
Behdad Esfahbod 88f00ecb 2022-06-03T01:30:27 [map] Fix iter_ref () and test it
Behdad Esfahbod 25f57230 2022-06-03T01:11:22 [map] Return references from new iter_ref()
Behdad Esfahbod 997d9cc4 2022-06-02T18:04:12 [map] Make unique_ptr hashable
Behdad Esfahbod 8bb2a332 2022-06-02T15:18:23 [map] Remove unneeded assignment
Behdad Esfahbod e9407a2b 2022-06-02T11:29:44 Use shared_ptr<hb_set_t> in one place See if valgrind is happy...
Behdad Esfahbod b9230c54 2022-06-02T11:18:38 [map] Fix has()
Behdad Esfahbod 97ea10a6 2022-06-02T11:14:17 Remove old nullptr_t hacks Were used for hashmap before.
Behdad Esfahbod 3f78a71c 2022-06-02T11:11:35 [map] Finally! Just can usd hb_hashmap_t<obj_t, obj_t> Yay!
Behdad Esfahbod 0ccab339 2022-06-02T10:43:36 [map] Remove invalid-key template arguments since unused
Behdad Esfahbod 3f6a8f69 2022-06-02T10:36:07 [map] Remove invalid-key special-casing Can override invalid-key value now.
Behdad Esfahbod 5328b73f 2022-06-02T10:32:56 [map] Reduce map item size again
Behdad Esfahbod 4f58ae60 2022-06-02T10:13:55 [map] Keep is_used, is_tombstone as booleans
Behdad Esfahbod ea2dd54b 2022-05-26T11:31:28 [map] Place item hash between key and value, not after them This way if only one of key and value is 64bit (eg. pointer), and other is 32bit, the whole item will fit in 128bit, whereas before it would have been bumped up to 196 if only value was 64bit (a common use-case for us.)
Behdad Esfahbod cbcdf442 2022-05-26T11:20:27 [map] Speed up map's own hash()
Behdad Esfahbod de33ef61 2022-05-26T11:07:21 [map] Add TODO item
Behdad Esfahbod b99efa6c 2022-05-28T05:16:34 [map] Minor: use const reference in has()
Behdad Esfahbod 2fdb7616 2022-05-19T16:00:43 [map Further adjust hash function
Behdad Esfahbod 01fc90b6 2022-05-19T16:00:06 [map] Adjust hash function
Behdad Esfahbod 58f848da 2022-05-19T15:42:54 [set/map] Adjust hash function return type
Behdad Esfahbod 561e02fe 2022-05-19T13:38:52 [map] Make hb_map_t hashable
Behdad Esfahbod ad176990 2022-05-19T13:36:12 [map] Add is_equal() / towards making hb_map_t hashable New API: + hb_map_is_equal()
Behdad Esfahbod f82ee17a 2022-05-18T12:17:43 [map] Pre-size map in constructor if we can
Behdad Esfahbod 7fa580bc 2022-05-12T13:05:32 [map] Fix map copy/move constructors to actually work Ouch!
Garret Rieger e30511a8 2022-01-14T16:20:31 [map] Correct previous commit, if (...) was reversed.
Garret Rieger ff4e8c7e 2022-01-14T16:20:31 [map] Fix bad memory access if hb_map.fini() was called twice.
Behdad Esfahbod 8a69e006 2022-01-13T16:17:34 [meta] Use std::addressof() instead of hb_addressof()
Behdad Esfahbod 47afb3ef 2022-01-13T15:26:07 [meta] Replace hb_is_pointer with std::is_pointer
Behdad Esfahbod 956e0a4d 2022-01-13T15:06:58 [map] Destruct objects
Behdad Esfahbod 985b63b3 2022-01-13T13:33:07 [map] Allow invalid items to be pointer to static object By derefencing them when necessary. Also, we do not rely on trivially-copyable, so remove that assertion.
Behdad Esfahbod 5a91db11 2022-01-13T12:44:48 [map] Remove constexpr invalid items These were non-workable in the general case, eg std::string.
Behdad Esfahbod 114046dc 2022-01-13T12:38:26 [map] Construct objects
Behdad Esfahbod ca4f56bd 2022-01-13T11:48:34 [map] Massage some more Towards being able to store arbitrary types.
Behdad Esfahbod 74811c50 2022-01-10T14:57:38 [map] Map == / != use correct types
Behdad Esfahbod ce7f19a2 2022-01-10T14:40:27 Revert "[map] Actually use k/v invalid types for declaration!" This reverts commit 6f559346ac70fd188cb22d41f4b03ec227feee25. Err. My bad.
Behdad Esfahbod 6f559346 2022-01-10T14:29:36 [map] Actually use k/v invalid types for declaration!
Behdad Esfahbod 394f7729 2021-11-19T11:49:23 [map] Allow storing classes in the hashmap Fixes https://github.com/harfbuzz/harfbuzz/issues/3293 The trick was to change the type of the invalid key/value to be non-class.
Behdad Esfahbod b1cd0dce 2021-11-02T17:56:11 [map] Add INVALID_KEY and INVALID_VALUE
Behdad Esfahbod 59d8f6c8 2021-11-02T10:33:53 [map] Fix copy assignment operator
Behdad Esfahbod 943921cf 2021-11-02T00:26:46 [meta] Use more std type_traits
Behdad Esfahbod 811f80a7 2021-11-02T00:14:34 [algs] Use std::move instead of hb_move()
Behdad Esfahbod 4c6fd7cd 2021-11-01T23:13:34 [map] Try moving items when resizing
Behdad Esfahbod a28ea8d7 2021-11-01T22:50:54 Simplify swap()
Behdad Esfahbod 94158316 2021-11-01T22:47:26 [map] Add iterable constructor
Behdad Esfahbod a03b9b14 2021-11-01T22:45:11 [map] Add initializer_list and swap()
Behdad Esfahbod c30f6834 2021-11-01T22:29:14 [map] Add 5 methods
Behdad Esfahbod d3e09bf4 2021-08-24T10:31:49 [set] Make all operators null-safe again Changed my mind. Also for hb_map_clear(). Part of https://github.com/harfbuzz/harfbuzz/pull/3162
Garret Rieger c08f1b89 2021-08-10T12:29:32 [map] fix incorrect population count in hash map. If the same key was set twice the population was being incorrectly incremented.
Behdad Esfahbod 2337f0d0 2021-07-08T10:58:50 Internally use hb_malloc/.../hb_free instead of malloc/.../free Redefining those stock names as macros was conflicting with gcc 10 headers. Fixes https://github.com/harfbuzz/harfbuzz/issues/3044
Behdad Esfahbod a8f9f85a 2021-03-29T18:12:05 [map] Return success from ->set()
Behdad Esfahbod 2fbd34f8 2020-06-28T22:41:09 m[set/map] Add operator bool() Probably should use in places..
Behdad Esfahbod 2d39031f 2020-06-28T20:48:48 [buffer/set/map] Move immutable check only to C API boundary The immutable objects are a concept only enforced by the C API. So move checks only to that region. This does assume that the rest of the code is careful not getting into these internal methods on immutable objects, which something we do, but have no way of enforcing (currently). .
Behdad Esfahbod 6a45df0a 2020-07-08T18:17:40 Fix -Wambiguous-reversed-operator warning Fixes https://github.com/harfbuzz/harfbuzz/issues/2554
Ebrahim Byagowi e541fb47 2020-06-21T09:49:48 minor, replace single hb_apply daggers with foreach
Behdad Esfahbod a7df5a7b 2020-04-23T10:50:02 [hashmap] Minor
Ebrahim Byagowi 2dda6dd7 2020-04-20T14:12:45 minor, tweak spacing turn 8 spaces to tab, add space before Null/Crap
Garret Rieger be5cdcdf 2019-10-22T11:55:04 Store the hash value of a key in item_t in hb_map to reduce the number of hash computations.
Behdad Esfahbod e0315b4a 2019-05-10T19:48:02 [meta] is_integer -> is_integral
Garret Rieger 971020ec 2019-05-08T16:31:52 Add sink support for hb_hashmap_t and a reverse call to hb_pair_t.
Behdad Esfahbod c9b287a8 2019-05-09T12:43:57 Add hb_lidentity(), and rename hb_rvalue() to hb_ridentity()
Behdad Esfahbod 27b20930 2019-05-08T15:32:57 [map] Return rvalues from keys()/values()
Behdad Esfahbod 372c5b97 2019-05-08T15:28:39 [map] Fix bots Older compilers don't like calling iter() from return-type decltype() ../src/hb-map.hh:226:12: error: cannot call member function 'decltype ((((+ hb_array(((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::items, (((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::mask ? (((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::mask + 1) : 0))) | hb_filter((& hb_hashmap_t<K, V, kINVALID, vINVALID>::item_t:: is_real))) | hb_map((& hb_hashmap_t<K, V, kINVALID, vINVALID>::item_t:: get_pair)))) hb_hashmap_t<K, V, kINVALID, vINVALID>::iter() const [with K = const hb_serialize_context_t::object_t*; V = unsigned int; K kINVALID = 0u; V vINVALID = 0u; decltype ((((+ hb_array(((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::items, (((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::mask ? (((const hb_hashmap_t<K, V, kINVALID, vINVALID>*)this)->hb_hashmap_t<K, V, kINVALID, vINVALID>::mask + 1) : 0))) | hb_filter((& hb_hashmap_t<K, V, kINVALID, vINVALID>::item_t:: is_real))) | hb_map((& hb_hashmap_t<K, V, kINVALID, vINVALID>::item_t:: get_pair)))) = hb_map_iter_t<hb_filter_iter_t<hb_array_t<hb_hashmap_t<const hb_serialize_context_t::object_t*, unsigned int, 0u, 0u>::item_t>, bool (hb_hashmap_t<const hb_serialize_context_t::object_t*, unsigned int, 0u, 0u>::item_t::*)() const, const<anonymous struct>&, 0u>, hb_pair_t<const hb_serialize_context_t::object_t*, unsigned int> (hb_hashmap_t<const hb_serialize_context_t::object_t*, unsigned int, 0u, 0u>::item_t::*)() const, 0u>]' without object + iter() ^ ../src/hb-meta.hh:58:41: note: in definition of macro 'HB_AUTO_RETURN' #define HB_AUTO_RETURN(E) -> decltype ((E)) { return (E); } ^