4 #include "processabstract.h"
11 void structure::print() {
12 printf("\nBEGIN structure:\n");
13 printf(" name=%s\n", name);
14 printf(" type=%d\n", type);
17 printf(" subtype=null\n");
18 else subtype->print();
20 for (int i=0; i<getnumfields(); i++)
23 for (int i=0; i<getnumlabels(); i++)
26 printf("END structure\n\n");
30 printf("\nBEGIN ttype\n");
31 printf(" ttype: primtype=%ld, intlength=%ld, type=%s\n", primtype, intlength, type);
32 printf("END ttype\n\n");
35 /*void tparam::print() {
38 void tlabel::print() {
39 printf("\nBEGIN tlabel\n");
40 printf(" field=%s\n", field);
41 specifictype->print();
42 printf("END tlabel\n\n");
45 void tfield::print() {
46 printf("\nBEGIN tfield\n");
47 printf(" name=\%s\n", name);
49 printf("END tfield\n\n");
52 AElementexpr * ttype::getsize() {
57 int ttype::getbytes(bitreader *br,model *m,Hashtable *env) {
58 int basesizeval=basesize(br,m,env);
61 Element * number=evaluateexpr(m,asize,env,true,false);
62 mult=number->intvalue();
65 if (gettype()==TTYPE_BIT) {
66 return ((mult-1)/8)+1;
68 return mult*basesizeval;
71 int ttype::basesize(bitreader *br,model *m,Hashtable *env) {
72 if ((primtype/TTYPE_PTR)>0)
74 if (gettype()==TTYPE_INT)
76 if (gettype()==TTYPE_SHORT)
78 if (gettype()==TTYPE_BYTE)
80 if (gettype()==TTYPE_BIT)
82 if (gettype()==TTYPE_STRUCT) {
83 /* Element **earray=new Element *[numparamvalues];
84 for(int i=0;i<numparamvalues;i++) {
85 earray[i]=evaluateexpr(br,paramvalues[i],env);
87 structure *st=m->getstructure(type);
88 int size=st->getsize(br,m,env);
89 /* for(int i=0;i<numparamvalues;i++)
96 int structure::getsize(bitreader *br,model *m, Hashtable *env) {
98 /* build parameter mapping */
99 /* for(int i=0;i<getnumparams();i++) {
100 env->put(getparam(i)->getname(),earray[i]);
102 /* loop through fields */
103 if (getsubtype()!=NULL) {
104 return getsubtype()->getbytes(br, m,env);
106 for(int j=0;j<getnumfields();j++)
107 totalsize+=getfield(j)->gettype()->getbytes(br,m,env);
111 char * tlabel::getname() {
112 return specifictype->getname();
114 ttype * tlabel::gettype() {
115 return specifictype->gettype();
118 structure::structure(char *nam) {
123 void structure::settype(int t) {
127 /*void structure::setparams(tparam **tp,int n) {
128 params=tp;numparams=n;
131 void structure::setsubtype(ttype *sub) {
135 ttype * structure::getsubtype() {
139 void structure::setfields(tfield **fieldarray, int n) {
144 void structure::setlabels(tlabel **lab,int n) {
149 /*int structure::getnumparams() {
153 /*tparam * structure::getparam(int i) {
157 int structure::getnumlabels() {
161 tlabel * structure::getlabel(int i) {
165 int structure::getnumfields() {
169 tfield * structure::getfield(int i) {
173 char * structure::getname() {
177 ttype::ttype(int typ) {
186 ttype::ttype(char *t) {
187 primtype=TTYPE_STRUCT;
195 ttype::ttype(char *t, AElementexpr *size) {
196 primtype=TTYPE_STRUCT;
200 //numparamvalues=numparam;
204 ttype::ttype(int type, AElementexpr * size) {
213 void ttype::makeptr() {
217 void ttype::setsize(AElementexpr *size) {
221 bool ttype::isptr() {
228 int ttype::numderef() {
229 return primtype/TTYPE_PTR;
232 int ttype::gettype() {
233 return primtype%TTYPE_PTR;
236 /*int ttype::getnumparamvalues() {
237 return numparamvalues;
240 AElementexpr * ttype::getparamvalues(int i) {
241 return paramvalues[i];
244 char * ttype::getname() {
248 /*tparam::tparam(ttype *t,char * n) {
251 char * tparam::getname() {
255 tlabel::tlabel(tfield *f, char *fld,AElementexpr *a) {
261 char *tlabel::getfield() {
265 AElementexpr * tlabel::getindex() {
269 tfield::tfield(ttype *tt, char *n) {
273 ttype * tfield::gettype() {
277 char * tfield::getname() {