52 assert(ind <= (
int)
m_Names.size());
144 short type = oldStrc[0];
151 int eleLen = curStruct[1];
154 for (
int j=0; j<eleLen; j++, curStruct+=2)
156 if (curStruct[0] == type)
160 if (
m_Names[curStruct[1]].m_isPointer)
179 assert(!(
m_Names.size() == 0));
199 #ifdef SLOW_FORWARD_COMPATIBLE 200 char* typeName =
mTypes[oldLookup];
207 short *curStruct = memDNA->
mStructs[newLookup];
213 short *curStruct = memDNA->
mStructs[oldLookup];
221 #ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY 223 if (curStruct[1] == oldStruct[1])
226 if (
mTlens[oldStruct[0]] == memDNA->
mTlens[curStruct[0]])
229 int elementLength = oldStruct[1];
236 for (
int j=0; j<elementLength; j++, curStruct+=2, oldStruct+=2)
241 if (strcmp(
mTypes[oldStruct[0]], memDNA->
mTypes[curStruct[0]])!=0)
248 if (strcmp(
m_Names[oldStruct[1]].m_name, memDNA->
m_Names[curStruct[1]].m_name)!=0)
279 int len = strlen(name);
294 bp = strchr(name,
'[');
299 while (++bp < name+len-1) {
304 if (c <= '9' && c >=
'0') {
308 printf(
"array parse error.\n");
317 bp = strchr(bp,
'[');
322 while (++bp < name+len-1) {
327 if (c <= '9' && c >=
'0') {
331 printf(
"array2 parse error.\n");
351 int *intPtr=0;
short *shtPtr=0;
352 char *cp = 0;
int dataLen =0;
364 if (strncmp(data,
"SDNA", 4)==0)
382 for ( i=0; i<dataLen; i++)
405 assert(strncmp(cp,
"TYPE", 4)==0); intPtr++;
415 for ( i=0; i<dataLen; i++)
432 assert(strncmp(cp,
"TLEN", 4)==0); intPtr++;
436 shtPtr = (
short*)intPtr;
437 for ( i=0; i<dataLen; i++, shtPtr++)
444 if (dataLen & 1) shtPtr++;
457 intPtr = (
int*)shtPtr;
459 assert(strncmp(cp,
"STRC", 4)==0); intPtr++;
469 shtPtr = (
short*)intPtr;
470 for ( i=0; i<dataLen; i++)
481 for (
int a=0; a<len; a++, shtPtr+=2)
488 shtPtr+= (2*shtPtr[1])+2;
511 int len = strlen(
string);
515 for (
int i=0; i<len; i++)
537 for (i=0;i<numTypes;i++)
554 short* newStruct =
mStructs[oldLookup];
555 char* typeName =
mTypes[newStruct[0]];
556 printf(
"%3d: %s ",i,typeName);
559 int len = oldStruct[1];
560 printf(
" (%d fields) ",len);
565 for (j=0; j<len; ++j,oldStruct+=2) {
566 const char* name =
m_Names[oldStruct[1]].m_name;
567 printf(
"%s %s",
mTypes[oldStruct[0]],name);
571 if (
m_Names[oldStruct[1]].m_isPointer)
578 printf(
" /* %d bytes */",elemNumBytes*arrayDimensions);
585 totalBytes+=elemNumBytes*arrayDimensions;
587 printf(
"\ntotalBytes=%d\n\n",totalBytes);
595 for (i=0; i<bf->types_count; ++i) {
598 printf(
"%3d: sizeof(%s%s)=%d",
600 bf->types[i].is_struct ?
"struct " :
"atomic ",
601 bf->types[i].name, bf->types[i].size);
602 if (bf->types[i].is_struct) {
604 printf(
", %d fields: { ", bf->types[i].fieldtypes_count);
605 for (j=0; j<bf->types[i].fieldtypes_count; ++j) {
607 bf->types[bf->types[i].fieldtypes[j]].name,
608 bf->names[bf->types[i].fieldnames[j]]);
609 if (j == bf->types[i].fieldtypes_count-1) {
void push_back(const T &_Val)
btAlignedObjectArray< int > mCMPFlags
int getArraySizeNew(short name)
btAlignedObjectArray< short * > mStructs
bool lessThan(bDNA *other)
const T & at(int n) const
void dumpTypeDefinitions()
void initCmpFlags(bDNA *memDNA)
btAlignedObjectArray< short > mTlens
btAlignedObjectArray< bNameInfo > m_Names
static int swapInt(int inte)
int size() const
return the number of elements in the array
btHashMap< btHashInt, int > mStructReverse
static int name_is_array(char *name, int *dim1, int *dim2)
void insert(const Key &key, const Value &value)
int getArraySize(char *str)
const Value * find(const Key &key) const
bool flagNotEqual(int dna_nr)
very basic hashable string implementation, compatible with btHashMap
void resize(int newsize, const T &fillData=T())
short * getStruct(int ind)
void init(char *data, int len, bool swap=false)
bool flagEqual(int dna_nr)
T * btAlignPointer(T *unalignedPtr, size_t alignment)
align a pointer to the provided alignment, upwards
static short swapShort(short sht)
void initRecurseCmpFlags(int i)
btAlignedObjectArray< char * > mTypes
btHashMap< btHashString, int > mTypeLookup
int getReverseType(short type)
bool flagNone(int dna_nr)