My Project  UNKNOWN_GIT_VERSION
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 \cap point = \emptyset. More...
 
bool mergeWithExp (const int *vert)
 Adds point to pointSet, iff pointSet \cap point = \emptyset. 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 162 of file mpr_base.cc.

Constructor & Destructor Documentation

◆ pointSet() [1/2]

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

Definition at line 414 of file mpr_base.cc.

415  : num(0), max(count), dim(_dim), index(_index)
416 {
417  int i;
418  points = (onePointP *)omAlloc( (count+1) * sizeof(onePointP) );
419  for ( i= 0; i <= max; i++ )
420  {
421  points[i]= (onePointP)omAlloc( sizeof(onePoint) );
422  points[i]->point= (Coord_t *)omAlloc0( (dim+2) * sizeof(Coord_t) );
423  }
424  lifted= false;
425 }

◆ ~pointSet()

pointSet::~pointSet ( )

Definition at line 427 of file mpr_base.cc.

428 {
429  int i;
430  int fdim= lifted ? dim+1 : dim+2;
431  for ( i= 0; i <= max; i++ )
432  {
433  omFreeSize( (void *) points[i]->point, fdim * sizeof(Coord_t) );
434  omFreeSize( (void *) points[i], sizeof(onePoint) );
435  }
436  omFreeSize( (void *) points, (max+1) * sizeof(onePointP) );
437 }

◆ pointSet() [2/2]

pointSet::pointSet ( const pointSet )
private

Member Function Documentation

◆ addPoint() [1/3]

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 488 of file mpr_base.cc.

489 {
490  int i;
491  bool ret;
492  num++;
493  ret= checkMem();
494  points[num]->rcPnt= NULL;
495  for ( i= 0; i < dim; i++ ) points[num]->point[i+1]= vert[i];
496  return ret;
497 }

◆ addPoint() [2/3]

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 477 of file mpr_base.cc.

478 {
479  int i;
480  bool ret;
481  num++;
482  ret= checkMem();
483  points[num]->rcPnt= NULL;
484  for ( i= 1; i <= dim; i++ ) points[num]->point[i]= (Coord_t) vert[i];
485  return ret;
486 }

◆ addPoint() [3/3]

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 466 of file mpr_base.cc.

467 {
468  int i;
469  bool ret;
470  num++;
471  ret= checkMem();
472  points[num]->rcPnt= NULL;
473  for ( i= 1; i <= dim; i++ ) points[num]->point[i]= vert->point[i];
474  return ret;
475 }

◆ checkMem()

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 445 of file mpr_base.cc.

446 {
447  if ( num >= max )
448  {
449  int i;
450  int fdim= lifted ? dim+1 : dim+2;
451  points= (onePointP*)omReallocSize( points,
452  (max+1) * sizeof(onePointP),
453  (2*max + 1) * sizeof(onePointP) );
454  for ( i= max+1; i <= max*2; i++ )
455  {
456  points[i]= (onePointP)omAlloc( sizeof(struct onePoint) );
457  points[i]->point= (Coord_t *)omAlloc0( fdim * sizeof(Coord_t) );
458  }
459  max*= 2;
461  return false;
462  }
463  return true;
464 }

◆ getExpPos()

int pointSet::getExpPos ( const poly  p)

Definition at line 580 of file mpr_base.cc.

581 {
582  int * vert;
583  int i,j;
584 
585  // hier unschoen...
586  vert= (int *)omAlloc( (dim+1) * sizeof(int) );
587 
588  p_GetExpV( p, vert, currRing );
589  for ( i= 1; i <= num; i++ )
590  {
591  for ( j= 1; j <= dim; j++ )
592  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
593  if ( j > dim ) break;
594  }
595  omFreeSize( (void *) vert, (dim+1) * sizeof(int) );
596 
597  if ( i > num ) return 0;
598  else return i;
599 }

◆ getRowMP()

void pointSet::getRowMP ( const int  indx,
int *  vert 
)

Definition at line 601 of file mpr_base.cc.

602 {
603  assume( indx > 0 && indx <= num && points[indx]->rcPnt );
604  int i;
605 
606  vert[0]= 0;
607  for ( i= 1; i <= dim; i++ )
608  vert[i]= (int)(points[indx]->point[i] - points[indx]->rcPnt->point[i]);
609 }

◆ larger()

bool pointSet::larger ( int  a,
int  b 
)
inlineprivate

points[a] > points[b] ?

