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
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) const
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)
static poly p_LmInit(poly p, const ring r)
poly MultiplyET(const CExponent expLeft, const poly pTerm)
poly LM(const poly pTerm, const ring r, int i=1) const
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,...)