
Module: ppl/ppl Branch: master Commit: ead61e70bbce24c517afc3f79d2285b8abcfdb4c URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=ead61e70bbce2...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Mon Apr 20 13:50:09 2009 +0200
Further improved subset_or_equal(const Bit_Row&, const Bit_Row&, bool&).
---
src/Bit_Row.cc | 51 ++++++++++++++++++++++++++------------------------- 1 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/src/Bit_Row.cc b/src/Bit_Row.cc index 688fff8..eee1cbf 100644 --- a/src/Bit_Row.cc +++ b/src/Bit_Row.cc @@ -282,33 +282,34 @@ PPL::subset_or_equal(const Bit_Row& x, const Bit_Row& y, mp_srcptr xp = x.vec->_mp_d; mp_srcptr yp = y.vec->_mp_d; strict_subset = (x_size < y_size); - if (strict_subset) - goto strict_subset_loop; - - while (x_size > 0) { - const mp_limb_t xl = *xp; - const mp_limb_t yl = *yp; - if (xl & ~yl) - return false; - ++xp; - ++yp; - --x_size; - if (xl != yl) { - strict_subset = true; - goto strict_subset_loop; + mp_limb_t xl; + mp_limb_t yl; + if (strict_subset) { + while (x_size > 0) { + xl = *xp; + yl = *yp; + if (xl & ~yl) + return false; + strict_subset_next: + ++xp; + ++yp; + --x_size; } } - return true; - - strict_subset_loop: - while (x_size > 0) { - const mp_limb_t xl = *xp; - const mp_limb_t yl = *yp; - if (xl & ~yl) - return false; - ++xp; - ++yp; - --x_size; + else { + while (x_size > 0) { + xl = *xp; + yl = *yp; + if (xl != yl) { + if (xl & ~yl) + return false; + strict_subset = true; + goto strict_subset_next; + } + ++xp; + ++yp; + --x_size; + } } return true; }