src/hb-set.hh


Log

Author Commit Date CI Message
Behdad Esfahbod aa233ece 2025-03-12T22:59:07 [bit-vector] Add a hb_bit_vector_t type Unused.
Behdad Esfahbod c05002af 2025-02-05T16:46:13 [set] Add may_have() as alias for get()
Behdad Esfahbod 255dadc1 2025-02-04T22:02:11 [set] Speed up may_intersect()
Behdad Esfahbod 7862c7c5 2025-02-04T21:37:27 Rename a method again
Behdad Esfahbod 95eefa38 2025-02-04T19:16:57 [set] Add a brute-force intersects(other_set)
Behdad Esfahbod 3d75d445 2024-05-11T08:58:58 [set] Clarify add_range() params
Bruce Mitchener 3cfdbd67 2024-02-16T23:41:55 Use `noexcept` on swap, move constructors, etc.
Behdad Esfahbod cdcad93b 2023-11-03T12:45:16 [set] Mark as realloc-movable
Behdad Esfahbod 867640af 2023-07-14T13:09:16 Revert "[set] Add test_and_add / test_and_del" This reverts commit de1237fbf2660b5952dde4db171a62d9b1a77c92. This seems to be a net loss.
Behdad Esfahbod de1237fb 2023-07-14T12:38:56 [set] Add test_and_add / test_and_del Use in graph.
Behdad Esfahbod ca27925d 2023-06-03T16:18:15 Use hb_codepoint_pair_t in more places
Behdad Esfahbod 5153218b 2023-01-05T16:26:41 [set] Add hb_set_is_inverted()
Behdad Esfahbod 35f46e74 2023-01-04T17:12:08 [map] Add hb_map_keys() and hb_map_values()
Behdad Esfahbod d2a2670e 2022-11-28T19:42:27 [iter] Simplify has() interface implementations
Behdad Esfahbod bcd59b51 2022-07-20T15:57:09 [set/map] Remove init_shallow/fini_shallow()
Behdad Esfahbod 97ea10a6 2022-06-02T11:14:17 Remove old nullptr_t hacks Were used for hashmap before.
Behdad Esfahbod 58f848da 2022-05-19T15:42:54 [set/map] Adjust hash function return type
Behdad Esfahbod 0623aa59 2022-05-19T14:12:42 [benchmark-set] Add benchmark for set copy
Behdad Esfahbod 124f9aeb 2022-05-19T12:58:02 [set] Make hb_set_t hashable
Behdad Esfahbod 1f578b5a 2022-05-18T15:24:40 [set] Add pre-allocation internal API
Behdad Esfahbod 7fa580bc 2022-05-12T13:05:32 [map] Fix map copy/move constructors to actually work Ouch!
Behdad Esfahbod a09dd87c 2022-05-12T12:58:07 [set] Fix set copy/move constructors to actually work Ouch!
Behdad Esfahbod c81198b5 2022-05-12T11:58:37 [set] Tweak move operators a bit Should be equivalent.
Behdad Esfahbod 0a388785 2022-03-25T09:42:36 [set] Minor touch-up on the previous commit
Andrew John 01829882 2022-03-25T08:36:44 [set] Add call to export set contents to an array. (#3500) [set] Add hb_set_next_many.
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 811f80a7 2021-11-02T00:14:34 [algs] Use std::move instead of hb_move()
Behdad Esfahbod 3604f5f2 2021-11-01T22:37:42 [algs] Include <initializer_list>
Behdad Esfahbod e97e7996 2021-11-01T21:34:46 Verbiage
Behdad Esfahbod 34fa5e29 2021-11-01T21:25:03 [set] More default operators
Behdad Esfahbod dcd18da6 2021-11-01T20:55:30 [set] Add standard the 5 standard methods & tests
Behdad Esfahbod 93ac700d 2021-08-29T10:32:40 [set] Add copy-constructor/assignment again
Behdad Esfahbod f0c3804f 2021-08-17T15:37:19 [set] Add hb_bit_set_invertible_t and resurrect hb_set_invert() Implementation is NOT complete yet.
Behdad Esfahbod b5cdbdc0 2021-08-17T10:53:08 [set] Turn hb_set_t into instance of template taking implementation t
Behdad Esfahbod fad452bf 2021-08-16T20:48:24 [set] Move main functionality into hb_bit_set_t To add inversion on top in hb_invertible_set_t and use that as hb_set_t.
Behdad Esfahbod f245dc4d 2021-08-15T12:40:36 [set] Whitespace
Behdad Esfahbod 9b390f8c 2021-08-15T12:34:55 [set] Move page_t into hb-bit-page.hh
Behdad Esfahbod 0c3e02ee 2021-08-15T12:10:13 [set] Add "inverted" to page_t::is_empty()
Behdad Esfahbod 9bd64fa0 2021-08-15T11:42:16 [set] Add "inverted" to page_t::next/prev()
Behdad Esfahbod c88e7ec9 2021-08-15T11:39:31 [set] Add page_t::elt_maybe_invert()
Behdad Esfahbod 9449cfee 2021-08-15T11:35:33 [set] Simplify page_t::next/prev()
Behdad Esfahbod 4394ee1f 2021-08-15T11:28:09 [set] Add inverted to page_t::get_min/max()
Behdad Esfahbod 0dcd9b15 2021-08-15T11:11:10 [set] Add page_t::set_range()
Behdad Esfahbod cb273fd1 2021-08-15T11:09:08 [set] Add page_t::set()
Behdad Esfahbod 32bbf53d 2021-08-15T11:06:52 [set] Minor rewrite one cmp() in term of other
Behdad Esfahbod 2d54c346 2021-07-28T18:20:53 [subset/VarStore] Fix OOM in fuzzer test The test in question is the one added in c68a00b92eb62fdc79f9a2bd1fc7a6acc24a3602. Culprit is that it's allocating lots of memory because of region_indices that are out-of-range anyway. So, try to filter those out first.
Behdad Esfahbod bf2c87bf 2021-07-27T13:10:41 Add hb_memcpy() that does len=0 check
Behdad Esfahbod b235511e 2021-07-23T12:15:15 Merge pull request #3021 from googlefonts/stable_api [subset] update hb_subset api with final changes before going stable.
Garret Rieger c581d11e 2021-07-22T14:04:39 [set] in hb_set_set() avoid calling memcpy on nullptr.
Behdad Esfahbod 03cd9c5c 2021-07-22T11:27:33 Align lfind() API to match bfind()
Behdad Esfahbod bb48bf52 2021-07-08T10:53:45 Rename misc uses of "free" In preparation for fixing https://github.com/harfbuzz/harfbuzz/issues/3044
Behdad Esfahbod bc33b87f 2021-06-09T11:51:32 [set] Use references, not pointers, in internal C++ API
Behdad Esfahbod 9cfac093 2021-06-09T11:41:59 [set] Add copy constructor/assignment
Garret Rieger 466e1fdf 2021-05-26T14:22:21 [subset] remove unnessecary brackets.
Garret Rieger 58323729 2021-05-26T14:06:02 Add cmp() method for major to page map.
Garret Rieger 2c137045 2021-05-20T16:22:04 [subset] Optimize set iteration by caching the last found page map index. Reuse it if possible on consecutive calls to next(). Will signifcantly speed up cases where the entire set is iterated. In local testing iterating a very large set was 10x faster.
Behdad Esfahbod 9e5738a8 2021-05-26T15:12:39 [set] Okay, giving up on constexpr till C++14 ../src/hb-set.hh:213:89: error: call to non-'constexpr' function 'const elt_t& hb_vector_size_t<elt_t, byte_size>::operator[](unsigned int) const [with elt_t = long long unsigned int; unsigned int byte_size = 64]'
Behdad Esfahbod 90fa558a 2021-05-26T15:05:48 [set] Another try at constexpr to make msvc happy
Behdad Esfahbod bf5d4a63 2021-05-26T14:27:02 [set] Add TODO
Behdad Esfahbod 11d03f1f 2021-05-26T14:26:05 [set] Mark a couple methods as constexpr
Behdad Esfahbod d2829ad3 2021-05-26T14:24:27 [set] Refactor code into page_t::is_subset()
Behdad Esfahbod e47e44a8 2021-05-26T14:19:27 [set] Whitespace
Kurt Kartaltepe 2000f47a 2021-05-19T00:34:09 [set] Compute is_subset by comparing pages. Test subsets one page at a time instead of by codepoints. On my machine this is about 250x faster than the previous implementation.
Garret Rieger 425ba1f4 2021-04-19T18:01:24 [subset] fixes infinite loop in hb_set_get_max(). Fixes https://oss-fuzz.com/testcase-detail/5363902507515904
Behdad Esfahbod 092094f7 2021-04-01T15:47:21 Use as_array() and range loops in a few places
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 6d83d440 2020-06-28T21:02:51 m[set] Recover set from error in .reset()
Behdad Esfahbod 881ad720 2021-01-21T14:27:45 [algs] Remove passthru declaration Let compiler figure it out.
Behdad Esfahbod ca0b7afe 2021-01-21T12:18:48 [set] Use hb_fill()
Garret Rieger 33368a12 2021-01-21T11:06:58 uint32_t to unsigned in hb-set.hh
Garret Rieger 2a0d0b90 2021-01-21T10:45:09 Make set clear work even when set is in failed state.
Garret Rieger 0ba73e98 2020-09-16T13:56:33 [ENOMEM] handle allocation failures during page compaction.
Garret Rieger a4c3732f 2020-09-16T12:35:09 [ENOMEM] fix set clear() causing corruption if the set is in_error().
Garret Rieger bbbcad0d 2020-09-16T11:19:40 Revert "[ENOMEM] don't perform set process operations if the other set is in an error state." This reverts commit f3929abafe3b64f15d0dc2d21ad7b493eeb92dfe.
Garret Rieger f3929aba 2020-09-15T13:06:36 [ENOMEM] don't perform set process operations if the other set is in an error state. Running a process while the other set is in an error state can potentially corrupt this sets map map (for example by overwritting all of the major values with 0).
Behdad Esfahbod 689f3f57 2020-04-23T10:51:12 [set] Add << overload for range-sink
Ebrahim Byagowi 2dda6dd7 2020-04-20T14:12:45 minor, tweak spacing turn 8 spaces to tab, add space before Null/Crap
ariza d0aaba5c 2020-02-26T09:35:32 fixes oss-fuzz 20886 hb_set_t::resize () is needed after compact()
ariza 4081439d 2020-02-25T15:03:12 tweak reflecting review & add test cases
ariza de896278 2020-02-25T07:12:20 coding & comment tweaks
ariza 173b745d 2020-02-24T22:56:57 fixed bug & added tests
ariza a5012e97 2020-02-24T17:09:48 optimize hb_set_del_range() fix issue #2193
Garret Rieger 5a10f3a0 2020-02-07T10:38:27 Use vector instead of map during page compaction in hb-set.
Garret Rieger 2742c816 2020-01-28T13:55:31 Fix page_map corruption in hb_set_t during process(). If a process operation results in less pages then the current set has, it will likely corrupt the page_map since it overwrites page_map entries ahead of where it's processing. This fixes that problem by removing page_map entries that will be dropped. Then dropping orphaned pages and re-indexing retained pages.
Evgeniy Reizner b79ceac3 2019-12-15T16:50:01 Prefer UINT_MAX instead of uint overflow. Also, prefer HB_FEATURE_GLOBAL_START and HB_FEATURE_GLOBAL_END.
Behdad Esfahbod e5c7ee9f 2019-11-20T14:22:01 [set] Fix undefined-behavior shift in _previous() harfbuzz/src/hb-set.hh:138:43: runtime error: shift exponent 64 is too large for 64-bit type 'hb_set_t::page_t::elt_t' (aka 'unsigned long long')
Behdad Esfahbod 78d5eca8 2019-11-18T13:09:29 [set] Fix range-based-loop condition Alternative to https://github.com/harfbuzz/harfbuzz/pull/2046
Ebrahim Byagowi b73313ad 2019-09-18T00:50:32 Don't seek of out-of-bound value even if the result is not used Fixes this -fno-sanitize-recover=undefined fail, /set/iter: hb-algs.hh:1016:60: runtime error: index 4294967295 out of bounds for type 'unsigned long long const[8]' #0 0x4d1e09 in hb_vector_size_t<unsigned long long, 64u>::operator[](unsigned int) const /home/user/code/harfbuzz/src/./hb-algs.hh:1016:60 #1 0x4d8b5f in hb_set_t::page_t::previous(unsigned int*) const /home/user/code/harfbuzz/src/./hb-set.hh:139:53 #2 0x4d0ada in hb_set_t::previous(unsigned int*) const /home/user/code/harfbuzz/src/./hb-set.hh:602:36 #3 0x4cd76f in hb_set_previous /home/user/code/harfbuzz/src/hb-set.cc:494:15 #4 0x4ca8af in test_set_iter /home/user/code/harfbuzz/test/api/test-set.c:310:3 #5 0x7f3a4f3e0f49 (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x72f49) #6 0x7f3a4f3e0e7a (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x72e7a) #7 0x7f3a4f3e1121 in g_test_run_suite (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x73121) #8 0x7f3a4f3e1140 in g_test_run (/usr/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x73140) #9 0x4c8894 in hb_test_run /home/user/code/harfbuzz/test/api/./hb-test.h:88:10 #10 0x4c8894 in main /home/user/code/harfbuzz/test/api/test-set.c:408:10 #11 0x7f3a4e3d2b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 #12 0x41e7d9 in _start (/home/user/code/harfbuzz/test/api/test-set+0x41e7d9)
Ebrahim Byagowi a0b4ac4d 2019-08-24T17:57:14 Turn 8 spaces to tab across the project According to the current code style of the project
Behdad Esfahbod 4cb180d2 2019-07-02T19:44:18 Revert "Use constexpr to replace passthru_ bools" This reverts commit c4aa10ebc8dc28b1f9c90af2ca2092a7535f8395. Broke several compilers... Sigh. The version without constexpr didn't fully optimize out the unreachable code on clang. So, revert it is...
Behdad Esfahbod c4aa10eb 2019-07-02T19:15:03 Use constexpr to replace passthru_ bools
Behdad Esfahbod 08c3648c 2019-05-17T16:21:34 Oops, fix include
Behdad Esfahbod 24958b88 2019-05-17T16:20:36 [set] Use StructAtOffsetUnaligned
Behdad Esfahbod f7a45851 2019-05-15T16:49:35 Add hb_bitwise_* ops
Behdad Esfahbod 889dc1eb 2019-05-14T22:28:07 [iter] Remove sort categorization See comments.
Behdad Esfahbod 51376284 2019-05-13T15:36:14 [iter] Track strictly-sorted iterators This make output of hb_enumerate() sorted regardless of input iterator.
Behdad Esfahbod 4c2fd05c 2019-05-06T19:57:15 [iter] Implement range-based for loops Part of https://github.com/harfbuzz/harfbuzz/issues/1648
Behdad Esfahbod 824fd342 2019-04-11T11:16:01 Rename a few macros
Behdad Esfahbod 5bffa9e3 2019-04-02T20:13:16 More