Public Member Functions | Data Fields | Private Member Functions | Private Attributes
pointSet Class Reference

Public Member Functions

 pointSet (const int _dim, const int _index=0, const int count=MAXINITELEMS)
 
 ~pointSet ()
 
onePointP operator[] (const int index)
 
bool addPoint (const onePointP vert)
 Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim]. More...
 
bool addPoint (const int *vert)
 Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim]. More...
 
bool addPoint (const Coord_t *vert)
 Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim]. More...
 
bool removePoint (const int indx)
 
bool mergeWithExp (const onePointP vert)
 Adds point to pointSet, iff pointSet point = . More...
 
bool mergeWithExp (const int *vert)
 Adds point to pointSet, iff pointSet point = . More...
 
void mergeWithPoly (const poly p)
 
void getRowMP (const int indx, int *vert)
 
int getExpPos (const poly p)
 
void sort ()
 sort lex More...
 
void lift (int *l=NULL)
 Lifts the point set using sufficiently generic linear lifting homogeneous forms l[1]..l[dim] in Z. More...
 
void unlift ()
 

Data Fields

int num
 
int max
 
int dim
 
int index
 

Private Member Functions

 pointSet (const pointSet &)
 
bool smaller (int, int)
 points[a] < points[b] ? More...
 
bool larger (int, int)
 points[a] > points[b] ? More...
 
bool checkMem ()
 Checks, if more mem is needed ( i.e. More...
 

Private Attributes

onePointP * points
 
bool lifted
 

Detailed Description

Definition at line 163 of file mpr_base.cc.

Constructor & Destructor Documentation

pointSet::pointSet ( const int  _dim,
const int  _index = 0,
const int  count = MAXINITELEMS 
)

Definition at line 415 of file mpr_base.cc.

416  : num(0), max(count), dim(_dim), index(_index)
417 {
418  int i;
419  points = (onePointP *)omAlloc( (count+1) * sizeof(onePointP) );
420  for ( i= 0; i <= max; i++ )
421  {
422  points[i]= (onePointP)omAlloc( sizeof(onePoint) );
423  points[i]->point= (Coord_t *)omAlloc0( (dim+2) * sizeof(Coord_t) );
424  }
425  lifted= false;
426 }
int status int void size_t count
Definition: si_signals.h:59
bool lifted
Definition: mpr_base.cc:167
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
#define omAlloc(size)
Definition: omAllocDecl.h:210
int index
Definition: mpr_base.cc:173
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
unsigned int Coord_t
Definition: mpr_base.cc:134
int max
Definition: mpr_base.cc:171
#define omAlloc0(size)
Definition: omAllocDecl.h:211
pointSet::~pointSet ( )

Definition at line 428 of file mpr_base.cc.

429 {
430  int i;
431  int fdim= lifted ? dim+1 : dim+2;
432  for ( i= 0; i <= max; i++ )
433  {
434  omFreeSize( (void *) points[i]->point, fdim * sizeof(Coord_t) );
435  omFreeSize( (void *) points[i], sizeof(onePoint) );
436  }
437  omFreeSize( (void *) points, (max+1) * sizeof(onePointP) );
438 }
bool lifted
Definition: mpr_base.cc:167
int dim
Definition: mpr_base.cc:172
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
unsigned int Coord_t
Definition: mpr_base.cc:134
int max
Definition: mpr_base.cc:171
pointSet::pointSet ( const pointSet )
private

Member Function Documentation

bool pointSet::addPoint ( const onePointP  vert)

Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].

Returns false, iff additional memory was allocated ( i.e. num >= max ) else returns true

Definition at line 467 of file mpr_base.cc.

468 {
469  int i;
470  bool ret;
471  num++;
472  ret= checkMem();
473  points[num]->rcPnt= NULL;
474  for ( i= 1; i <= dim; i++ ) points[num]->point[i]= vert->point[i];
475  return ret;
476 }
int dim
Definition: mpr_base.cc:172
bool checkMem()
Checks, if more mem is needed ( i.e.
Definition: mpr_base.cc:446
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
int num
Definition: mpr_base.cc:170
bool pointSet::addPoint ( const int *  vert)

Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].

Returns false, iff additional memory was allocated ( i.e. num >= max ) else returns true

Definition at line 478 of file mpr_base.cc.

