blob: b6585f3e2695abaf860bff66ed879e4887d17a3a (
plain) (
tree)
|
|
#ifndef BUILTIN_H
#define BUILTIN_H
#include "model.h"
#include <string>
#include <gmpxx.h>
using std::string;
bool is_list(Cons *ptr);
/** @class InexactNumObj
* Inexact number implementation (using doubles)
*/
class InexactNumObj: public NumObj {
public:
InexactNumObj(NumLvl level);
};
/** @class CompNumObj
* Complex numbers
*/
class CompNumObj: public InexactNumObj {
public:
double real, imag;
/** Construct a complex number */
CompNumObj(double _real, double _imag);
/** Try to construct an CompNumObj object
* @return NULL if failed
*/
static CompNumObj *from_string(string repr);
/** Convert to a complex number from other numeric types */
CompNumObj *convert(NumObj* obj);
NumObj *add(NumObj *r);
NumObj *sub(NumObj *r);
NumObj *mul(NumObj *r);
NumObj *div(NumObj *r);
bool lt(NumObj *r);
bool gt(NumObj *r);
bool eq(NumObj *r);
string ext_repr();
};
/** @class RealNumObj
* Real numbers
*/
class RealNumObj: public InexactNumObj {
public:
double real;
/** Construct a real number */
RealNumObj(double _real);
/** Try to construct an RealNumObj object
* @return NULL if failed
*/
static RealNumObj *from_string(string repr);
/** Convert to a real number from other numeric types */
RealNumObj *convert(NumObj* obj);
NumObj *add(NumObj *r);
NumObj *sub(NumObj *r);
NumObj *mul(NumObj *r);
NumObj *div(NumObj *r);
bool lt(NumObj *r);
bool gt(NumObj *r);
bool eq(NumObj *r);
string ext_repr();
};
/** @class ExactNumObj
* Exact number implementation (using gmp)
*/
class ExactNumObj: public NumObj {
public:
ExactNumObj(NumLvl level);
};
/** @class RatNumObj
* Rational numbers
*/
class RatNumObj: public ExactNumObj {
public:
#ifndef GMP_SUPPORT
int a, b;
/** Construct a rational number */
RatNumObj(int _a, int _b);
#else
mpq_class val;
RatNumObj(mpq_class val);
#endif
/** Try to construct an RatNumObj object
* @return NULL if failed
*/
static RatNumObj *from_string(string repr);
/** Convert to a Rational number from other numeric types */
RatNumObj *convert(NumObj* obj);
NumObj *add(NumObj *r);
NumObj *sub(NumObj *r);
NumObj *mul(NumObj *r);
NumObj *div(NumObj *r);
bool lt(NumObj *r);
bool gt(NumObj *r);
bool eq(NumObj *r);
string ext_repr();
};
/** @class IntNumObj
* Integers
*/
class IntNumObj: public ExactNumObj {
|