MCPcopy Create free account
hub / github.com/bulletphysics/bullet3 / parseStruct

Method parseStruct

Extras/Serialize/BulletFileLoader/bFile.cpp:734–814  ·  view source on GitHub ↗

----------------------------------------------------- //

Source from the content-addressed store, hash-verified

732
733// ----------------------------------------------------- //
734void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers)
735{
736 if (old_dna == -1) return;
737 if (new_dna == -1) return;
738
739 //disable this, because we need to fixup pointers/ListBase
740 if (/* DISABLES CODE */ (0)) //mFileDNA->flagEqual(old_dna))
741 {
742 short *strc = mFileDNA->getStruct(old_dna);
743 int len = mFileDNA->getLength(strc[0]);
744
745 memcpy(strcPtr, dtPtr, len);
746 return;
747 }
748
749 // Ok, now build the struct
750 char *memType, *memName, *cpc, *cpo;
751 short *fileStruct, *filePtrOld, *memoryStruct, *firstStruct;
752 int elementLength, size, revType, old_nr, new_nr, fpLen;
753 short firstStructType;
754
755 // File to memory lookup
756 memoryStruct = mMemoryDNA->getStruct(new_dna);
757 fileStruct = mFileDNA->getStruct(old_dna);
758 firstStruct = fileStruct;
759
760 filePtrOld = fileStruct;
761 firstStructType = mMemoryDNA->getStruct(0)[0];
762
763 // Get number of elements
764 elementLength = memoryStruct[1];
765 memoryStruct += 2;
766
767 cpc = strcPtr;
768 cpo = 0;
769 for (int ele = 0; ele < elementLength; ele++, memoryStruct += 2)
770 {
771 memType = mMemoryDNA->getType(memoryStruct[0]);
772 memName = mMemoryDNA->getName(memoryStruct[1]);
773
774 size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]);
775 revType = mMemoryDNA->getReverseType(memoryStruct[0]);
776
777 if (revType != -1 && memoryStruct[0] >= firstStructType && memName[0] != '*')
778 {
779 cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld);
780 if (cpo)
781 {
782 int arrayLen = mFileDNA->getArraySizeNew(filePtrOld[1]);
783 old_nr = mFileDNA->getReverseType(memType);
784 new_nr = revType;
785 fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]);
786 if (arrayLen == 1)
787 {
788 parseStruct(cpc, cpo, old_nr, new_nr, fixupPointers);
789 }
790 else
791 {

Callers

nothing calls this directly

Calls 7

getStructMethod · 0.45
getLengthMethod · 0.45
getTypeMethod · 0.45
getNameMethod · 0.45
getElementSizeMethod · 0.45
getReverseTypeMethod · 0.45
getArraySizeNewMethod · 0.45

Tested by

no test coverage detected