479 {
480  int i;
481  bool ret;
482  num++;
483  ret= checkMem();
484  points[num]->rcPnt= NULL;
485  for ( i= 1; i <= dim; i++ ) points[num]->point[i]= (Coord_t) vert[i];
486  return ret;
487 }
int dim
Definition: mpr_base.cc:172
bool checkMem()
Checks, if more mem is needed ( i.e.
Definition: mpr_base.cc:446
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
int num
Definition: mpr_base.cc:170
unsigned int Coord_t
Definition: mpr_base.cc:134
bool pointSet::addPoint ( const Coord_t vert)

Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].

Returns false, iff additional memory was allocated ( i.e. num >= max ) else returns true

Definition at line 489 of file mpr_base.cc.

490 {
491  int i;
492  bool ret;
493  num++;
494  ret= checkMem();
495  points[num]->rcPnt= NULL;
496  for ( i= 0; i < dim; i++ ) points[num]->point[i+1]= vert[i];
497  return ret;
498 }
int dim
Definition: mpr_base.cc:172
bool checkMem()
Checks, if more mem is needed ( i.e.
Definition: mpr_base.cc:446
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
#define NULL
Definition: omList.c:10
int num
Definition: mpr_base.cc:170
bool pointSet::checkMem ( )
inlineprivate

Checks, if more mem is needed ( i.e.

num >= max ), returns false, if more mem was allocated, else true

Definition at line 446 of file mpr_base.cc.

447 {
448  if ( num >= max )
449  {
450  int i;
451  int fdim= lifted ? dim+1 : dim+2;
452  points= (onePointP*)omReallocSize( points,
453  (max+1) * sizeof(onePointP),
454  (2*max + 1) * sizeof(onePointP) );
455  for ( i= max+1; i <= max*2; i++ )
456  {
457  points[i]= (onePointP)omAlloc( sizeof(struct onePoint) );
458  points[i]->point= (Coord_t *)omAlloc0( fdim * sizeof(Coord_t) );
459  }
460  max*= 2;
462  return false;
463  }
464  return true;
465 }
#define mprSTICKYPROT(msg)
Definition: mpr_global.h:54
bool lifted
Definition: mpr_base.cc:167
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define omReallocSize(addr, o_size, size)
Definition: omAllocDecl.h:220
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
unsigned int Coord_t
Definition: mpr_base.cc:134
int max
Definition: mpr_base.cc:171
#define ST_SPARSE_MEM
Definition: mpr_global.h:69
#define omAlloc0(size)
Definition: omAllocDecl.h:211
int pointSet::getExpPos ( const poly  p)

Definition at line 581 of file mpr_base.cc.

582 {
583  int * vert;
584  int i,j;
585 
586  // hier unschoen...
587  vert= (int *)omAlloc( (dim+1) * sizeof(int) );
588 
589  pGetExpV( p, vert );
590  for ( i= 1; i <= num; i++ )
591  {
592  for ( j= 1; j <= dim; j++ )
593  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
594  if ( j > dim ) break;
595  }
596  omFreeSize( (void *) vert, (dim+1) * sizeof(int) );
597 
598  if ( i > num ) return 0;
599  else return i;
600 }
int dim
Definition: mpr_base.cc:172
return P p
Definition: myNF.cc:203
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
onePointP * points
Definition: mpr_base.cc:166
#define omAlloc(size)
Definition: omAllocDecl.h:210
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
unsigned int Coord_t
Definition: mpr_base.cc:134
#define pGetExpV(p, e)
Gets a copy of (resp. set) the exponent vector, where e is assumed to point to (r->N +1)*sizeof(long)...
Definition: polys.h:96
void pointSet::getRowMP ( const int  indx,
int *  vert 
)

Definition at line 602 of file mpr_base.cc.

603 {
604  assume( indx > 0 && indx <= num && points[indx]->rcPnt );
605  int i;
606 
607  vert[0]= 0;
608  for ( i= 1; i <= dim; i++ )
609  vert[i]= (int)(points[indx]->point[i] - points[indx]->rcPnt->point[i]);
610 }
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
#define assume(x)
Definition: mod2.h:405
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
bool pointSet::larger ( int  a,
int  b 
)
inlineprivate

points[a] > points[b] ?

Definition at line 631 of file mpr_base.cc.

632 {
633  int i;
634 
635  for ( i= 1; i <= dim; i++ )
636  {
637  if ( points[a]->point[i] < points[b]->point[i] )
638  {
639  return false;
640  }
641  if ( points[a]->point[i] > points[b]->point[i] )
642  {
643  return true;
644  }
645  }
646 
647  return false; // they are equal
648 }
const poly a
Definition: syzextra.cc:212
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
const poly b
Definition: syzextra.cc:213
void pointSet::lift ( int *  l = NULL)

Lifts the point set using sufficiently generic linear lifting homogeneous forms l[1]..l[dim] in Z.

Every l[i] is of the form L1x1+...+Lnxn, for generic L1..Ln in Z.

Lifting raises dimension by one!

Definition at line 673 of file mpr_base.cc.

674 {
675  bool outerL= true;
676  int i, j;
677  int sum;
678 
679  dim++;
680 
681  if ( l==NULL )
682  {
683  outerL= false;
684  l= (int *)omAlloc( (dim+1) * sizeof(int) ); // [1..dim-1]
685 
686  for(i = 1; i < dim; i++)
687  {
688  l[i]= 1 + siRand() % LIFT_COOR;
689  }
690  }
691  for ( j=1; j <= num; j++ )
692  {
693  sum= 0;
694  for ( i=1; i < dim; i++ )
695  {
696  sum += (int)points[j]->point[i] * l[i];
697  }
698  points[j]->point[dim]= sum;
699  }
700 
701 #ifdef mprDEBUG_ALL
702  PrintS(" lift vector: ");
703  for ( j=1; j < dim; j++ ) Print(" %d ",l[j] );
704  PrintLn();
705 #ifdef mprDEBUG_ALL
706  PrintS(" lifted points: \n");
707  for ( j=1; j <= num; j++ )
708  {
709  Print("%d: <",j);print_exp(points[j],dim);PrintS(">\n");
710  }
711  PrintLn();
712 #endif
713 #endif
714 
715  lifted= true;
716 
717  if ( !outerL ) omFreeSize( (void *) l, (dim+1) * sizeof(int) );
718 }
void PrintLn()
Definition: reporter.cc:327
#define Print
Definition: emacs.cc:83
bool lifted
Definition: mpr_base.cc:167
int dim
Definition: mpr_base.cc:172
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
onePointP * points
Definition: mpr_base.cc:166
#define omAlloc(size)
Definition: omAllocDecl.h:210
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
void PrintS(const char *s)
Definition: reporter.cc:294
#define NULL
Definition: omList.c:10
int num
Definition: mpr_base.cc:170
#define LIFT_COOR
Definition: mpr_base.cc:53
int siRand()
Definition: sirandom.c:41
int l
Definition: cfEzgcd.cc:94
bool pointSet::mergeWithExp ( const onePointP  vert)

Adds point to pointSet, iff pointSet point = .

Returns true, iff added, else false.

Definition at line 515 of file mpr_base.cc.

516 {
517  int i,j;
518 
519  for ( i= 1; i <= num; i++ )
520  {
521  for ( j= 1; j <= dim; j++ )
522  if ( points[i]->point[j] != vert->point[j] ) break;
523  if ( j > dim ) break;
524  }
525 
526  if ( i > num )
527  {
528  addPoint( vert );
529  return true;
530  }
531  return false;
532 }
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
Definition: mpr_base.cc:467
bool pointSet::mergeWithExp ( const int *  vert)

Adds point to pointSet, iff pointSet point = .

Returns true, iff added, else false.

Definition at line 534 of file mpr_base.cc.

535 {
536  int i,j;
537 
538  for ( i= 1; i <= num; i++ )
539  {
540  for ( j= 1; j <= dim; j++ )
541  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
542  if ( j > dim ) break;
543  }
544 
545  if ( i > num )
546  {
547  addPoint( vert );
548  return true;
549  }
550  return false;
551 }
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
Definition: mpr_base.cc:467
unsigned int Coord_t
Definition: mpr_base.cc:134
void pointSet::mergeWithPoly ( const poly  p)

Definition at line 553 of file mpr_base.cc.

554 {
555  int i,j;
556  poly piter= p;
557  int * vert;
558  vert= (int *)omAlloc( (dim+1) * sizeof(int) );
559 
560  while ( piter )
561  {
562  pGetExpV( piter, vert );
563 
564  for ( i= 1; i <= num; i++ )
565  {
566  for ( j= 1; j <= dim; j++ )
567  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
568  if ( j > dim ) break;
569  }
570 
571  if ( i > num )
572  {
573  addPoint( vert );
574  }
575 
576  pIter( piter );
577  }
578  omFreeSize( (void *) vert, (dim+1) * sizeof(int) );
579 }
int dim
Definition: mpr_base.cc:172
return P p
Definition: myNF.cc:203
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
onePointP * points
Definition: mpr_base.cc:166
#define omAlloc(size)
Definition: omAllocDecl.h:210
#define pIter(p)
Definition: monomials.h:44
int j
Definition: myNF.cc:70
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
Definition: mpr_base.cc:467
unsigned int Coord_t
Definition: mpr_base.cc:134
#define pGetExpV(p, e)
Gets a copy of (resp. set) the exponent vector, where e is assumed to point to (r->N +1)*sizeof(long)...
Definition: polys.h:96
polyrec * poly
Definition: hilb.h:10
onePointP pointSet::operator[] ( const int  index)
inline

Definition at line 440 of file mpr_base.cc.

441 {
442  assume( index_i > 0 && index_i <= num );
443  return points[index_i];
444 }
onePointP * points
Definition: mpr_base.cc:166
#define assume(x)
Definition: mod2.h:405
int num
Definition: mpr_base.cc:170
bool pointSet::removePoint ( const int  indx)

Definition at line 500 of file mpr_base.cc.

501 {
502  assume( indx > 0 && indx <= num );
503  if ( indx != num )
504  {
505  onePointP tmp;
506  tmp= points[indx];
507  points[indx]= points[num];
508  points[num]= tmp;
509  }
510  num--;
511 
512  return true;
513 }
onePointP * points
Definition: mpr_base.cc:166
#define assume(x)
Definition: mod2.h:405
int num
Definition: mpr_base.cc:170
bool pointSet::smaller ( int  a,
int  b 
)
inlineprivate

points[a] < points[b] ?

Definition at line 612 of file mpr_base.cc.

613 {
614  int i;
615 
616  for ( i= 1; i <= dim; i++ )
617  {
618  if ( points[a]->point[i] > points[b]->point[i] )
619  {
620  return false;
621  }
622  if ( points[a]->point[i] < points[b]->point[i] )
623  {
624  return true;
625  }
626  }
627 
628  return false; // they are equal
629 }
const poly a
Definition: syzextra.cc:212
int dim
Definition: mpr_base.cc:172
onePointP * points
Definition: mpr_base.cc:166
int i
Definition: cfEzgcd.cc:123
const poly b
Definition: syzextra.cc:213
void pointSet::sort ( )

sort lex

Definition at line 650 of file mpr_base.cc.

651 {
652  int i;
653  bool found= true;
654  onePointP tmp;
655 
656  while ( found )
657  {
658  found= false;
659  for ( i= 1; i < num; i++ )
660  {
661  if ( larger( i, i+1 ) )
662  {
663  tmp= points[i];
664  points[i]= points[i+1];
665  points[i+1]= tmp;
666 
667  found= true;
668  }
669  }
670  }
671 }
bool larger(int, int)
points[a] > points[b] ?
Definition: mpr_base.cc:631
onePointP * points
Definition: mpr_base.cc:166
bool found
Definition: facFactorize.cc:56
int i
Definition: cfEzgcd.cc:123
int num
Definition: mpr_base.cc:170
void pointSet::unlift ( )
inline

Definition at line 232 of file mpr_base.cc.

232 { dim--; lifted= false; }
bool lifted
Definition: mpr_base.cc:167
int dim
Definition: mpr_base.cc:172

Field Documentation

int pointSet::dim

Definition at line 172 of file mpr_base.cc.

int pointSet::index

Definition at line 173 of file mpr_base.cc.

bool pointSet::lifted
private

Definition at line 167 of file mpr_base.cc.

int pointSet::max

Definition at line 171 of file mpr_base.cc.

int pointSet::num

Definition at line 170 of file mpr_base.cc.

onePointP* pointSet::points
private

Definition at line 166 of file mpr_base.cc.


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