Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Friends
Variable Class Reference

factory's class for variables More...

#include <variable.h>

Public Member Functions

 Variable ()
 
 Variable (int l)
 
 Variable (char name)
 
 Variable (int l, char name)
 
 Variable (const Variable &v)
 
 ~Variable ()
 
Variableoperator= (const Variable &v)
 
int level () const
 
char name () const
 
Variable next () const
 

Static Public Member Functions

static Variable highest ()
 

Private Member Functions

 Variable (int l, bool flag)
 

Private Attributes

int _level
 

Friends

bool operator== (const Variable &lhs, const Variable &rhs)
 
bool operator!= (const Variable &lhs, const Variable &rhs)
 
bool operator> (const Variable &lhs, const Variable &rhs)
 
bool operator< (const Variable &lhs, const Variable &rhs)
 
bool operator>= (const Variable &lhs, const Variable &rhs)
 
bool operator<= (const Variable &lhs, const Variable &rhs)
 
OSTREAMoperator<< (OSTREAM &os, const Variable &v)
 
void swap_levels ()
 
Variable rootOf (const CanonicalForm &, char name)
 returns a symbolic root of polynomial with name name. More...
 

Detailed Description

factory's class for variables

Definition at line 32 of file variable.h.

Constructor & Destructor Documentation

Variable::Variable ( int  l,
bool  flag 
)
private

Definition at line 47 of file variable.cc.

47  : _level(l)
48 {
49  ASSERT( flag, "illegal level" );
50 }
int _level
Definition: variable.h:35
#define ASSERT(expression, message)
Definition: cf_assert.h:99
int l
Definition: cfEzgcd.cc:94
Variable::Variable ( )
inline

Definition at line 38 of file variable.h.

38 : _level(LEVELBASE) {}
#define LEVELBASE
Definition: cf_defs.h:16
int _level
Definition: variable.h:35
Variable::Variable ( int  l)

Definition at line 52 of file variable.cc.

52  : _level(l)
53 {
54  //ASSERT( l > 0 && l != LEVELQUOT, "illegal level" );
55 }
int _level
Definition: variable.h:35
int l
Definition: cfEzgcd.cc:94
Variable::Variable ( char  name)

Definition at line 57 of file variable.cc.

58 {
59  bool isext = false;
60  int n, i;
61  if ( var_names_ext != 0 ) {
62  n = strlen( var_names_ext );
63  i = 1;
64  while ( i < n && var_names_ext[i] != name ) i++;
65  if ( i < n ) {
66  _level = -i;
67  isext = true;
68  }
69  }
70  if ( ! isext ) {
71  if ( var_names == 0 ) {
72  var_names = new char [3];
73  var_names[0] = '@';
74  var_names[1] = name;
75  var_names[2] = '\0';
76  _level = 1;
77  }
78  else {
79  n = strlen( var_names );
80  i = 1;
81  while ( i < n && var_names[i] != name ) i++;
82  if ( i < n )
83  _level = i;
84  else {
85  ASSERT( name != '@', "illegal variable name" );
86  char * newvarnames = new char [n+2];
87  for ( i = 0; i < n; i++ )
88  newvarnames[i] = var_names[i];
89  newvarnames[n] = name;
90  newvarnames[n+1] = 0;
91  delete [] var_names;
92  var_names = newvarnames;
93  _level = n;
94  }
95  }
96  }
97 }
static char * var_names_ext
Definition: variable.cc:43
int _level
Definition: variable.h:35
int i
Definition: cfEzgcd.cc:123
char name() const
Definition: variable.cc:122
#define ASSERT(expression, message)
Definition: cf_assert.h:99
static char * var_names
Definition: variable.cc:42
Variable::Variable ( int  l,
char  name 
)

Definition at line 99 of file variable.cc.

99  : _level(l)
100 {
101  ASSERT( l > 0 && l != LEVELQUOT, "illegal level" );
102  int n;
103  if ( (n = (var_names == 0 ? 0 : strlen( var_names ))) <= l ) {
104  char * newvarnames = new char [l+2];
105  int i;
106  for ( i = 0; i < n; i++ )
107  newvarnames[i] = var_names[i];
108  for ( i = n; i < l; i++ )
109  newvarnames[i] = '@';
110  newvarnames[l] = name;
111  newvarnames[l+1] = 0;
112  delete [] var_names;
113  var_names = newvarnames;
114  }
115  else {
116  ASSERT( var_names[l] == '@', "illegal name" );
117  var_names[l] = name;
118  }
119 }
int _level
Definition: variable.h:35
#define LEVELQUOT
Definition: cf_defs.h:18
int i
Definition: cfEzgcd.cc:123
char name() const
Definition: variable.cc:122
#define ASSERT(expression, message)
Definition: cf_assert.h:99
static char * var_names
Definition: variable.cc:42
int l
Definition: cfEzgcd.cc:94
Variable::Variable ( const Variable v)
inline

Definition at line 42 of file variable.h.

42 : _level(v._level) {}
int _level
Definition: variable.h:35
Variable::~Variable ( )
inline

Definition at line 43 of file variable.h.

43 {};

Member Function Documentation

static Variable Variable::highest ( )
inlinestatic

Definition at line 51 of file variable.h.

51 { return Variable( LEVELQUOT-1 ); }
#define LEVELQUOT
Definition: cf_defs.h:18
Variable()
Definition: variable.h:38
int Variable::level ( ) const
inline

Definition at line 49 of file variable.h.

