From c27f5b1288e4786c27bd010a1f6b41c29ab37992 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 19 Aug 2021 10:01:24 -0600 Subject: [PATCH] [bit-set-invertible] Plug in next_range()/previous_range() --- src/hb-bit-set-invertible.hh | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/hb-bit-set-invertible.hh b/src/hb-bit-set-invertible.hh index ecfe3a186..8f4b7f865 100644 --- a/src/hb-bit-set-invertible.hh +++ b/src/hb-bit-set-invertible.hh @@ -187,13 +187,39 @@ struct hb_bit_set_invertible_t } bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const { - /*XXX(inverted)*/ - return s.next_range (first, last); + hb_codepoint_t i; + + i = *last; + if (!next (&i)) + { + *last = *first = INVALID; + return false; + } + + /* TODO Speed up. */ + *last = *first = i; + while (next (&i) && i == *last + 1) + (*last)++; + + return true; } bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const { - /*XXX(inverted)*/ - return s.previous_range (first, last); + hb_codepoint_t i; + + i = *first; + if (!previous (&i)) + { + *last = *first = INVALID; + return false; + } + + /* TODO Speed up. */ + *last = *first = i; + while (previous (&i) && i == *first - 1) + (*first)--; + + return true; } unsigned int get_population () const