Public Member Functions | Protected Member Functions | Protected Attributes | Friends
fglmVector Class Reference

#include <fglmvec.h>

Public Member Functions

 fglmVector ()
 
 fglmVector (int size)
 
 fglmVector (int size, int basis)
 
 fglmVector (const fglmVector &v)
 
 ~fglmVector ()
 
int size () const
 
int numNonZeroElems () const
 
void nihilate (const number fac1, const number fac2, const fglmVector v)
 
fglmVectoroperator= (const fglmVector &v)
 
int operator== (const fglmVector &)
 
int operator!= (const fglmVector &)
 
int isZero ()
 
int elemIsZero (int i)
 
fglmVectoroperator+= (const fglmVector &)
 
fglmVectoroperator-= (const fglmVector &)
 
fglmVectoroperator*= (const number &)
 
fglmVectoroperator/= (const number &)
 
number getconstelem (int i) const
 
number & getelem (int i)
 
void setelem (int i, number &n)
 
number gcd () const
 
number clearDenom ()
 

Protected Member Functions

void makeUnique ()
 
 fglmVector (fglmVectorRep *rep)
 

Implementation of class fglmVector

More...
 

Protected Attributes

fglmVectorReprep
 

Friends

fglmVector operator- (const fglmVector &v)
 
fglmVector operator+ (const fglmVector &lhs, const fglmVector &rhs)
 
fglmVector operator- (const fglmVector &lhs, const fglmVector &rhs)
 
fglmVector operator* (const fglmVector &v, const number n)
 
fglmVector operator* (const number n, const fglmVector &v)
 

Detailed Description

Definition at line 18 of file fglmvec.h.

Constructor & Destructor Documentation

fglmVector::fglmVector ( fglmVectorRep rep)
protected


Implementation of class fglmVector

Definition at line 149 of file fglmvec.cc.

149  :rep (r)
150 {
151 }
const ring r
Definition: syzextra.cc:208
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector::fglmVector ( )

Definition at line 153 of file fglmvec.cc.

153  :rep (new fglmVectorRep ())
154 {
155 }
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector::fglmVector ( int  size)

Definition at line 157 of file fglmvec.cc.

157  :rep (new fglmVectorRep (size))
158 {
159 }
int size() const
Definition: fglmvec.cc:204
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector::fglmVector ( int  size,
int  basis 
)

Definition at line 161 of file fglmvec.cc.

161  :rep (new fglmVectorRep (size))
162 {
163  rep->setelem (basis, nInit (1));
164 }
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:204
fglmVectorRep * rep
Definition: fglmvec.h:21
#define nInit(i)
Definition: numbers.h:24
fglmVector::fglmVector ( const fglmVector v)

Definition at line 166 of file fglmvec.cc.

167 {
168  rep = v.rep->copyObject ();
169 }
fglmVectorRep * copyObject()
Definition: fglmvec.cc:83
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector::~fglmVector ( )

Definition at line 171 of file fglmvec.cc.

172 {
173  if(rep->deleteObject ())
174  delete rep;
175 }
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
fglmVectorRep * rep
Definition: fglmvec.h:21

Member Function Documentation

number fglmVector::clearDenom ( )

Definition at line 499 of file fglmvec.cc.

500 {
501  number theLcm = nInit (1);
502  BOOLEAN isZero = TRUE;
503  int i;
504  for(i = size (); i > 0; i--)
505  {
506  if(!nIsZero (rep->getconstelem (i)))
507  {
508  isZero = FALSE;
509  number temp = n_NormalizeHelper (theLcm, rep->getconstelem (i), currRing->cf);
510  nDelete (&theLcm);
511  theLcm = temp;
512  }
513  }
514  if(isZero)
515  {
516  nDelete (&theLcm);
517  theLcm = nInit (0);
518  }
519  else
520  {
521  if(!nIsOne (theLcm))
522  {
523  *this *= theLcm;
524  for(i = size (); i > 0; i--)
525  {
526  nNormalize (rep->getelem (i));
527  }
528  }
529  }
530  return theLcm;
531 }
number & getelem(int i)
Definition: fglmvec.cc:131
#define nNormalize(n)
Definition: numbers.h:30
#define FALSE
Definition: auxiliary.h:140
int size() const
Definition: fglmvec.cc:204
#define TRUE
Definition: auxiliary.h:144
#define nIsOne(n)
Definition: numbers.h:25
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...
Definition: coeffs.h:718
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
int isZero()
Definition: fglmvec.cc:292
int i
Definition: cfEzgcd.cc:123
#define nDelete(n)
Definition: numbers.h:16
number getconstelem(int i) const
Definition: fglmvec.cc:136
#define nIsZero(n)
Definition: numbers.h:19
fglmVectorRep * rep
Definition: fglmvec.h:21
#define nInit(i)
Definition: numbers.h:24
int BOOLEAN
Definition: auxiliary.h:131
int fglmVector::elemIsZero ( int  i)

