First pass of lisp environment.
[lispp.git] / LispSymbol.h
blob1239eaac54bee19776d8647f3a6f944e7b625b57
1 #if !defined(H_LISPSYMBOL)
2 #define H_LISPSYMBOL
4 namespace Lisp
6 class LispSymbol;
8 class LispSymbol : public LispObj
10 typedef LispSymbol& LispSymbolPtr;
11 typedef LispSymbol& LispSymbolRef;
13 public:
14 LispSymbol()
16 symbol_count++;
17 std::ostringstream value_stream;
18 value_stream.setf( ios::hex, ios::basefield );
19 value_stream.width( 8 );
20 value_stream.fill( '0' );
21 value_stream << "Sym#" << ios::hex() << this << " " << car_ << " " cdr_;
22 name_ = value_stream.str();
25 LispSymbol(LispStringValue& name) : name_(name)
27 symbol_count++;
30 LispSymbol(LispStringValue& name, LispObj& obj)
32 plist->car(obj);
35 LispSymbol(LispSymbol& other)
37 if (&other != this)
39 name_ = other->name_;
40 plist_ = other->plist_;
41 symbol_count++;
45 LispSymbol& operator=(LispSymbol& other)
47 if (&other != this)
49 name_ = other->name_;
50 plist_ = other->plist_;
51 symbol_count++;
53 return *this;
56 operator LispObjRef()
58 return plist->car();
61 LispObjRef plist()
63 return plist->cdr();
66 LispSymbolRef operator=(LispObjRef& val)
68 plist->car(val);
71 operator LispStringVal()
73 return name_;
76 void getObjectType(LispObj::eLispObjectType& kind)
78 kind = LispObj::eSymbolObj;
81 private:
82 LispStringValue name_;
83 LispCons plist_;
84 static LispFixnumValue symbol_count;
89 #endif