[GIT] ppl/ppl(master): Improved subset_or_equal(const Bit_Row&, const Bit_Row&, bool&).

Module: ppl/ppl Branch: master Commit: 33cd6b46113c1db583a43eccf9e0a9076018948a URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=33cd6b46113c1...
Author: Roberto Bagnara bagnara@cs.unipr.it Date: Mon Apr 20 10:37:36 2009 +0200
Improved subset_or_equal(const Bit_Row&, const Bit_Row&, bool&).
---
src/Bit_Row.cc | 21 +++++++++++++++++++-- 1 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/Bit_Row.cc b/src/Bit_Row.cc index 32a3ff0..688fff8 100644 --- a/src/Bit_Row.cc +++ b/src/Bit_Row.cc @@ -279,16 +279,33 @@ PPL::subset_or_equal(const Bit_Row& x, const Bit_Row& y, assert(y_size >= 0); if (x_size > y_size) return false; - strict_subset = (x_size < y_size); 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; - if (!strict_subset && xl != yl) + ++xp; + ++yp; + --x_size; + if (xl != yl) { strict_subset = true; + goto strict_subset_loop; + } + } + 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;
participants (1)
-
Roberto Bagnara