Definition at line 630 of file mpr_base.cc.

631 {
632  int i;
633 
634  for ( i= 1; i <= dim; i++ )
635  {
636  if ( points[a]->point[i] < points[b]->point[i] )
637  {
638  return false;
639  }
640  if ( points[a]->point[i] > points[b]->point[i] )
641  {
642  return true;
643  }
644  }
645 
646  return false; // they are equal
647 }

◆ lift()

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 672 of file mpr_base.cc.

673 {
674  bool outerL= true;
675  int i, j;
676  int sum;
677 
678  dim++;
679 
680  if ( l==NULL )
681  {
682  outerL= false;
683  l= (int *)omAlloc( (dim+1) * sizeof(int) ); // [1..dim-1]
684 
685  for(i = 1; i < dim; i++)
686  {
687  l[i]= 1 + siRand() % LIFT_COOR;
688  }
689  }
690  for ( j=1; j <= num; j++ )
691  {
692  sum= 0;
693  for ( i=1; i < dim; i++ )
694  {
695  sum += (int)points[j]->point[i] * l[i];
696  }
697  points[j]->point[dim]= sum;
698  }
699 
700 #ifdef mprDEBUG_ALL
701  PrintS(" lift vector: ");
702  for ( j=1; j < dim; j++ ) Print(" %d ",l[j] );
703  PrintLn();
704 #ifdef mprDEBUG_ALL
705  PrintS(" lifted points: \n");
706  for ( j=1; j <= num; j++ )
707  {
708  Print("%d: <",j);print_exp(points[j],dim);PrintS(">\n");
709  }
710  PrintLn();
711 #endif
712 #endif
713 
714  lifted= true;
715 
716  if ( !outerL ) omFreeSize( (void *) l, (dim+1) * sizeof(int) );
717 }

◆ mergeWithExp() [1/2]

bool pointSet::mergeWithExp ( const int *  vert)

Adds point to pointSet, iff pointSet \cap point = \emptyset.

Returns true, iff added, else false.

Definition at line 533 of file mpr_base.cc.

534 {
535  int i,j;
536 
537  for ( i= 1; i <= num; i++ )
538  {
539  for ( j= 1; j <= dim; j++ )
540  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
541  if ( j > dim ) break;
542  }
543 
544  if ( i > num )
545  {
546  addPoint( vert );
547  return true;
548  }
549  return false;
550 }

◆ mergeWithExp() [2/2]

bool pointSet::mergeWithExp ( const onePointP  vert)

Adds point to pointSet, iff pointSet \cap point = \emptyset.

Returns true, iff added, else false.

Definition at line 514 of file mpr_base.cc.

515 {
516  int i,j;
517 
518  for ( i= 1; i <= num; i++ )
519  {
520  for ( j= 1; j <= dim; j++ )
521  if ( points[i]->point[j] != vert->point[j] ) break;
522  if ( j > dim ) break;
523  }
524 
525  if ( i > num )
526  {
527  addPoint( vert );
528  return true;
529  }
530  return false;
531 }

◆ mergeWithPoly()

void pointSet::mergeWithPoly ( const poly  p)

Definition at line 552 of file mpr_base.cc.

553 {
554  int i,j;
555  poly piter= p;
556  int * vert;
557  vert= (int *)omAlloc( (dim+1) * sizeof(int) );
558 
559  while ( piter )
560  {
561  p_GetExpV( piter, vert, currRing );
562 
563  for ( i= 1; i <= num; i++ )
564  {
565  for ( j= 1; j <= dim; j++ )
566  if ( points[i]->point[j] != (Coord_t) vert[j] ) break;
567  if ( j > dim ) break;
568  }
569 
570  if ( i > num )
571  {
572  addPoint( vert );
573  }
574 
575  pIter( piter );
576  }
577  omFreeSize( (void *) vert, (dim+1) * sizeof(int) );
578 }

◆ operator[]()

onePointP pointSet::operator[] ( const int  index)
inline

Definition at line 439 of file mpr_base.cc.

440 {
441  assume( index_i > 0 && index_i <= num );
442  return points[index_i];
443 }

◆ removePoint()

bool pointSet::removePoint ( const int  indx)

Definition at line 499 of file mpr_base.cc.

500 {
501  assume( indx > 0 && indx <= num );
502  if ( indx != num )
503  {
504  onePointP tmp;
505  tmp= points[indx];
506  points[indx]= points[num];
507  points[num]= tmp;
508  }
509  num--;
510 
511  return true;
512 }

