1 #ifndef GRING_SA_MULT_H 2 #define GRING_SA_MULT_H 29 template <
typename CExponent>
37 CMultiplier(ring rBaseRing): m_basering(rBaseRing), m_NVars(rBaseRing->
N) {};
55 poly pMonom =
LM(pTerm, r);
69 poly pMonom =
LM(pTerm, r);
82 virtual poly MultiplyEE(
const CExponent expLeft,
const CExponent expRight) = 0;
113 inline int GetI()
const {
return m_i; }
114 inline int GetJ()
const {
return m_j; }
121 virtual poly MultiplyEE(
const CExponent expLeft,
const CExponent expRight) = 0;
185 return m_specialpairs[( (
NVars() * ((
i)-1) - ((
i) * ((i)-1))/2 + (
j)-1) - (
i) )];
195 return m_specialpairs[( (
NVars() * ((
i)-1) - ((
i) * ((i)-1))/2 + (
j)-1) - (
i) )];
203 virtual poly MultiplyEE(
const CExponent expLeft,
const CExponent expRight);
289 virtual poly MultiplyEE(
const CExponent expLeft,
const CExponent expRight);
310 if( iComponentMonom!=0 )
320 Werror(
"MultiplyPE: both sides have non-zero components: %d and %d!\n", iComponent, iComponentMonom);
341 Warn(
"MultiplyPE: Multiplication in the left module from the right by component %d!\n", iComponent);
362 if( iComponentMonom!=0 )
372 Werror(
"MultiplyEP: both sides have non-zero components: %d and %d!\n", iComponent, iComponentMonom);
407 if( iComponentMonom!=0 )
417 Werror(
"MultiplyPEDestroy: both sides have non-zero components: %d and %d!\n", iComponent, iComponentMonom);
438 Warn(
"MultiplyPEDestroy: Multiplication in the left module from the right by component %d!\n", iComponent);
461 if( iComponentMonom!=0 )
471 Werror(
"MultiplyEPDestroy: both sides have non-zero components: %d and %d!\n", iComponent, iComponentMonom);
609 #endif // HAVE_PLURAL :(
const CanonicalForm int s
virtual poly MultiplyME(const poly pMonom, const CExponent expRight)=0
static poly p_LmDeleteAndNext(poly p, const ring r)
poly MultiplyTE(const poly pTerm, const CExponent expRight)
CSpecialPairMultiplier ** m_specialpairs
poly LM(const poly pTerm, const ring r, int i=1) const
virtual poly MultiplyEM(const CExponent expLeft, const poly pMonom)=0
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
#define MIN_LENGTH_BUCKET
const CFormulaPowerMultiplier * m_RingFormulaMultiplier
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
virtual poly MultiplyEE(const CExponent expLeft, const CExponent expRight)=0
CSpecialPairMultiplier *& GetPair(int i, int j)
static int pLength(poly a)
CMultiplier< poly > CBaseType
#define TEST_OPT_NOT_BUCKETS
CPowerMultiplier * m_powers
poly MultiplyPE(const poly pPoly, const CExponent expRight)
poly MultiplyEP(const CExponent expLeft, const poly pPoly)
poly MultiplyPEDestroy(poly pPoly, const CExponent expRight)
static void p_SetCompP(poly p, int i, ring r)
const CanonicalForm CFMap CFMap & N
CMultiplier & operator=(const CMultiplier &)
poly MultiplyEP(const CExponent expLeft, const poly pPoly)
static poly p_Mult_nn(poly p, number n, const ring r)
static void p_Delete(poly *p, const ring r)
CSpecialPairMultiplier * GetPair(int i, int j) const
static poly p_LmInit(poly p, const ring r)
poly MultiplyET(const CExponent expLeft, const poly pTerm)
poly MultiplyEPDestroy(const CExponent expLeft, poly pPoly)
BOOLEAN ncInitSpecialPairMultiplication(ring r)
poly MultiplyPE(const poly pPoly, const CExponent expRight)
CMultiplier(ring rBaseRing)
CPolynomialSummator: unifies bucket and polynomial summation as the later is brocken in buckets :(...
void Werror(const char *fmt,...)