diff --git a/src/hb-set-private.hh b/src/hb-set-private.hh index 8f741b03e..fee09cf41 100644 --- a/src/hb-set-private.hh +++ b/src/hb-set-private.hh @@ -108,43 +108,50 @@ struct hb_set_digest_lowest_bits_t extern unsigned long digest_total, digest_yes, digest_yes1, digest_yes2; #endif -struct hb_set_digest_t +template +struct hb_set_digest_combiner_t { ASSERT_POD (); inline void init (void) { - digest1.init (); - digest2.init (); + head.init (); + tail.init (); } inline void add (hb_codepoint_t g) { - digest1.add (g); - digest2.add (g); + head.add (g); + tail.add (g); } inline void add_range (hb_codepoint_t a, hb_codepoint_t b) { - digest1.add_range (a, b); - digest2.add_range (a, b); + head.add_range (a, b); + tail.add_range (a, b); } inline bool may_have (hb_codepoint_t g) const { #ifdef HB_DEBUG_SET_DIGESTS digest_total++; - if (digest1.may_have (g) && digest2.may_have (g)) + if (head.may_have (g) && tail.may_have (g)) digest_yes++; - if (digest1.may_have (g)) + if (head.may_have (g)) digest_yes1++; - if (digest2.may_have (g)) + if (tail.may_have (g)) digest_yes2++; #endif - return digest1.may_have (g) && digest2.may_have (g); + return head.may_have (g) && tail.may_have (g); } private: - hb_set_digest_common_bits_t digest1; - hb_set_digest_lowest_bits_t digest2; + head_t head; + tail_t tail; }; +typedef hb_set_digest_combiner_t< + hb_set_digest_common_bits_t, + hb_set_digest_lowest_bits_t + > + hb_set_digest_t; + /* TODO Make this faster and memmory efficient. */