blob: 5147e2dd2c97ad227c79f7a0855ad563d43bbe6b (
plain) (
tree)
|
|
#ifndef TYPES_H
#define TYPES_H
#include "model.h"
#include <string>
#include <list>
#include <map>
#include <vector>
#include <set>
#include <gmpxx.h>
using std::list;
using std::string;
using std::map;
using std::vector;
using std::set;
const int CLS_OPT_OBJ = 1 << 3;
const int CLS_PROM_OBJ = 1 << 9;
const int CLS_SYM_OBJ = 1 << 2;
const int CLS_NUM_OBJ = 1 << 4;
const int CLS_BOOL_OBJ = 1 << 5;
const int CLS_CHAR_OBJ = 1 << 6;
const int CLS_STR_OBJ = 1 << 7;
const int CLS_VECT_OBJ = 1 << 8;
const int CLS_CONT_OBJ = 1 << 9;
const int CLS_ENVT_OBJ = 1 << 10;
static const int NUM_LVL_COMP = 0;
static const int NUM_LVL_REAL = 1;
static const int NUM_LVL_RAT = 2;
static const int NUM_LVL_INT = 3;
typedef set<EvalObj*> EvalObjAddrHash;
typedef vector<EvalObj*> EvalObjVec;
typedef map<string, EvalObj*> Str2EvalObj;
typedef EvalObj* (*BuiltinProc)(Pair *, const string &);
class PairReprCons;
/** @class Pair
* Pair construct, which can be used to represent a list, or further
* more, a syntax tree
* (car . cdr) in Scheme
*/
class Pair : public EvalObj {/*{{{*/
public:
EvalObj *car; /**< car (as in Scheme) */
EvalObj *cdr; /**< cdr (as in Scheme) */
Pair* next; /**< The next branch in effect */
Pair(EvalObj *car, EvalObj *cdr); /**< Create a Pair (car . cdr) */
~Pair();
ReprCons *get_repr_cons();
};/*}}}*/
/** @class EmptyList
* The empty list (special situation of a list)
*/
class EmptyList: public Pair {/*{{{*/
public:
EmptyList();
ReprCons *get_repr_cons();
};/*}}}*/
class ReprCons {/*{{{*/
public:
EvalObj *ori;
bool done;
string repr;
ReprCons(bool done, EvalObj *ori = NULL);
virtual EvalObj *next(const string &prev) = 0;
};/*}}}*/
class ReprStr : public ReprCons {/*{{{*/
public:
ReprStr(string repr);
EvalObj *next(const string &prev);
};/*}}}*/
class PairReprCons : public ReprCons {/*{{{*/
private:
int state;
EvalObj *ptr;
public:
PairReprCons(Pair *ptr, EvalObj *ori);
EvalObj *next(const string &prev);
};/*}}}*/
class VecObj;
class VectReprCons : public ReprCons {/*{{{*/
private:
VecObj *ptr;
size_t idx;
public:
VectReprCons(VecObj *ptr, EvalObj *ori);
EvalObj *next(const string &prev);
};/*}}}*/
/** @class ParseBracket
* To indiate a left bracket when parsing, used in the parse_stack
*/
class ParseBracket : public FrameObj {/*{{{*/
public:
unsigned char btype; /**< The type of the bracket */
/** Construct a ParseBracket object */
ParseBracket(unsigned char btype);
};/*}}}*/
/** @class UnspecObj
* The "unspecified" value returned by some builtin procedures
*/
class UnspecObj: public EvalObj
|