Definition at line 297 of file fglmvec.cc.

298 {
299  return nIsZero (rep->getconstelem (i));
300 }
int i
Definition: cfEzgcd.cc:123
number getconstelem(int i) const
Definition: fglmvec.cc:136
#define nIsZero(n)
Definition: numbers.h:19
fglmVectorRep * rep
Definition: fglmvec.h:21
number fglmVector::gcd ( ) const

Definition at line 455 of file fglmvec.cc.

456 {
457  int i = rep->size ();
458  BOOLEAN found = FALSE;
459  BOOLEAN gcdIsOne = FALSE;
460  number theGcd;
461  number current;
462  while(i > 0 && !found)
463  {
464  current = rep->getconstelem (i);
465  if(!nIsZero (current))
466  {
467  theGcd = nCopy (current);
468  found = TRUE;
469  if(!nGreaterZero (theGcd))
470  {
471  theGcd = nInpNeg (theGcd);
472  }
473  if(nIsOne (theGcd))
474  gcdIsOne = TRUE;
475  }
476  i--;
477  }
478  if(found)
479  {
480  while(i > 0 && !gcdIsOne)
481  {
482  current = rep->getconstelem (i);
483  if(!nIsZero (current))
484  {
485  number temp = n_SubringGcd (theGcd, current, currRing->cf);
486  nDelete (&theGcd);
487  theGcd = temp;
488  if(nIsOne (theGcd))
489  gcdIsOne = TRUE;
490  }
491  i--;
492  }
493  }
494  else
495  theGcd = nInit (0);
496  return theGcd;
497 }
#define FALSE
Definition: auxiliary.h:140
int size() const
Definition: fglmvec.cc:97
#define TRUE
Definition: auxiliary.h:144
#define nIsOne(n)
Definition: numbers.h:25
bool found
Definition: facFactorize.cc:56
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
#define nGreaterZero(n)
Definition: numbers.h:27
#define nInpNeg(n)
Definition: numbers.h:21
int i
Definition: cfEzgcd.cc:123
#define nDelete(n)
Definition: numbers.h:16
number getconstelem(int i) const
Definition: fglmvec.cc:136
#define nIsZero(n)
Definition: numbers.h:19
#define nCopy(n)
Definition: numbers.h:15
static FORCE_INLINE number n_SubringGcd(number a, number b, const coeffs r)
Definition: coeffs.h:689
fglmVectorRep * rep
Definition: fglmvec.h:21
#define nInit(i)
Definition: numbers.h:24
int BOOLEAN
Definition: auxiliary.h:131
number fglmVector::getconstelem ( int  i) const

Definition at line 443 of file fglmvec.cc.

444 {
445  return rep->getconstelem (i);
446 }
int i
Definition: cfEzgcd.cc:123
number getconstelem(int i) const
Definition: fglmvec.cc:136
fglmVectorRep * rep
Definition: fglmvec.h:21
number & fglmVector::getelem ( int  i)

Definition at line 437 of file fglmvec.cc.

438 {
439  makeUnique ();
440  return rep->getelem (i);
441 }
number & getelem(int i)
Definition: fglmvec.cc:131
void makeUnique()
Definition: fglmvec.cc:195
int i
Definition: cfEzgcd.cc:123
fglmVectorRep * rep
Definition: fglmvec.h:21
int fglmVector::isZero ( )

