00001 00009 #ifndef CONS_HPP 00010 #define CONS_HPP 00011 00012 #include <iostream> 00013 #include "Cell.hpp" 00014 00015 using namespace std; 00016 00021 inline Cell* make_int(const int i) 00022 { 00023 return new IntCell(i); 00024 } 00025 00030 inline Cell* make_double(const double d) 00031 { 00032 return new DoubleCell(d); 00033 } 00034 00039 inline Cell* make_string(const char* const s) 00040 { 00041 return new StringCell(s); 00042 } 00043 00048 inline Cell* make_symbol(const char* const s) 00049 { 00050 return new SymbolCell(s); 00051 } 00052 00058 inline Cell* cons(Cell* const my_car, Cell* const my_cdr) 00059 { 00060 return new ConsCell(my_car, my_cdr); 00061 } 00062 00067 inline bool intp(Cell* const c) 00068 { 00069 return c->is_int(); 00070 } 00071 00076 inline bool doublep(Cell* const c) 00077 { 00078 return c->is_double(); 00079 } 00080 00085 inline bool stringp(Cell* const c) 00086 { 00087 return c->is_string(); 00088 } 00089 00094 inline bool symbolp(Cell* const c) 00095 { 00096 return c->is_symbol(); 00097 } 00098 00103 inline bool listp(Cell* const c) 00104 { 00105 return c->is_cons(); 00106 } 00107 00112 inline int get_int(Cell* const c) 00113 { 00114 return c->get_int(); 00115 } 00116 00121 inline double get_double(Cell* const c) 00122 { 00123 return c->get_double(); 00124 } 00125 00130 inline string get_string(Cell* const c) 00131 { 00132 return c->get_string(); 00133 } 00134 00140 inline string symbol_to_string(Cell* const c) 00141 { 00142 return c->get_symbol(); 00143 } 00144 00149 inline Cell* car(Cell* const c) 00150 { 00151 return c->get_car(); 00152 } 00153 00158 inline Cell* cdr(Cell* const c) 00159 { 00160 return c->get_cdr(); 00161 } 00162 00168 inline ostream& operator<<(ostream& os, const Cell& c) 00169 { 00170 c.print(os); 00171 return os; 00172 } 00173 00174 #endif // CONS_HPP