11#include <boost/shared_ptr.hpp>
17#define BOOST_DISABLE_THREADS
46 template <poly_variant,
class,
class>
friend class PolyBase;
82 if (
this==&p2)
return *
this;
83 poly pc=p_Copy(p2.
p,p2.
r.get());
93 t.
p=p_Copy(
p,
r.get());
94 t.
p=p_Neg(t.
p,
r.get());
106 number two=n_Init(2,
r.get()->cf);
107 p_Mult_nn(
p,two,
r.get());
110 p=p_Add_q(
p,p_Copy(p2.
p,p2.
r.get()),
r.get());
123 poly pc=p_Copy(
p,
r.get());
124 p=p_Mult_q(
p,p2.
p,
r.get());
127 p=p_Mult_q(
p,p_Copy(p2.
p,p2.
r.get()),
r.get());
137 p=p_Mult_nn(
p,n.
n,
r.get());
149 p_Delete(&
p,
r.get());
153 poly pc=p_Copy(p2.
p,p2.
r.get());
154 pc=p_Neg(pc,
r.get());
155 p=p_Add_q(
p,pc,
r.get());
160 p_Delete(&
p,
r.get());
172 this->p=p_Copy(
p.p,
r.get());
176 this->p=p_Copy(
p,
r.get());
192 this->
p=
p_NSet(n_Copy(n.
n,
r.get()->cf),
r.get());
206 p_Delete(&
p,
r.get());
210 intrusive_ptr<ip_sring>
r;
260using namespace boost;
270 return T(p_Head(
t,
r),
r);
279 return p_LmIsConstant(
t,
r);
284public std::iterator<std::input_iterator_tag,T,int, shared_ptr<const T>,ConstTermReference<T> >
325 return shared_ptr<const T>(
new T(p_Head(
t,
r),
r,0));
329template<poly_variant variant,
class create_type_input,
class error_handle_traits>
class PolyBase
336 return p_Copy(
ptr->p,
ptr->getRing());
340 if (error_handle_traits::handleErrors)
342 if (
p.getRing()!=this->getRing())
344 error_handle_traits::handleDifferentRing(this->
getRing(),
354 int nvars=rVar(
ptr->r.get());
356 for(
int i=0;
i<nvars;
i++)
383 char* cp=(
char*)
omAlloc((strlen(c)+1)*
sizeof(
char));
428 return ptr->getRing();
431 return pTotaldegree(
ptr->p);
434 return ptr->leadCoef();
447 return ptr->getInternalReference();
455class Poly:
public PolyBase<POLY_VARIANT_RING, Poly, MyErrorHandler>{
485 for(
i=0;
i<
v.size();
i++){
535 for(
i=0;
i<
v.size();
i++){
587template <poly_variant variant,
class create_type,
class error_traits>
611 if (r1!=r2)
return false;
617 if (r1!=r2)
return false;
620template <poly_variant variant,
class create_type,
class error_traits>
640template <poly_variant variant,
class create_type,
class error_traits>
bool operator==(const Rational &a, const Rational &b)
TrivialErrorHandler MyErrorHandler
Vector unitVector(int i, ring r=currRing)
ConstTermReference(poly p, ring r)
static void handleDifferentRing(ring r, ring s)
static const bool handleErrors
intrusive_ptr< ip_sring > r
void checkIsSameRing(T &p)
PolyBase & operator*=(Number n)
int lmTotalDegree() const
PolyInputIterator< create_type > end()
poly getInternalReference()
PolyBase(poly p, ring r, int)
PolyBase & operator+=(const PolyBase &p2)
PolyBase(ring r=currRing)
create_type_input create_type
PolyBase< variant, create_type_input, error_handle_traits > ThisType
PolyBase & operator*=(const Poly &p2)
PolyBase(const PolyBase &p)
PolyInputIterator< create_type > begin()
PolyInputIterator< create_type > iterator
shared_ptr< PolyImpl > ptr
PolyBase(const char *c, ring r=currRing)
PolyImpl(int n, intrusive_ptr< ip_sring > r)
PolyImpl & operator=(int n)
friend PolyImpl operator-(const PolyImpl &p1, const PolyImpl &n2)
intrusive_ptr< ip_sring > r
PolyImpl(const Number &n)
friend bool operator==(const PolyImpl &p1, int n2)
PolyImpl & operator*=(const Number &n)
PolyImpl(poly p, intrusive_ptr< ip_sring > r)
friend PolyImpl operator+(const PolyImpl &p1, const PolyImpl &n2)
friend bool operator==(const Poly &p1, const Poly &p2)
PolyImpl(const PolyImpl &p)
PolyImpl & operator=(const PolyImpl &p2)
friend PolyImpl operator*(const PolyImpl &p1, const PolyImpl &n2)
PolyImpl & operator+=(const PolyImpl &p2)
friend PolyImpl operator/(const PolyImpl &p1, const PolyImpl &n2)
PolyImpl & operator-=(const PolyImpl &p2)
PolyImpl & operator*=(const PolyImpl &p2)
friend bool operator==(const PolyImpl &p1, const PolyImpl &n2)
PolyImpl(poly p, intrusive_ptr< ip_sring > r, int)
poly getInternalReference() const
friend PolyImpl operator/(const PolyImpl &p1, int n2)
static void handleDifferentRing(ring r, ring s)
static const bool handleErrors
Vector(int n, ring r=currRing)
Vector(const char *c, ring r=currRing)
Vector & operator+=(const Base &p)
PolyBase< POLY_VARIANT_MODUL, Vector, MyErrorHandler > Base
Vector(poly p, ring r, int)
Vector(std::vector< int > v, ring r=currRing)
Vector & operator+=(const Vector &p)
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
fglmVector operator-(const fglmVector &v)
fglmVector operator+(const fglmVector &lhs, const fglmVector &rhs)
fglmVector operator*(const fglmVector &v, const number n)
poly p_ISet(long i, const ring r)
returns the poly representing the integer i
poly p_NSet(number n, const ring r)
returns the poly representing the number n, destroys n
const char * p_Read(const char *st, poly &rc, const ring r)
BOOLEAN p_EqualPolys(poly p1, poly p2, const ring r)
char * p_String(poly p, ring lmRing, ring tailRing)
void p_Write(poly p, ring lmRing, ring tailRing)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Compatibility layer for legacy polynomial operations (over currRing).
void PrintS(const char *s)
Poly(const char *c, ring r=currRing)
Poly(int n, ring r=currRing)
Poly(poly p, ring r, int)
Poly(const std::vector< int > &v, ring r=currRing)
PolyBase< POLY_VARIANT_RING, Poly, MyErrorHandler > Base
Poly & operator+=(const Base &p)
Poly & operator+=(const Poly &p)