Definition at line 292 of file fglmvec.cc.

293 {
294  return rep->isZero ();
295 }
int isZero() const
Definition: fglmvec.cc:101
fglmVectorRep * rep
Definition: fglmvec.h:21
void fglmVector::makeUnique ( )
protected

Definition at line 195 of file fglmvec.cc.

196 {
197  if(rep->refcount () != 1)
198  {
199  rep->deleteObject ();
200  rep = rep->clone ();
201  }
202 }
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
fglmVectorRep * clone() const
Definition: fglmvec.cc:66
int refcount() const
Definition: fglmvec.cc:88
fglmVectorRep * rep
Definition: fglmvec.h:21
void fglmVector::nihilate ( const number  fac1,
const number  fac2,
const fglmVector  v 
)

Definition at line 215 of file fglmvec.cc.

217 {
218  int i;
219  int vsize = v.size ();
220  number term1, term2;
221  fglmASSERT (vsize <= rep->size (), "v has to be smaller oder equal");
222  if(rep->isUnique ())
223  {
224  for(i = vsize; i > 0; i--)
225  {
226  term1 = nMult (fac1, rep->getconstelem (i));
227  term2 = nMult (fac2, v.rep->getconstelem (i));
228  rep->setelem (i, nSub (term1, term2));
229  nDelete (&term1);
230  nDelete (&term2);
231  }
232  for(i = rep->size (); i > vsize; i--)
233  {
234  rep->setelem (i, nMult (fac1, rep->getconstelem (i)));
235  }
236  }
237  else
238  {
239  number *newelems;
240  newelems = (number *) omAlloc (rep->size () * sizeof (number));
241  for(i = vsize; i > 0; i--)
242  {
243  term1 = nMult (fac1, rep->getconstelem (i));
244  term2 = nMult (fac2, v.rep->getconstelem (i));
245  newelems[i - 1] = nSub (term1, term2);
246  nDelete (&term1);
247  nDelete (&term2);
248  }
249  for(i = rep->size (); i > vsize; i--)
250  {
251  newelems[i - 1] = nMult (fac1, rep->getconstelem (i));
252  }
253  rep->deleteObject ();
254  rep = new fglmVectorRep (rep->size (), newelems);
255  }
256 }
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:204
int size() const
Definition: fglmvec.cc:97
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define nMult(n1, n2)
Definition: numbers.h:17
#define nSub(n1, n2)
Definition: numbers.h:22
int i
Definition: cfEzgcd.cc:123
#define nDelete(n)
Definition: numbers.h:16
#define fglmASSERT(ignore1, ignore2)
Definition: fglmvec.cc:29
number getconstelem(int i) const
Definition: fglmvec.cc:136
BOOLEAN isUnique() const
Definition: fglmvec.cc:92
fglmVectorRep * rep
Definition: fglmvec.h:21
int fglmVector::numNonZeroElems ( ) const

Definition at line 209 of file fglmvec.cc.

210 {
211  return rep->numNonZeroElems ();
212 }
int numNonZeroElems() const
Definition: fglmvec.cc:109
fglmVectorRep * rep
Definition: fglmvec.h:21
int fglmVector::operator!= ( const fglmVector v)

Definition at line 287 of file fglmvec.cc.

288 {
289  return !(*this == v);
290 }
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
fglmVector & fglmVector::operator*= ( const number &  n)

Definition at line 347 of file fglmvec.cc.