◆ smaller()

bool pointSet::smaller ( int  a,
int  b 
)
inlineprivate

points[a] < points[b] ?

Definition at line 611 of file mpr_base.cc.

612 {
613  int i;
614 
615  for ( i= 1; i <= dim; i++ )
616  {
617  if ( points[a]->point[i] > points[b]->point[i] )
618  {
619  return false;
620  }
621  if ( points[a]->point[i] < points[b]->point[i] )
622  {
623  return true;
624  }
625  }
626 
627  return false; // they are equal
628 }

◆ sort()

void pointSet::sort ( )

sort lex

Definition at line 649 of file mpr_base.cc.

650 {
651  int i;
652  bool found= true;
653  onePointP tmp;
654 
655  while ( found )
656  {
657  found= false;
658  for ( i= 1; i < num; i++ )
659  {
660  if ( larger( i, i+1 ) )
661  {
662  tmp= points[i];
663  points[i]= points[i+1];
664  points[i+1]= tmp;
665 
666  found= true;
667  }
668  }
669  }
670 }

◆ unlift()

void pointSet::unlift ( )
inline

Definition at line 231 of file mpr_base.cc.

231 { dim--; lifted= false; }

Field Documentation

◆ dim

int pointSet::dim

Definition at line 171 of file mpr_base.cc.

◆ index

int pointSet::index

Definition at line 172 of file mpr_base.cc.

◆ lifted

bool pointSet::lifted
private

Definition at line 166 of file mpr_base.cc.

◆ max

int pointSet::max

Definition at line 170 of file mpr_base.cc.

◆ num

int pointSet::num

Definition at line 169 of file mpr_base.cc.

◆ points

onePointP* pointSet::points
private

Definition at line 165 of file mpr_base.cc.


The documentation for this class was generated from the following file:
j
int j
Definition: facHensel.cc:105
onePoint
Definition: mpr_base.cc:141
ST_SPARSE_MEM
#define ST_SPARSE_MEM
Definition: mpr_global.h:69
b
CanonicalForm b
Definition: cfModGcd.cc:4044
mprSTICKYPROT
#define mprSTICKYPROT(msg)
Definition: mpr_global.h:54
found
bool found
Definition: facFactorize.cc:56
pointSet::index
int index
Definition: mpr_base.cc:172
pointSet::checkMem
bool checkMem()
Checks, if more mem is needed ( i.e.
Definition: mpr_base.cc:445
currRing
ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
Definition: polys.cc:13
i
int i
Definition: cfEzgcd.cc:125
pointSet::larger
bool larger(int, int)
points[a] > points[b] ?
Definition: mpr_base.cc:630
PrintS
void PrintS(const char *s)
Definition: reporter.cc:284
omFreeSize
#define omFreeSize(addr, size)
Definition: omAllocDecl.h:260
pointSet::addPoint
bool addPoint(const onePointP vert)
Adds a point to pointSet, copy vert[0,...,dim] ot point[num+1][0,...,dim].
Definition: mpr_base.cc:466
pIter
#define pIter(p)
Definition: monomials.h:38
omAlloc
#define omAlloc(size)
Definition: omAllocDecl.h:210
pointSet::dim
int dim
Definition: mpr_base.cc:171
p_GetExpV
static void p_GetExpV(poly p, int *ev, const ring r)
Definition: p_polys.h:1457
Coord_t
unsigned int Coord_t
Definition: mpr_base.cc:133
pointSet::lifted
bool lifted
Definition: mpr_base.cc:166
Print
#define Print
Definition: emacs.cc:80
LIFT_COOR
#define LIFT_COOR
Definition: mpr_base.cc:52
pointSet::max
int max
Definition: mpr_base.cc:170
assume
#define assume(x)
Definition: mod2.h:390
NULL
#define NULL
Definition: omList.c:10
l
int l
Definition: cfEzgcd.cc:93
pointSet::num
int num
Definition: mpr_base.cc:169
p
int p
Definition: cfModGcd.cc:4019
pointSet::points
onePointP * points
Definition: mpr_base.cc:165
count
int status int void size_t count
Definition: si_signals.h:59
PrintLn
void PrintLn()
Definition: reporter.cc:310
siRand
int siRand()
Definition: sirandom.c:41
omAlloc0
#define omAlloc0(size)
Definition: omAllocDecl.h:211
omReallocSize
#define omReallocSize(addr, o_size, size)
Definition: omAllocDecl.h:220