49 { return _level; }
int _level
Definition: variable.h:35
char Variable::name ( ) const

Definition at line 122 of file variable.cc.

123 {
124  if ( _level > 0 && _level < (int)strlen( var_names ) )
125  return( var_names[_level] );
126  else if ( _level < 0 && -_level < (int)strlen( var_names_ext ) )
127  return( var_names_ext[-_level] );
128  else
129  return '@';
130 }
static char * var_names_ext
Definition: variable.cc:43
int _level
Definition: variable.h:35
static char * var_names
Definition: variable.cc:42
Variable Variable::next ( ) const
inline

Definition at line 52 of file variable.h.

52 { return Variable( _level+1 ); }
int _level
Definition: variable.h:35
Variable()
Definition: variable.h:38
Variable& Variable::operator= ( const Variable v)
inline

Definition at line 44 of file variable.h.

45  {
46  _level = v._level;
47  return *this;
48  }
int _level
Definition: variable.h:35

Friends And Related Function Documentation

bool operator!= ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 57 of file variable.h.

58  {
59  return lhs._level != rhs._level;
60  }
int _level
Definition: variable.h:35
bool operator< ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 65 of file variable.h.

66  {
67  return lhs._level < rhs._level;
68  }
int _level
Definition: variable.h:35
OSTREAM& operator<< ( OSTREAM os,
const Variable v 
)
friend

Definition at line 133 of file variable.cc.

134 {
135  if ( v._level == LEVELBASE )
136  os << "1";
137  else {
138  char * vn = ( v._level > 0 ) ? var_names : var_names_ext;
139  char dn = ( v._level > 0 ) ? default_name : default_name_ext;
140  int l = v._level;
141 
142  if ( l < 0 ) l = -l;
143  if ( (vn == 0) || ((int)strlen( vn ) <= l) )
144  os << dn << "_" << l;
145  else if ( vn[l] == '@' )
146  os << dn << "_" << l;
147  else
148  os << vn[l];
149  }
150  return os;
151 }
static char * var_names_ext
Definition: variable.cc:43
#define LEVELBASE
Definition: cf_defs.h:16
static char default_name
Definition: variable.cc:44
static char default_name_ext
Definition: variable.cc:45
int _level
Definition: variable.h:35
static char * var_names
Definition: variable.cc:42
int l
Definition: cfEzgcd.cc:94
bool operator<= ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 73 of file variable.h.

74  {
75  return lhs._level <= rhs._level;
76  }
int _level
Definition: variable.h:35
bool operator== ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 53 of file variable.h.

54  {
55  return lhs._level == rhs._level;
56  }
int _level
Definition: variable.h:35
bool operator> ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 61 of file variable.h.

62  {
63  return lhs._level > rhs._level;
64  }
int _level
Definition: variable.h:35
bool operator>= ( const Variable lhs,
const Variable rhs 
)
friend

Definition at line 69 of file variable.h.

70  {
71  return lhs._level >= rhs._level;
72  }
int _level
Definition: variable.h:35
Variable rootOf ( const CanonicalForm ,
char  name 
)
friend

returns a symbolic root of polynomial with name name.

Use it to define algebraic variables

Note
: algebraic variables have a level < 0
: algebraic variables have a level < 0

Definition at line 162 of file variable.cc.

163 {
164  ASSERT (mipo.isUnivariate(), "not a legal extension");
165 
166  int l;
167  if ( var_names_ext == 0 ) {
168  var_names_ext = new char [3];
169  var_names_ext[0] = '@';
170  var_names_ext[1] = name;
171  var_names_ext[2] = '\0';
172  l = 1;
173  Variable result( -l, true );
174  algextensions = new ext_entry [2];
175  algextensions[1] = ext_entry( 0, false );
176  algextensions[1] = ext_entry( (InternalPoly*)(conv2mipo( mipo, result ).getval()), true );
177  return result;
178  }
179  else {
180  int i, n = strlen( var_names_ext );
181  char * newvarnames = new char [n+2];
182  for ( i = 0; i < n; i++ )
183  newvarnames[i] = var_names_ext[i];
184  newvarnames[n] = name;
185  newvarnames[n+1] = 0;
186  delete [] var_names_ext;
187  var_names_ext = newvarnames;
188  l = n;
189  Variable result( -l, true );
190  ext_entry * newalgext = new ext_entry [n+1];
191  for ( i = 0; i < n; i++ )
192  newalgext[i] = algextensions[i];
193  newalgext[n] = ext_entry( 0, false );
194  delete [] algextensions;
195  algextensions = newalgext;
196  algextensions[n] = ext_entry( (InternalPoly*)(conv2mipo( mipo, result ).getval()), true );
197  return result;
198  }
199 }
static char * var_names_ext
Definition: variable.cc:43
factory&#39;s class for variables
Definition: variable.h:32
Definition: variable.cc:18
factory&#39;s class for polynomials
Definition: int_poly.h:74
int i
Definition: cfEzgcd.cc:123
static CanonicalForm conv2mipo(const CanonicalForm &mipo, const Variable &alpha)
Definition: variable.cc:154
bool isUnivariate() const
char name() const
Definition: variable.cc:122
static ext_entry * algextensions
Definition: variable.cc:41
#define ASSERT(expression, message)
Definition: cf_assert.h:99
return result
Definition: facAbsBiFact.cc:76
int l
Definition: cfEzgcd.cc:94
void swap_levels ( )
friend

Field Documentation

int Variable::_level
private

Definition at line 35 of file variable.h.


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