348 {
349  int s = rep->size ();
350  int i;
351  if(!rep->isUnique ())
352  {
353  number *temp;
354  temp = (number *) omAlloc (s * sizeof (number));
355  for(i = s; i > 0; i--)
356  temp[i - 1] = nMult (rep->getconstelem (i), n);
357  rep->deleteObject ();
358  rep = new fglmVectorRep (s, temp);
359  }
360  else
361  {
362  for(i = s; i > 0; i--)
363  rep->setelem (i, nMult (rep->getconstelem (i), n));
364  }
365  return *this;
366 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:97
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define nMult(n1, n2)
Definition: numbers.h:17
int i
Definition: cfEzgcd.cc:123
number getconstelem(int i) const
Definition: fglmvec.cc:136
BOOLEAN isUnique() const
Definition: fglmvec.cc:92
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector & fglmVector::operator+= ( const fglmVector v)

Definition at line 302 of file fglmvec.cc.

303 {
304  fglmASSERT (size () == v.size (), "incompatible vectors");
305  // ACHTUNG : Das Verhalten hier mit gcd genau ueberpruefen!
306  int i;
307  if(rep->isUnique ())
308  {
309  for(i = rep->size (); i > 0; i--)
310  rep->setelem (i, nAdd (rep->getconstelem (i), v.rep->getconstelem (i)));
311  }
312  else
313  {
314  int n = rep->size ();
315  number *newelems;
316  newelems = (number *) omAlloc (n * sizeof (number));
317  for(i = n; i > 0; i--)
318  newelems[i - 1] = nAdd (rep->getconstelem (i), v.rep->getconstelem (i));
319  rep->deleteObject ();
320  rep = new fglmVectorRep (n, newelems);
321  }
322  return *this;
323 }
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:204
int size() const
Definition: fglmvec.cc:97
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
#define omAlloc(size)
Definition: omAllocDecl.h:210
int i
Definition: cfEzgcd.cc:123
#define fglmASSERT(ignore1, ignore2)
Definition: fglmvec.cc:29
number getconstelem(int i) const
Definition: fglmvec.cc:136
BOOLEAN isUnique() const
Definition: fglmvec.cc:92
fglmVectorRep * rep
Definition: fglmvec.h:21
#define nAdd(n1, n2)
Definition: numbers.h:18
fglmVector & fglmVector::operator-= ( const fglmVector v)

Definition at line 325 of file fglmvec.cc.

326 {
327  fglmASSERT (size () == v.size (), "incompatible vectors");
328  int i;
329  if(rep->isUnique ())
330  {
331  for(i = rep->size (); i > 0; i--)
332  rep->setelem (i, nSub (rep->getconstelem (i), v.rep->getconstelem (i)));
333  }
334  else
335  {
336  int n = rep->size ();
337  number *newelems;
338  newelems = (number *) omAlloc (n * sizeof (number));
339  for(i = n; i > 0; i--)
340  newelems[i - 1] = nSub (rep->getconstelem (i), v.rep->getconstelem (i));
341  rep->deleteObject ();
342  rep = new fglmVectorRep (n, newelems);
343  }
344  return *this;
345 }
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:204
int size() const
Definition: fglmvec.cc:97
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define nSub(n1, n2)
Definition: numbers.h:22
int i
Definition: cfEzgcd.cc:123
#define fglmASSERT(ignore1, ignore2)
Definition: fglmvec.cc:29
number getconstelem(int i) const
Definition: fglmvec.cc:136
BOOLEAN isUnique() const
Definition: fglmvec.cc:92
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector & fglmVector::operator/= ( const number &  n)

Definition at line 368 of file fglmvec.cc.

369 {
370  int s = rep->size ();
371  int i;
372  if(!rep->isUnique ())
373  {
374  number *temp;
375  temp = (number *) omAlloc (s * sizeof (number));
376  for(i = s; i > 0; i--)
377  {
378  temp[i - 1] = nDiv (rep->getconstelem (i), n);
379  nNormalize (temp[i - 1]);
380  }
381  rep->deleteObject ();
382  rep = new fglmVectorRep (s, temp);
383  }
384  else
385  {
386  for(i = s; i > 0; i--)
387  {
388  rep->setelem (i, nDiv (rep->getconstelem (i), n));
389  nNormalize (rep->getelem (i));
390  }
391  }
392  return *this;
393 }
const CanonicalForm int s
Definition: facAbsFact.cc:55
number & getelem(int i)
Definition: fglmvec.cc:131
#define nNormalize(n)
Definition: numbers.h:30
void setelem(int i, number n)
Definition: fglmvec.cc:118
int size() const
Definition: fglmvec.cc:97
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
#define omAlloc(size)
Definition: omAllocDecl.h:210
int i
Definition: cfEzgcd.cc:123
number getconstelem(int i) const
Definition: fglmvec.cc:136
#define nDiv(a, b)
Definition: numbers.h:32
BOOLEAN isUnique() const
Definition: fglmvec.cc:92
fglmVectorRep * rep
Definition: fglmvec.h:21
fglmVector & fglmVector::operator= ( const fglmVector v)

Definition at line 258 of file fglmvec.cc.

259 {
260  if(this != &v)
261  {
262  if(rep->deleteObject ())
263  delete rep;
264  rep = v.rep->copyObject ();
265  }
266  return *this;
267 }
fglmVectorRep * copyObject()
Definition: fglmvec.cc:83
BOOLEAN deleteObject()
Definition: fglmvec.cc:79
fglmVectorRep * rep
Definition: fglmvec.h:21
int fglmVector::operator== ( const fglmVector v)

Definition at line 269 of file fglmvec.cc.

270 {
271  if(rep->size () == v.rep->size ())
272  {
273  if(rep == v.rep)
274  return 1;
275  else
276  {
277  int i;
278  for(i = rep->size (); i > 0; i--)
279  if(!nEqual (rep->getconstelem (i), v.rep->getconstelem (i)))
280  return 0;
281  return 1;
282  }
283  }
284  return 0;
285 }
int size() const
Definition: fglmvec.cc:97
#define nEqual(n1, n2)
Definition: numbers.h:20
int i
Definition: cfEzgcd.cc:123
number getconstelem(int i) const
Definition: fglmvec.cc:136
fglmVectorRep * rep
Definition: fglmvec.h:21
void fglmVector::setelem ( int  i,
number &  n 
)

Definition at line 448 of file fglmvec.cc.

449 {
450  makeUnique ();
451  rep->setelem (i, n);
452  n = n_Init (0, currRing->cf);
453 }
void setelem(int i, number n)
Definition: fglmvec.cc:118
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
Definition: coeffs.h:539
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:12
void makeUnique()
Definition: fglmvec.cc:195
int i
Definition: cfEzgcd.cc:123
fglmVectorRep * rep
Definition: fglmvec.h:21
int fglmVector::size ( ) const

Definition at line 204 of file fglmvec.cc.

205 {
206  return rep->size ();
207 }
int size() const
Definition: fglmvec.cc:97
fglmVectorRep * rep
Definition: fglmvec.h:21

Friends And Related Function Documentation

fglmVector operator* ( const fglmVector v,
const number  n 
)
friend

Definition at line 423 of file fglmvec.cc.

424 {
425  fglmVector temp = v;
426  temp *= n;
427  return temp;
428 }
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
fglmVector operator* ( const number  n,
const fglmVector v 
)
friend

Definition at line 430 of file fglmvec.cc.

431 {
432  fglmVector temp = v;
433  temp *= n;
434  return temp;
435 }
const Variable & v
< [in] a sqrfree bivariate poly
Definition: facBivar.h:37
fglmVector operator+ ( const fglmVector lhs,
const fglmVector rhs 
)
friend

Definition at line 409 of file fglmvec.cc.

410 {
411  fglmVector temp = lhs;
412  temp += rhs;
413  return temp;
414 }
fglmVector operator- ( const fglmVector v)
friend

Definition at line 395 of file fglmvec.cc.

396 {
397  fglmVector temp (v.size ());
398  int i;
399  number n;
400  for(i = v.size (); i > 0; i--)
401  {
402  n = nCopy (v.getconstelem (i));
403  n = nInpNeg (n);
404  temp.setelem (i, n);
405  }
406  return temp;
407 }
int size() const
Definition: fglmvec.cc:204
number getconstelem(int i) const
Definition: fglmvec.cc:443
#define nInpNeg(n)
Definition: numbers.h:21
int i
Definition: cfEzgcd.cc:123
#define nCopy(n)
Definition: numbers.h:15
fglmVector operator- ( const fglmVector lhs,
const fglmVector rhs 
)
friend

Definition at line 416 of file fglmvec.cc.

417 {
418  fglmVector temp = lhs;
419  temp -= rhs;
420  return temp;
421 }

Field Documentation

fglmVectorRep* fglmVector::rep
protected

Definition at line 21 of file fglmvec.h.


The documentation for this class was generated from the following files: