diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp')
| -rw-r--r-- | thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp | 355 | 
1 files changed, 171 insertions, 184 deletions
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp index 0fe5056922..09c8f23859 100644 --- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp +++ b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp @@ -23,13 +23,11 @@ subject to the following restrictions:  //this define will force traversal of structures, to check backward (and forward) compatibility  //#define TEST_BACKWARD_FORWARD_COMPATIBILITY -  using namespace bParse; -  // ----------------------------------------------------- //  bDNA::bDNA() -	:	mPtrLen(0) +	: mPtrLen(0)  {  	// --  } @@ -43,7 +41,7 @@ bDNA::~bDNA()  // ----------------------------------------------------- //  bool bDNA::lessThan(bDNA *file)  { -	return ( m_Names.size() < file->m_Names.size()); +	return (m_Names.size() < file->m_Names.size());  }  // ----------------------------------------------------- // @@ -53,36 +51,31 @@ char *bDNA::getName(int ind)  	return m_Names[ind].m_name;  } -  // ----------------------------------------------------- //  char *bDNA::getType(int ind)  { -	assert(ind<=  (int)mTypes.size()); +	assert(ind <= (int)mTypes.size());  	return mTypes[ind];  } -  // ----------------------------------------------------- //  short *bDNA::getStruct(int ind)  { -	assert(ind <=  (int)mStructs.size()); +	assert(ind <= (int)mStructs.size());  	return mStructs[ind];  } -  // ----------------------------------------------------- //  short bDNA::getLength(int ind)  { -	assert(ind <=  (int)mTlens.size()); +	assert(ind <= (int)mTlens.size());  	return mTlens[ind];  } -  // ----------------------------------------------------- //  int bDNA::getReverseType(short type)  { - -	int* intPtr = mStructReverse.find(type); +	int *intPtr = mStructReverse.find(type);  	if (intPtr)  		return *intPtr; @@ -92,12 +85,11 @@ int bDNA::getReverseType(short type)  // ----------------------------------------------------- //  int bDNA::getReverseType(const char *type)  { -  	b3HashString key(type); -	int* valuePtr = mTypeLookup.find(key); +	int *valuePtr = mTypeLookup.find(key);  	if (valuePtr)  		return *valuePtr; -	 +  	return -1;  } @@ -110,22 +102,22 @@ int bDNA::getNumStructs()  // ----------------------------------------------------- //  bool bDNA::flagNotEqual(int dna_nr)  { -	assert(dna_nr <=	(int)mCMPFlags.size()); +	assert(dna_nr <= (int)mCMPFlags.size());  	return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU;  }  // ----------------------------------------------------- //  bool bDNA::flagEqual(int dna_nr)  { -	assert(dna_nr <=	(int)mCMPFlags.size()); +	assert(dna_nr <= (int)mCMPFlags.size());  	int flag = mCMPFlags[dna_nr]; -	return  flag == FDF_STRUCT_EQU; +	return flag == FDF_STRUCT_EQU;  }  // ----------------------------------------------------- //  bool bDNA::flagNone(int dna_nr)  { -	assert(dna_nr <=	(int)mCMPFlags.size()); +	assert(dna_nr <= (int)mCMPFlags.size());  	return mCMPFlags[dna_nr] == FDF_NONE;  } @@ -143,15 +135,15 @@ void bDNA::initRecurseCmpFlags(int iter)  	short *oldStrc = mStructs[iter];  	short type = oldStrc[0]; -	for (int i=0; i<(int)mStructs.size(); i++) +	for (int i = 0; i < (int)mStructs.size(); i++)  	{ -		if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU ) +		if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU)  		{  			short *curStruct = mStructs[i];  			int eleLen = curStruct[1]; -			curStruct+=2; +			curStruct += 2; -			for (int j=0; j<eleLen; j++, curStruct+=2) +			for (int j = 0; j < eleLen; j++, curStruct += 2)  			{  				if (curStruct[0] == type)  				{ @@ -171,18 +163,14 @@ void bDNA::initRecurseCmpFlags(int iter)  // ----------------------------------------------------- //  void bDNA::initCmpFlags(bDNA *memDNA)  { - -    // compare the file to memory +	// compare the file to memory  	// this ptr should be the file data - -	assert(!(m_Names.size() == 0));// && "SDNA empty!"); +	assert(!(m_Names.size() == 0));  // && "SDNA empty!");  	mCMPFlags.resize(mStructs.size(), FDF_NONE); - -  	int i; -	for ( i=0; i<(int)mStructs.size(); i++) +	for (i = 0; i < (int)mStructs.size(); i++)  	{  		short *oldStruct = mStructs[i]; @@ -196,7 +184,7 @@ void bDNA::initCmpFlags(bDNA *memDNA)  //#define SLOW_FORWARD_COMPATIBLE 1  #ifdef SLOW_FORWARD_COMPATIBLE -		char* typeName = mTypes[oldLookup]; +		char *typeName = mTypes[oldLookup];  		int newLookup = memDNA->getReverseType(typeName);  		if (newLookup == -1)  		{ @@ -210,71 +198,61 @@ void bDNA::initCmpFlags(bDNA *memDNA)  		if (oldLookup < memDNA->mStructs.size())  		{  			short *curStruct = memDNA->mStructs[oldLookup]; -#endif	 -	 -		 +#endif -			// rebuild... -			mCMPFlags[i] = FDF_STRUCT_NEQU; +		// rebuild... +		mCMPFlags[i] = FDF_STRUCT_NEQU;  #ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY -			if (curStruct[1] == oldStruct[1]) +		if (curStruct[1] == oldStruct[1]) +		{ +			// type len same ... +			if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]])  			{ -				// type len same ... -				if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]]) -				{ -					bool isSame = true; -					int elementLength = oldStruct[1]; - +				bool isSame = true; +				int elementLength = oldStruct[1]; -					curStruct+=2; -					oldStruct+=2; +				curStruct += 2; +				oldStruct += 2; +				for (int j = 0; j < elementLength; j++, curStruct += 2, oldStruct += 2) +				{ +					// type the same +					//const char* typeFileDNA = mTypes[oldStruct[0]]; +					//const char* typeMemDNA = mTypes[curStruct[0]]; +					if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]]) != 0) +					{ +						isSame = false; +						break; +					} -					for (int j=0; j<elementLength; j++, curStruct+=2, oldStruct+=2) +					// name the same +					if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name) != 0)  					{ -						// type the same -						//const char* typeFileDNA = mTypes[oldStruct[0]]; -						//const char* typeMemDNA = mTypes[curStruct[0]]; -						if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]])!=0) -						{ -							isSame=false; -							break; -						} - -						// name the same -						if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name)!=0) -						{ -							isSame=false; -							break; -						} +						isSame = false; +						break;  					} -					// flag valid == -					if (isSame) -						mCMPFlags[i] = FDF_STRUCT_EQU;  				} +				// flag valid == +				if (isSame) +					mCMPFlags[i] = FDF_STRUCT_EQU;  			} -#endif  		} -	} - - - - - -	// recurse in -	for ( i=0; i<(int)mStructs.size(); i++) -	{ -		if (mCMPFlags[i] == FDF_STRUCT_NEQU) -			initRecurseCmpFlags(i); +#endif  	}  } +// recurse in +for (i = 0; i < (int)mStructs.size(); i++) +{ +	if (mCMPFlags[i] == FDF_STRUCT_NEQU) +		initRecurseCmpFlags(i); +} +} - - -static int name_is_array(char* name, int* dim1, int* dim2) { +static int name_is_array(char *name, int *dim1, int *dim2) +{  	int len = strlen(name);  	/*fprintf(stderr,"[%s]",name);*/  	/*if (len >= 1) { @@ -284,58 +262,77 @@ static int name_is_array(char* name, int* dim1, int* dim2) {  	return 0;*/  	char *bp;  	int num; -	if (dim1) { +	if (dim1) +	{  		*dim1 = 1;  	} -	if (dim2) { +	if (dim2) +	{  		*dim2 = 1;  	}  	bp = strchr(name, '['); -	if (!bp) { +	if (!bp) +	{  		return 0;  	}  	num = 0; -	while (++bp < name+len-1) { +	while (++bp < name + len - 1) +	{  		const char c = *bp; -		if (c == ']') { +		if (c == ']') +		{  			break;  		} -		if (c <= '9' && c >= '0') { +		if (c <= '9' && c >= '0') +		{  			num *= 10;  			num += (c - '0'); -		} else { +		} +		else +		{  			printf("array parse error.\n");  			return 0;  		}  	} -	if (dim2) { +	if (dim2) +	{  		*dim2 = num;  	}  	/* find second dim, if any. */  	bp = strchr(bp, '['); -	if (!bp) { +	if (!bp) +	{  		return 1; /* at least we got the first dim. */  	}  	num = 0; -	while (++bp < name+len-1) { +	while (++bp < name + len - 1) +	{  		const char c = *bp; -		if (c == ']') { +		if (c == ']') +		{  			break;  		} -		if (c <= '9' && c >= '0') { +		if (c <= '9' && c >= '0') +		{  			num *= 10;  			num += (c - '0'); -		} else { +		} +		else +		{  			printf("array2 parse error.\n");  			return 1;  		}  	} -	if (dim1) { -		if (dim2) { +	if (dim1) +	{ +		if (dim2) +		{  			*dim1 = *dim2;  			*dim2 = num; -		} else { +		} +		else +		{  			*dim1 = num;  		}  	} @@ -343,14 +340,15 @@ static int name_is_array(char* name, int* dim1, int* dim2) {  	return 1;  } -  // ----------------------------------------------------- //  void bDNA::init(char *data, int len, bool swap)  { -	int *intPtr=0;short *shtPtr=0; -	char *cp = 0;int dataLen =0; +	int *intPtr = 0; +	short *shtPtr = 0; +	char *cp = 0; +	int dataLen = 0;  	//long nr=0; -	intPtr = (int*)data; +	intPtr = (int *)data;  	/*  		SDNA (4 bytes) (magic number) @@ -360,38 +358,35 @@ void bDNA::init(char *data, int len, bool swap)  		<string>  	*/ -	if (strncmp(data, "SDNA", 4)==0) +	if (strncmp(data, "SDNA", 4) == 0)  	{  		// skip ++ NAME -		intPtr++; intPtr++; +		intPtr++; +		intPtr++;  	} - -  	// Parse names -	if (swap)  +	if (swap)  	{  		*intPtr = ChunkUtils::swapInt(*intPtr);  	}  	dataLen = *intPtr;  	intPtr++; -	cp = (char*)intPtr; +	cp = (char *)intPtr;  	int i; -	for ( i=0; i<dataLen; i++) +	for (i = 0; i < dataLen; i++)  	{  		bNameInfo info;  		info.m_name = cp;  		info.m_isPointer = (info.m_name[0] == '*') || (info.m_name[1] == '*'); -		name_is_array(info.m_name,&info.m_dim0,&info.m_dim1); +		name_is_array(info.m_name, &info.m_dim0, &info.m_dim1);  		m_Names.push_back(info); -		while (*cp)cp++; +		while (*cp) cp++;  		cp++;  	} -	 -	cp = b3AlignPointer(cp,4); -	 +	cp = b3AlignPointer(cp, 4);  	/*  		TYPE (4 bytes) @@ -400,26 +395,26 @@ void bDNA::init(char *data, int len, bool swap)  		<string>  	*/ -	intPtr = (int*)cp; -	assert(strncmp(cp, "TYPE", 4)==0); intPtr++; +	intPtr = (int *)cp; +	assert(strncmp(cp, "TYPE", 4) == 0); +	intPtr++; -	if (swap)  +	if (swap)  	{  		*intPtr = ChunkUtils::swapInt(*intPtr);  	}  	dataLen = *intPtr;  	intPtr++; -	cp = (char*)intPtr; -	for ( i=0; i<dataLen; i++) +	cp = (char *)intPtr; +	for (i = 0; i < dataLen; i++)  	{  		mTypes.push_back(cp); -		while (*cp)cp++; +		while (*cp) cp++;  		cp++;  	} - -	cp = b3AlignPointer(cp,4); +	cp = b3AlignPointer(cp, 4);  	/*  		TLEN (4 bytes) @@ -428,13 +423,14 @@ void bDNA::init(char *data, int len, bool swap)  	*/  	// Parse type lens -	intPtr = (int*)cp; -	assert(strncmp(cp, "TLEN", 4)==0); intPtr++; +	intPtr = (int *)cp; +	assert(strncmp(cp, "TLEN", 4) == 0); +	intPtr++;  	dataLen = (int)mTypes.size(); -	shtPtr = (short*)intPtr; -	for ( i=0; i<dataLen; i++, shtPtr++) +	shtPtr = (short *)intPtr; +	for (i = 0; i < dataLen; i++, shtPtr++)  	{  		if (swap)  			shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); @@ -454,94 +450,89 @@ void bDNA::init(char *data, int len, bool swap)  		<namenr>  	*/ -	intPtr = (int*)shtPtr; -	cp = (char*)intPtr; -	assert(strncmp(cp, "STRC", 4)==0); intPtr++; +	intPtr = (int *)shtPtr; +	cp = (char *)intPtr; +	assert(strncmp(cp, "STRC", 4) == 0); +	intPtr++; -	if (swap)  +	if (swap)  	{  		*intPtr = ChunkUtils::swapInt(*intPtr);  	}  	dataLen = *intPtr;  	intPtr++; - -	shtPtr = (short*)intPtr; -	for ( i=0; i<dataLen; i++) +	shtPtr = (short *)intPtr; +	for (i = 0; i < dataLen; i++)  	{ -		mStructs.push_back (shtPtr); +		mStructs.push_back(shtPtr);  		if (swap)  		{ -			shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); -			shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); +			shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); +			shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);  			int len = shtPtr[1]; -			shtPtr+= 2; +			shtPtr += 2; -			for (int a=0; a<len; a++, shtPtr+=2) +			for (int a = 0; a < len; a++, shtPtr += 2)  			{ -				shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]); -				shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]); +				shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]); +				shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);  			}  		}  		else -			shtPtr+= (2*shtPtr[1])+2; +			shtPtr += (2 * shtPtr[1]) + 2;  	} -  	// build reverse lookups -	for ( i=0; i<(int)mStructs.size(); i++) +	for (i = 0; i < (int)mStructs.size(); i++)  	{  		short *strc = mStructs.at(i); -		if (!mPtrLen && strcmp(mTypes[strc[0]],"ListBase")==0) +		if (!mPtrLen && strcmp(mTypes[strc[0]], "ListBase") == 0)  		{ -			mPtrLen = mTlens[strc[0]]/2; +			mPtrLen = mTlens[strc[0]] / 2;  		}  		mStructReverse.insert(strc[0], i); -		mTypeLookup.insert(b3HashString(mTypes[strc[0]]),i); +		mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i);  	}  } -  // ----------------------------------------------------- // -int bDNA::getArraySize(char* string) +int bDNA::getArraySize(char *string)  {  	int ret = 1;  	int len = strlen(string); -	 -	char* next = 0; -	for (int i=0; i<len; i++) +	char *next = 0; +	for (int i = 0; i < len; i++)  	{  		char c = string[i];  		if (c == '[') -			next = &string[i+1]; -		else if (c==']') +			next = &string[i + 1]; +		else if (c == ']')  			if (next)  				ret *= atoi(next);  	} -//	print (string << ' ' << ret); +	//	print (string << ' ' << ret);  	return ret;  } -  void bDNA::dumpTypeDefinitions()  {  	int i;  	int numTypes = mTypes.size(); -	 -	for (i=0;i<numTypes;i++) -	{ +	for (i = 0; i < numTypes; i++) +	{  	} -	for ( i=0; i<(int)mStructs.size(); i++) +	for (i = 0; i < (int)mStructs.size(); i++)  	{ -		int totalBytes=0; +		int totalBytes = 0;  		short *oldStruct = mStructs[i];  		int oldLookup = getReverseType(oldStruct[0]); @@ -551,44 +542,46 @@ void bDNA::dumpTypeDefinitions()  			continue;  		} -		short* newStruct = mStructs[oldLookup]; -		char* typeName = mTypes[newStruct[0]]; -		printf("%3d: %s ",i,typeName); -		 +		short *newStruct = mStructs[oldLookup]; +		char *typeName = mTypes[newStruct[0]]; +		printf("%3d: %s ", i, typeName); +  		//char *name = mNames[oldStruct[1]];  		int len = oldStruct[1]; -		printf(" (%d fields) ",len); -		oldStruct+=2; +		printf(" (%d fields) ", len); +		oldStruct += 2;  		printf("{");  		int j; -		for (j=0; j<len; ++j,oldStruct+=2) { -			const char* name = m_Names[oldStruct[1]].m_name; -			printf("%s %s",	mTypes[oldStruct[0]],name); -			int elemNumBytes= 0; +		for (j = 0; j < len; ++j, oldStruct += 2) +		{ +			const char *name = m_Names[oldStruct[1]].m_name; +			printf("%s %s", mTypes[oldStruct[0]], name); +			int elemNumBytes = 0;  			int arrayDimensions = getArraySizeNew(oldStruct[1]);  			if (m_Names[oldStruct[1]].m_isPointer)  			{  				elemNumBytes = VOID_IS_8 ? 8 : 4; -			} else +			} +			else  			{  				elemNumBytes = getLength(oldStruct[0]);  			} -			printf(" /* %d bytes */",elemNumBytes*arrayDimensions); -			 -			if (j == len-1) { +			printf(" /* %d bytes */", elemNumBytes * arrayDimensions); + +			if (j == len - 1) +			{  				printf(";}"); -			} else { +			} +			else +			{  				printf("; ");  			} -			totalBytes+=elemNumBytes*arrayDimensions; +			totalBytes += elemNumBytes * arrayDimensions;  		} -		printf("\ntotalBytes=%d\n\n",totalBytes); - +		printf("\ntotalBytes=%d\n\n", totalBytes);  	} -	 -  #if 0  	/* dump out display of types and their sizes */ @@ -618,12 +611,6 @@ void bDNA::dumpTypeDefinitions()  		}  	}  #endif -  } - - -  //eof - -  |