[algs] Remove passthru declaration

Let compiler figure it out.
This commit is contained in:
Behdad Esfahbod 2021-01-21 14:27:45 -07:00
parent ca0b7afee9
commit 881ad720fe
2 changed files with 14 additions and 19 deletions

View File

@ -988,32 +988,24 @@ hb_codepoint_parse (const char *s, unsigned int len, int base, hb_codepoint_t *o
struct hb_bitwise_and struct hb_bitwise_and
{ HB_PARTIALIZE(2); { HB_PARTIALIZE(2);
static constexpr bool passthru_left = false;
static constexpr bool passthru_right = false;
template <typename T> constexpr auto template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & b) operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & b)
} }
HB_FUNCOBJ (hb_bitwise_and); HB_FUNCOBJ (hb_bitwise_and);
struct hb_bitwise_or struct hb_bitwise_or
{ HB_PARTIALIZE(2); { HB_PARTIALIZE(2);
static constexpr bool passthru_left = true;
static constexpr bool passthru_right = true;
template <typename T> constexpr auto template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | b) operator () (const T &a, const T &b) const HB_AUTO_RETURN (a | b)
} }
HB_FUNCOBJ (hb_bitwise_or); HB_FUNCOBJ (hb_bitwise_or);
struct hb_bitwise_xor struct hb_bitwise_xor
{ HB_PARTIALIZE(2); { HB_PARTIALIZE(2);
static constexpr bool passthru_left = true;
static constexpr bool passthru_right = true;
template <typename T> constexpr auto template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a ^ b) operator () (const T &a, const T &b) const HB_AUTO_RETURN (a ^ b)
} }
HB_FUNCOBJ (hb_bitwise_xor); HB_FUNCOBJ (hb_bitwise_xor);
struct hb_bitwise_sub struct hb_bitwise_sub
{ HB_PARTIALIZE(2); { HB_PARTIALIZE(2);
static constexpr bool passthru_left = true;
static constexpr bool passthru_right = false;
template <typename T> constexpr auto template <typename T> constexpr auto
operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & ~b) operator () (const T &a, const T &b) const HB_AUTO_RETURN (a & ~b)
} }

View File

@ -566,6 +566,9 @@ struct hb_set_t
template <typename Op> template <typename Op>
void process (const Op& op, const hb_set_t *other) void process (const Op& op, const hb_set_t *other)
{ {
const bool passthru_left = op (1, 0);
const bool passthru_right = op (0, 1);
if (unlikely (!successful)) return; if (unlikely (!successful)) return;
dirty (); dirty ();
@ -581,13 +584,13 @@ struct hb_set_t
// Pre-allocate the workspace that compact() will need so we can bail on allocation failure // Pre-allocate the workspace that compact() will need so we can bail on allocation failure
// before attempting to rewrite the page map. // before attempting to rewrite the page map.
hb_vector_t<unsigned> compact_workspace; hb_vector_t<unsigned> compact_workspace;
if (!Op::passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return; if (!passthru_left && unlikely (!allocate_compact_workspace (compact_workspace))) return;
for (; a < na && b < nb; ) for (; a < na && b < nb; )
{ {
if (page_map[a].major == other->page_map[b].major) if (page_map[a].major == other->page_map[b].major)
{ {
if (!Op::passthru_left) if (!passthru_left)
{ {
// Move page_map entries that we're keeping from the left side set // Move page_map entries that we're keeping from the left side set
// to the front of the page_map vector. This isn't necessary if // to the front of the page_map vector. This isn't necessary if
@ -604,23 +607,23 @@ struct hb_set_t
} }
else if (page_map[a].major < other->page_map[b].major) else if (page_map[a].major < other->page_map[b].major)
{ {
if (Op::passthru_left) if (passthru_left)
count++; count++;
a++; a++;
} }
else else
{ {
if (Op::passthru_right) if (passthru_right)
count++; count++;
b++; b++;
} }
} }
if (Op::passthru_left) if (passthru_left)
count += na - a; count += na - a;
if (Op::passthru_right) if (passthru_right)
count += nb - b; count += nb - b;
if (!Op::passthru_left) if (!passthru_left)
{ {
na = write_index; na = write_index;
next_page = write_index; next_page = write_index;
@ -648,7 +651,7 @@ struct hb_set_t
else if (page_map[a - 1].major > other->page_map[b - 1].major) else if (page_map[a - 1].major > other->page_map[b - 1].major)
{ {
a--; a--;
if (Op::passthru_left) if (passthru_left)
{ {
count--; count--;
page_map[count] = page_map[a]; page_map[count] = page_map[a];
@ -657,7 +660,7 @@ struct hb_set_t
else else
{ {
b--; b--;
if (Op::passthru_right) if (passthru_right)
{ {
count--; count--;
page_map[count].major = other->page_map[b].major; page_map[count].major = other->page_map[b].major;
@ -666,14 +669,14 @@ struct hb_set_t
} }
} }
} }
if (Op::passthru_left) if (passthru_left)
while (a) while (a)
{ {
a--; a--;
count--; count--;
page_map[count] = page_map [a]; page_map[count] = page_map [a];
} }
if (Op::passthru_right) if (passthru_right)
while (b) while (b)
{ {
b--; b--;