|
Macaulay2 Engine
|
PolynomialHeap backed by a std::priority_queue of (Monom, ring_elem) entries, with deduplication done lazily on lead-term extraction. More...
Public Types | |
| using | Entry = std::pair<Monom, ring_elem> |
| using | Container = std::vector<Entry, StatsAllocator<Entry>> |
Public Member Functions | |
| PriorityQueuePolynomialHeap (const FreeAlgebra &F) | |
| virtual | ~PriorityQueuePolynomialHeap () |
| void | clear () override |
| PriorityQueuePolynomialHeap | operator= (const PriorityQueuePolynomialHeap &)=delete |
| PriorityQueuePolynomialHeap (const PriorityQueuePolynomialHeap &)=delete | |
| PriorityQueuePolynomialHeap & | addEntry (const Entry &entry) |
| PriorityQueuePolynomialHeap & | addPolynomial (const Poly &poly) override |
| PriorityQueuePolynomialHeap & | addPolynomial (ring_elem coeff, Word left, Word right, const Poly &poly) override |
| bool | isZero () override |
| std::pair< Monom, ring_elem > | viewLeadTerm () override |
| void | removeLeadTerm () override |
| Poly * | value () override |
| size_t | getMemoryUsedInBytes () override |
| std::string | getName () const override |
| Public Member Functions inherited from PolynomialHeap | |
| virtual | ~PolynomialHeap () |
Private Attributes | |
| FreeAlgebra | mRing |
| EntryConfig | mEntryConfig |
| std::priority_queue< Entry, Container, EntryConfig > | mQueue |
| MemoryBlock | mMonomialSpace |
| bool | mLeadTermSet |
| Entry | mLeadTerm |
Additional Inherited Members | |
| Static Public Member Functions inherited from our_new_delete | |
| static void * | operator new (size_t size) |
| static void * | operator new[] (size_t size) |
| static void | operator delete (void *obj) |
| static void | operator delete[] (void *obj) |
| static void * | operator new (size_t size, void *existing_memory) |
| static void * | operator new[] (size_t size, void *existing_memory) |
| static void | operator delete (void *obj, void *existing_memory) |
| static void | operator delete[] (void *obj, void *existing_memory) |
PolynomialHeap backed by a std::priority_queue of (Monom, ring_elem) entries, with deduplication done lazily on lead-term extraction.
Insertions copy each Monom into mMonomialSpace (a MemoryBlock arena) and push the entry onto the queue. isZero() pops the top entry and keeps summing in any subsequent entries with the same monomial until either a smaller monomial appears (giving the next lead term, cached in mLeadTerm) or the running coefficient becomes zero (in which case the loop continues). The cached mLeadTerm is pushed back onto the queue on the next addPolynomial call.
Definition at line 966 of file NCReduction.cpp.