[mathicgb] 265/393: Moved signature comparison remnant out of PolyRing.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:16 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository mathicgb.

commit 4e3ce214a7d2b03e5acc916e62934d81e1609330
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date:   Tue Apr 16 18:18:02 2013 -0400

    Moved signature comparison remnant out of PolyRing.
---
 src/mathicgb/MonoMonoid.hpp | 25 ++++++++++++++++++++++++-
 src/mathicgb/PolyRing.cpp   |  8 +-------
 2 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/mathicgb/MonoMonoid.hpp b/src/mathicgb/MonoMonoid.hpp
index 13bc62b..a8a3a39 100755
--- a/src/mathicgb/MonoMonoid.hpp
+++ b/src/mathicgb/MonoMonoid.hpp
@@ -526,7 +526,6 @@ public:
     return true;
   }
 
-  // Graded reverse lexicographic order. The grading is total degree.
   CompareResult compare(ConstMonoRef a, ConstMonoRef b) const {
     MATHICGB_ASSERT(debugOrderValid(a));
     MATHICGB_ASSERT(debugOrderValid(b));
@@ -548,6 +547,30 @@ public:
     return EqualTo;
   }
 
+  /// Compares a to b1*b2.
+  /// @todo: test. Also, is this method necessary and useful?
+  CompareResult compare(ConstMonoRef a, ConstMonoRef b1, ConstMonoRef b2) const {
+    MATHICGB_ASSERT(debugOrderValid(a));
+    MATHICGB_ASSERT(debugOrderValid(b1));
+    MATHICGB_ASSERT(debugOrderValid(b2));
+
+    // todo: fold this into the lower loop if StoreOrder is true.
+    auto grading = gradingCount();
+    while (grading != 0) {
+      --grading;
+      const auto cmp = degree(a, grading) - (degree(b1, grading) + degree(b2, grading));
+      if (cmp < 0) return GreaterThan;
+      if (cmp > 0) return LessThan;
+    }
+
+    for (auto i = exponentsIndexEnd() - 1; i != beforeEntriesIndexBegin(); --i) {
+      const auto cmp = access(a, i) - (access(b1, i) + access(b2, i));
+      if (cmp < 0) return GreaterThan;
+      if (cmp > 0) return LessThan;
+    }
+    return EqualTo;
+  }
+
   bool lessThan(ConstMonoRef a, ConstMonoRef b) const {
     return compare(a, b) == LessThan;
   }
diff --git a/src/mathicgb/PolyRing.cpp b/src/mathicgb/PolyRing.cpp
index 83597fb..4f22bf0 100755
--- a/src/mathicgb/PolyRing.cpp
+++ b/src/mathicgb/PolyRing.cpp
@@ -66,13 +66,7 @@ void PolyRing::setWeightsAndHash(Monomial& a1) const
 int PolyRing::monomialCompare(ConstMonomial sig, ConstMonomial m2, ConstMonomial sig2) const
   // returns LT, EQ, or GT, depending on sig ? (m2 * sig2).
 {
-  for (size_t i = mTopIndex; i != static_cast<size_t>(-1); --i)
-    {
-      auto cmp = sig[i] - m2[i] - sig2[i];
-      if (cmp < 0) return GT;
-      if (cmp > 0) return LT;
-    }
-  return EQ;
+  return monoid().compare(sig, m2, sig2);
 }
 
 void PolyRing::monomialSetIdentity(Monomial& result) const

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/mathicgb.git



More information about the debian-science-commits mailing list