[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