diff --git a/src/hb-algs.hh b/src/hb-algs.hh index 5d8c8dd82..788689478 100644 --- a/src/hb-algs.hh +++ b/src/hb-algs.hh @@ -915,24 +915,32 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o struct hb_bitwise_and { HB_PARTIALIZE(2); + static constexpr bool passthru_left = false; + static constexpr bool passthru_right = false; template constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & b) } HB_FUNCOBJ (hb_bitwise_and); struct hb_bitwise_or { HB_PARTIALIZE(2); + static constexpr bool passthru_left = true; + static constexpr bool passthru_right = true; template constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | b) } HB_FUNCOBJ (hb_bitwise_or); struct hb_bitwise_xor { HB_PARTIALIZE(2); + static constexpr bool passthru_left = true; + static constexpr bool passthru_right = true; template constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a ^ b) } HB_FUNCOBJ (hb_bitwise_xor); struct hb_bitwise_sub { HB_PARTIALIZE(2); + static constexpr bool passthru_left = true; + static constexpr bool passthru_right = false; template constexpr auto operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & ~b) } diff --git a/src/hb-set.hh b/src/hb-set.hh index 11034af4b..ad449d0ce 100644 --- a/src/hb-set.hh +++ b/src/hb-set.hh @@ -448,8 +448,6 @@ struct hb_set_t dirty (); - constexpr bool passthru_left = op (0, 0) || op (1, 0); - constexpr bool passthru_right = op (0, 0) || op (0, 1); unsigned int na = pages.length; unsigned int nb = other->pages.length; unsigned int next_page = na; @@ -466,20 +464,20 @@ struct hb_set_t } else if (page_map[a].major < other->page_map[b].major) { - if (passthru_left) + if (Op::passthru_left) count++; a++; } else { - if (passthru_right) + if (Op::passthru_right) count++; b++; } } - if (passthru_left) + if (Op::passthru_left) count += na - a; - if (passthru_right) + if (Op::passthru_right) count += nb - b; if (count > pages.length) @@ -503,7 +501,7 @@ struct hb_set_t else if (page_map[a - 1].major > other->page_map[b - 1].major) { a--; - if (passthru_left) + if (Op::passthru_left) { count--; page_map[count] = page_map[a]; @@ -512,7 +510,7 @@ struct hb_set_t else { b--; - if (passthru_right) + if (Op::passthru_right) { count--; page_map[count].major = other->page_map[b].major; @@ -521,14 +519,14 @@ struct hb_set_t } } } - if (passthru_left) + if (Op::passthru_left) while (a) { a--; count--; page_map[count] = page_map [a]; } - if (passthru_right) + if (Op::passthru_right) while (b) { b--;