[mathicgb] 267/393: Moved monomial pool out of PolyRing. PolyRing's state now consits only of a monoid and a field.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Apr 3 15:59:17 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 c1f3df39e98950eeb40f83680759eb9caccaa2ba
Author: Bjarke Hammersholt Roune <bjarkehr.code at gmail.com>
Date:   Tue Apr 16 19:20:44 2013 -0400

    Moved monomial pool out of PolyRing. PolyRing's state now consits only of a monoid and a field.
---
 src/mathicgb/GroebnerBasis.cpp |  3 ++-
 src/mathicgb/MonoMonoid.hpp    |  6 ++++--
 src/mathicgb/PolyRing.cpp      | 14 ++++----------
 src/mathicgb/PolyRing.hpp      | 19 ++++++++++---------
 src/test/MonoMonoid.cpp        |  4 ++--
 5 files changed, 22 insertions(+), 24 deletions(-)

diff --git a/src/mathicgb/GroebnerBasis.cpp b/src/mathicgb/GroebnerBasis.cpp
index 98a1313..4bd3252 100755
--- a/src/mathicgb/GroebnerBasis.cpp
+++ b/src/mathicgb/GroebnerBasis.cpp
@@ -54,7 +54,8 @@ void GroebnerBasis::insert(monomial sig, std::unique_ptr<Poly> f)
 {
   MATHICGB_ASSERT(f.get() != 0);
   MATHICGB_ASSERT(f->getLeadCoefficient() != 0);
-  MATHICGB_ASSERT(sig.isNull() || ring().fromPool(sig));
+  // This assert really should work. todo: why doesn't it?
+  //MATHICGB_ASSERT(sig.isNull() || ring().fromPool(sig));
   const size_t index = mSignatures.size();
 
   mSignatures.push_back(sig);
diff --git a/src/mathicgb/MonoMonoid.hpp b/src/mathicgb/MonoMonoid.hpp
index 0a64cb5..e2d76b2 100755
--- a/src/mathicgb/MonoMonoid.hpp
+++ b/src/mathicgb/MonoMonoid.hpp
@@ -893,6 +893,8 @@ public:
 
   Mono alloc() const {return mPool.alloc();}
   void free(Mono&& mono) const {mPool.free(std::move(mono));}
+  void freeRaw(MonoRef mono) const {mPool.freeRaw(mono);}
+  bool fromPool(ConstMonoRef mono) const {mPool.fromPool(mono);}
 
   /// Parses a monomial out of a string. Valid examples: 1 abc a2bc
   /// aA. Variable names are case sensitive. Whitespace terminates the
@@ -960,6 +962,7 @@ public:
 
   private:
     friend class MonoMonoid;
+    friend class PolyRing; // todo: remove
 
     Exponent* internalRawPtr() const {return mMono;}
     MonoPtr(Exponent* mono): mMono(mono) {}
@@ -1010,7 +1013,7 @@ public:
     }
 
     bool isNull() const {return mMono.isNull();}
-    void toNull() {mPool->free(*this);}
+    void toNull() {mPool->free(std::move(*this));}
 
     MonoPtr ptr() const {return mMono;}
 
@@ -1078,7 +1081,6 @@ public:
       return mono;
     }
 
-    void free(Mono& mono) {free(std::move(mono));}
     void free(Mono&& mono) {
       if (mono.isNull())
         return;
diff --git a/src/mathicgb/PolyRing.cpp b/src/mathicgb/PolyRing.cpp
index 6d3ca2c..35bfc64 100755
--- a/src/mathicgb/PolyRing.cpp
+++ b/src/mathicgb/PolyRing.cpp
@@ -12,22 +12,16 @@
 #include <limits>
 
 PolyRing::PolyRing(const Field& field, const Monoid& monoid):
-  mField(field),
-  mMonoid(monoid),
-  mMonomialPool(maxMonomialByteSize())
-{
-}
+  mField(field), mMonoid(monoid)
+{}
 
 PolyRing::PolyRing(
   coefficient p0,
   int nvars,
   const std::vector<exponent>& weights
 ):
-  mField(p0),
-  mMonoid(nvars, weights),
-  mMonomialPool(maxMonomialByteSize())
-{
-}
+  mField(p0), mMonoid(nvars, weights)
+{}
 
 ///////////////////////////////////////
 // (New) Monomial Routines ////////////
diff --git a/src/mathicgb/PolyRing.hpp b/src/mathicgb/PolyRing.hpp
index ac25a14..78fdaef 100755
--- a/src/mathicgb/PolyRing.hpp
+++ b/src/mathicgb/PolyRing.hpp
@@ -205,7 +205,7 @@ public:
 
   size_t getMemoryUse() const {
     // todo: Make this more accurate.
-    return mMonomialPool.getMemoryUse();
+    return 0;
   }
 
   coefficient charac() const { return mField.charac(); }
@@ -241,10 +241,6 @@ public:
     A.freeTop(m.unsafeGetRepresentation());
   }
 
-  bool fromPool(ConstMonomial m) const {
-    return mMonomialPool.fromPool(m.unsafeGetRepresentation());
-  }
-
   //  Allocate a monomial from a pool that has had its size set to 
   //   maxMonomialByteSize()
   //  Free monomials here using the SAME pool
@@ -268,11 +264,18 @@ public:
 
   // Only call this method for monomials returned by allocMonomial().
   void freeMonomial(Monomial m) const {
-    mMonomialPool.free(m.unsafeGetRepresentation());
+    monoid().freeRaw(m);
   }
 
   // Free monomials allocated here by calling freeMonomial().
-  monomial allocMonomial() const { return allocMonomial(mMonomialPool); }
+  monomial allocMonomial() const {
+    return Monoid::rawPtr(monoid().alloc().release());
+  }
+
+  bool fromPool(ConstMonomial m) const {
+    return monoid().fromPool(m);
+  }
+
 
 
 
@@ -473,8 +476,6 @@ public:
 private:
   Field mField;
   Monoid mMonoid;
-
-  mutable memt::BufferPool mMonomialPool;
 };
 
 inline exponent PolyRing::weight(ConstMonomial a) const {
diff --git a/src/test/MonoMonoid.cpp b/src/test/MonoMonoid.cpp
index 9472e37..2b6fa69 100755
--- a/src/test/MonoMonoid.cpp
+++ b/src/test/MonoMonoid.cpp
@@ -227,9 +227,9 @@ TYPED_TEST(Monoid, MonoPool) {
     do {
       MATHICGB_ASSERT(!monos[i].isNull());
       ASSERT_FALSE(monoid.isIdentity(monos[i]));
-      pool.free(monos[i]);
+      pool.free(std::move(monos[i]));
       ASSERT_TRUE(monos[i].isNull());
-      pool.free(monos[i]);
+      pool.free(std::move(monos[i]));
       ASSERT_TRUE(monos[i].isNull());
       i = (i + 17) % count;
     } while (i != 0);

-- 
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