The Original CHomP Software
Public Member Functions | Static Public Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Friends | List of all members
chomp::homology::integer Class Reference

This class defines integer numbers with overflow control and with some specific properties of an Euclidean domain. More...

#include <integer.h>

Public Member Functions

integeroperator= (int n)
 
int delta (void) const
 
integer normalized () const
 
integer operator- () const
 
integeroperator+= (const integer &n)
 
integeroperator*= (const integer &n)
 
integer operator+ (const integer &n) const
 
integer operator* (const integer &n) const
 
integer operator/ (const integer &n) const
 
integer operator% (const integer &n) const
 
int operator== (const integer &n) const
 

Static Public Member Functions

static int initialize (int n)
 
static const char * ringname ()
 
static const char * ringsymbol ()
 

Static Protected Member Functions

static int cut_down (int n)
 
static int is_prime (int n)
 
static int prime_number (int n)
 
static unsigned invert (unsigned n, unsigned q)
 

Protected Attributes

numbertype num
 

Static Protected Attributes

static int p
 

Friends

std::ostream & operator<< (std::ostream &out, const integer &n)
 
bool operator< (const integer &x, const integer &y)
 
bool operator> (const integer &x, const integer &y)
 

Detailed Description

This class defines integer numbers with overflow control and with some specific properties of an Euclidean domain.

Note that this class has very few features which are limited on purpose to optimize it for application in a chain complex class for homology computation.

Definition at line 133 of file integer.h.

Member Function Documentation

◆ cut_down()

int chomp::homology::integer::cut_down ( int  n)
inlinestaticprotected

Definition at line 194 of file integer.h.

195{
196 if (n >= 0)
197 if (n < p)
198 return n;
199 else
200 return (n % p);
201 else
202 {
203 int num = p - ((-n) % p);
204 if (num == p)
205 return 0;
206 else
207 return num;
208 }
209} /* cut_down */

References num, and p.

Referenced by operator=().

◆ delta()

int chomp::homology::integer::delta ( void  ) const
inline

Definition at line 393 of file integer.h.

394{
395 if (p)
396 return (num ? 1 : 0);
397 else
398 return ((num >= 0) ? num : -num);
399} /* integer::delta */

References num, and p.

◆ initialize()

int chomp::homology::integer::initialize ( int  n)
inlinestatic

Definition at line 387 of file integer.h.

388{
389 p = prime_number (n);
390 return p;
391} /* integer::initialize */
static int prime_number(int n)

References p, and prime_number().

◆ invert()

static unsigned chomp::homology::integer::invert ( unsigned  n,
unsigned  q 
)
staticprotected

Referenced by operator/().

◆ is_prime()

static int chomp::homology::integer::is_prime ( int  n)
staticprotected

◆ normalized()

integer chomp::homology::integer::normalized ( void  ) const
inline

Definition at line 401 of file integer.h.

402{
403 integer n;
404 if (num < 0)
405 n. num = (numbertype) (-num);
406 else
407 n. num = num;
408 return n;
409} /* integer::normalized */
signed short numbertype
The type of number used to store the value of an object of type "integer".
Definition: integer.h:126

References num.

◆ operator%()

integer chomp::homology::integer::operator% ( const integer n) const
inline

Definition at line 264 of file integer.h.

265{
266 integer result;
267 if (p)
268 result. num = 0;
269 else
270 result = num % n. num;
271 return result;
272} /* operator % */

References num, and p.

◆ operator*()

integer chomp::homology::integer::operator* ( const integer n) const
inline

Definition at line 337 of file integer.h.

338{
339 integer m (n);
340 m *= *this;
341 return m;
342} /* operator * */

◆ operator*=()

integer & chomp::homology::integer::operator*= ( const integer n)
inline

Definition at line 306 of file integer.h.

307{
308 if (p)
309 {
310 long result = (long) num * (long) n. num;
311 if (result >= 0)
312 num = (numbertype) (result % p);
313 else
314 {
315 num = (numbertype) (p - ((-result) % p));
316 if (num == p)
317 num = 0;
318 }
319 }
320 else
321 {
322 long result = (long) num * (long) (n. num);
323 num = (numbertype) result;
324 if ((long) num != result)
325 throw "Number out of range (*).";
326 }
327 return *this;
328} /* integer::operator *= */

References num, and p.

◆ operator+()

integer chomp::homology::integer::operator+ ( const integer n) const
inline

Definition at line 330 of file integer.h.

331{
332 integer m (n);
333 m += *this;
334 return m;
335} /* operator + */

◆ operator+=()

integer & chomp::homology::integer::operator+= ( const integer n)
inline

Definition at line 293 of file integer.h.

294{
295 if (!p)
296 if (((n. num >= 0) && (num + n. num < num)) ||
297 ((n. num < 0) && (num + n. num > num)))
298 throw "Number out of range (+).";
299 num += n. num;
300 if (p)
301 if (num >= p)
302 num -= (numbertype) p;
303 return *this;
304} /* integer::operator += */

References num, and p.

◆ operator-()

integer chomp::homology::integer::operator- ( ) const
inline

Definition at line 274 of file integer.h.

275{
276 if (p)
277 {
278 integer negative;
279 negative. num = (numbertype) (p - num);
280 return negative;
281 }
282 else
283 {
284 numbertype result = (numbertype) -num;
285 if ((long) result + (long) num != 0)
286 throw "Number out of range (unary -).";
287 integer intresult;
288 intresult = result;
289 return intresult;
290 }
291} /* integer::operator - (unary) */

References num, and p.

◆ operator/()

integer chomp::homology::integer::operator/ ( const integer n) const
inline

Definition at line 254 of file integer.h.

255{
256 integer result;
257 if (p)
258 result = num * (int) invert (n. num, p);
259 else
260 result. num = (numbertype) (num / n. num);
261 return result;
262} /* integer::operator / */
static unsigned invert(unsigned n, unsigned q)

References invert(), num, and p.

◆ operator=()

integer & chomp::homology::integer::operator= ( int  n)
inline

Definition at line 241 of file integer.h.

242{
243 if (p)
244 num = (numbertype) cut_down (n);
245 else
246 {
247 num = (numbertype) n;
248 if ((long) num != (long) n)
249 throw "Number out of range at assignment.";
250 }
251 return *this;
252} /* integer::operator = */
static int cut_down(int n)
Definition: integer.h:194

References cut_down(), num, and p.

◆ operator==()

int chomp::homology::integer::operator== ( const integer n) const
inline

Definition at line 344 of file integer.h.

345{
346 return (n. num == num);
347} /* operator == */

References num.

◆ prime_number()

static int chomp::homology::integer::prime_number ( int  n)
staticprotected

Referenced by initialize().

◆ ringname()

static const char * chomp::homology::integer::ringname ( )
static

◆ ringsymbol()

static const char * chomp::homology::integer::ringsymbol ( )
static

Friends And Related Function Documentation

◆ operator<

bool operator< ( const integer x,
const integer y 
)
friend

Definition at line 411 of file integer.h.

412{
413 return (x. num < y. num);
414} /* operator < */

◆ operator<<

std::ostream & operator<< ( std::ostream &  out,
const integer n 
)
friend

Definition at line 349 of file integer.h.

350{
351 out << (long) n. num;
352 return out;
353} /* operator << */

◆ operator>

bool operator> ( const integer x,
const integer y 
)
friend

Definition at line 416 of file integer.h.

417{
418 return (x. num > y. num);
419} /* operator > */

Member Data Documentation

◆ num

numbertype chomp::homology::integer::num
protected

◆ p

int chomp::homology::integer::p
staticprotected

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