25#define STICKYPROT(msg) if (BTEST1(OPT_PROT)) Print(msg)
27#define STICKYPROT2(msg,arg) if (BTEST1(OPT_PROT)) Print(msg,arg)
28#define fglmASSERT(ignore1,ignore2)
45 fglmASSERT (
N >= 0,
"illegal Vector representation");
51 for(
int i =
N - 1;
i >= 0;
i--)
59 for(
int i =
N - 1;
i >= 0;
i--)
70 elems_clone = (number *)
omAlloc (
N *
sizeof (number));
71 for(
int i =
N - 1;
i >= 0;
i--)
103 for(
k =
N;
k > 0;
k--)
114 for(
k =
N;
k > 0;
k--)
130 number temp =
elems[
i - 1];
171 rep =
v.rep->copyObject ();
176 if(
rep->deleteObject ())
180#ifndef HAVE_EXPLICIT_CONSTR
183 rep =
v.rep->copyObject ();
186void fglmVector::mac_constr_i (
int size)
188 rep =
new fglmVectorRep (
size);
191void fglmVector::clearelems ()
193 if(
rep->deleteObject ())
200 if(
rep->refcount () != 1)
202 rep->deleteObject ();
214 return rep->numNonZeroElems ();
222 int vsize =
v.size ();
224 fglmASSERT (vsize <= rep->
size (),
"v has to be smaller or equal");
227 for(
i = vsize;
i > 0;
i--)
229 term1 =
nMult (fac1,
rep->getconstelem (
i));
230 term2 =
nMult (fac2,
v.rep->getconstelem (
i));
231 rep->setelem (
i,
nSub (term1, term2));
235 for(
i =
rep->size ();
i > vsize;
i--)
243 newelems = (number *)
omAlloc (
rep->size () * sizeof (number));
244 for(
i = vsize;
i > 0;
i--)
246 term1 =
nMult (fac1,
rep->getconstelem (
i));
247 term2 =
nMult (fac2,
v.rep->getconstelem (
i));
248 newelems[
i - 1] =
nSub (term1, term2);
252 for(
i =
rep->size ();
i > vsize;
i--)
254 newelems[
i - 1] =
nMult (fac1,
rep->getconstelem (
i));
256 rep->deleteObject ();
265 if(
rep->deleteObject ())
267 rep =
v.rep->copyObject ();
274 if(
rep->size () ==
v.rep->size ())
281 for(
i =
rep->size ();
i > 0;
i--)
282 if(!
nEqual (
rep->getconstelem (
i),
v.rep->getconstelem (
i)))
292 return !(*
this ==
v);
297 return rep->isZero ();
312 for(
i =
rep->size ();
i > 0;
i--)
317 int n =
rep->size ();
319 newelems = (number *)
omAlloc (n *
sizeof (number));
320 for(
i = n;
i > 0;
i--)
321 newelems[
i - 1] =
nAdd (
rep->getconstelem (
i),
v.rep->getconstelem (
i));
322 rep->deleteObject ();
334 for(
i =
rep->size ();
i > 0;
i--)
335 rep->setelem (
i,
nSub (
rep->getconstelem (
i),
v.rep->getconstelem (
i)));
339 int n =
rep->size ();
341 newelems = (number *)
omAlloc (n *
sizeof (number));
342 for(
i = n;
i > 0;
i--)
343 newelems[
i - 1] =
nSub (
rep->getconstelem (
i),
v.rep->getconstelem (
i));
344 rep->deleteObject ();
352 int s =
rep->size ();
354 if(!
rep->isUnique ())
357 temp = (number *)
omAlloc (
s *
sizeof (number));
358 for(
i =
s;
i > 0;
i--)
359 temp[
i - 1] =
nMult (
rep->getconstelem (
i), n);
360 rep->deleteObject ();
365 for(
i =
s;
i > 0;
i--)
373 int s =
rep->size ();
375 if(!
rep->isUnique ())
378 temp = (number *)
omAlloc (
s *
sizeof (number));
379 for(
i =
s;
i > 0;
i--)
381 temp[
i - 1] =
nDiv (
rep->getconstelem (
i), n);
384 rep->deleteObject ();
389 for(
i =
s;
i > 0;
i--)
403 for(
i =
v.size ();
i > 0;
i--)
405 n =
nCopy (
v.getconstelem (
i));
443 return rep->getelem (
i);
448 return rep->getconstelem (
i);
460 int i =
rep->size ();
467 current =
rep->getconstelem (
i);
470 theGcd =
nCopy (current);
485 while(
i > 0 && !gcdIsOne)
487 current =
rep->getconstelem (
i);
507 number theLcm =
nInit (1);
number getconstelem(int i) const
number ejectelem(int i, number n)
void setelem(int i, number n)
fglmVectorRep * clone() const
fglmVectorRep * copyObject()
int numNonZeroElems() const
fglmVectorRep(int n, number *e)
fglmVector & operator-=(const fglmVector &)
int numNonZeroElems() const
number getconstelem(int i) const
void setelem(int i, number &n)
int operator!=(const fglmVector &)
fglmVector & operator*=(const number &)
fglmVector & operator+=(const fglmVector &)
fglmVector & operator/=(const number &)
void nihilate(const number fac1, const number fac2, const fglmVector v)
fglmVector(fglmVectorRep *rep)
int operator==(const fglmVector &)
fglmVector & operator=(const fglmVector &v)
static FORCE_INLINE number n_NormalizeHelper(number a, number b, const coeffs r)
assume that r is a quotient field (otherwise, return 1) for arguments (a1/a2,b1/b2) return (lcm(a1,...
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
static FORCE_INLINE void n_InpAdd(number &a, number b, const coeffs r)
addition of 'a' and 'b'; replacement of 'a' by the sum a+b
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
fglmVector operator-(const fglmVector &v)
#define fglmASSERT(ignore1, ignore2)
fglmVector operator+(const fglmVector &lhs, const fglmVector &rhs)
fglmVector operator*(const fglmVector &v, const number n)
#define fglmASSERT(ignore1, ignore2)
#define omFreeSize(addr, size)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...