User documentation
Abstract class for implementing several kinds of sugar:
- homogenous case (= the degree)
- non graded case (using StdDeg)
- graded case (using wdeg)
- non graded case and saturating algorithm
- graded case and saturating algorithm === Pseudo constructors ===
NewStdSugar(ConstRefRingElem f);
NewStdSugarNoIdx(ConstRefRingElem f, long PosIndet);
NewStdSugarSat(ConstRefRingElem f);
NewStdSugarNoIdxSat(ConstRefRingElem f, long PosIndet);
NewWSugar(ConstRefRingElem f);
NewWDeg1CompTmp(ConstRefRingElem f);
-- temporary: only for testingNewWSugarConst(ConstRefRingElem f);
-- stays constant in myUpdateNewWSugarSat(ConstRefRingElem f);
There is also an "empty" constructor for when you don't have yet enough information to choose the kind of sugar. However it does require theuninitialized
marker to make sure you know you have an uninitialized sugar!sugar(uninitialized);
Member functions
Warning! The following throw an error if the wrong type of value is asked!
const degree& myWSugar() const =0;
-- only if impl stores this valuelong myStdSugar() const =0;
-- only if impl stores this value Warning! The following throw an error if the sugar is not initializes!void myMul(ConstRefPPMonoidElem pp) =0;
-- sugar after multiplying by ppvoid myUpdate(ReductionCog F, const GPoly& g);
-- sugar after reducing F by gvoid myUpdate(ConstRefPPMonoidElem CofactorPP, const GPoly& g) =0;
-- sugar after adding pp*gint myCmp(const SugarDegreeBase& s) const =0;
-- this <=> s ? <0,=0,>0std::ostream& myOutput(std::ostream& out) const =0;
Non member functions
bool IsInitialized(const SugarDegree& sd);
std::ostream& operator<<(std::ostream& out, const SugarDegree& s);
== Maintainer documentation == Work in progress Sugar has not been properly tested on modules == Bugs, shortcomings and other ideas ==