1 // provides an object wrapper around elementary types
10 typevalue=ELEMENT_OBJECT;
20 char * Element::gettoken() {
21 assert(typevalue==ELEMENT_TOKEN);
25 bool Element::isnumber() {
26 if ((type()==ELEMENT_INT)||
27 (type()==ELEMENT_BYTE)||
28 (type()==ELEMENT_SHORT))
34 Element::Element(void * objptr, structure * str) {
36 typevalue=ELEMENT_OBJECT;
45 Element::Element(int value) {
46 typevalue=ELEMENT_INT;
56 Element::Element(short value) {
57 typevalue=ELEMENT_SHORT;
67 Element::Element(bool b) {
68 typevalue=ELEMENT_BIT;
78 Element::Element(char byte) {
79 typevalue=ELEMENT_BYTE;
89 Element::Element(char * token) {/*Value destroyed by this destructor*/
91 typevalue=ELEMENT_TOKEN;
100 Element::Element(Element * o) {
101 this->integervalue=o->integervalue;
102 this->bytevalue=o->bytevalue;
103 this->itemtype=o->itemtype;
104 this->token=copystr(o->token);
105 this->object=o->object;
106 this->typevalue=o->typevalue;
107 this->bitvalue=o->bitvalue;
108 this->shortvalue=o->shortvalue;
111 void Element::print() {
115 printf("Int(%d)",integervalue);
117 printf("%d", integervalue);
123 printf("Short(%d)",shortvalue);
125 printf("%d", shortvalue);
138 printf("Bit(false)");
146 printf("Int(%c)",bytevalue);
148 printf("%c",bytevalue);
154 printf("Token(%s)",token);
161 printf("Object(%p)",object);
166 unsigned int Element::hashCode() {
180 return hashstring(token);
186 bool Element::equals(ElementWrapper *other) {
187 if (other->type()!=typevalue)
191 return (this->integervalue==((Element *)other)->integervalue);
193 return (this->shortvalue==((Element *)other)->shortvalue);
195 return (this->bitvalue==((Element *)other)->bitvalue);
197 return (this->bytevalue==((Element *)other)->bytevalue);
199 return (equivalentstrings(token,((Element *)other)->token)==1);
201 return object==((Element *)other)->object;
205 int Element::intvalue() {
214 printf("Illegal int conversion on Element\n");
219 short Element::getshortvalue() {
220 assert(typevalue==ELEMENT_SHORT);
224 char Element::getbytevalue() {
225 assert(typevalue==ELEMENT_BYTE);
229 bool Element::getboolvalue() {
230 assert(typevalue==ELEMENT_BIT);
234 void * Element::getobject() {
235 assert(typevalue==ELEMENT_OBJECT);
239 int Element::type() {
243 structure * Element::getstructure() {
247 Element::~Element() {
248 if(typevalue==ELEMENT_TOKEN)
252 unsigned int hashelement(ElementWrapper *e) {
253 return e->hashCode();
256 int elementequals(ElementWrapper *e1, ElementWrapper *e2) {
257 return e1->equals(e2);