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

Method parseStruct

src/Bullet3Serialize/Bullet2FileLoader/b3File.cpp:701–781  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

699
700// ----------------------------------------------------- //
701void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers)
702{
703 if (old_dna == -1) return;
704 if (new_dna == -1) return;
705
706 //disable this, because we need to fixup pointers/ListBase
707 if (0) //mFileDNA->flagEqual(old_dna))
708 {
709 short *strc = mFileDNA->getStruct(old_dna);
710 int len = mFileDNA->getLength(strc[0]);
711
712 memcpy(strcPtr, dtPtr, len);
713 return;
714 }
715
716 // Ok, now build the struct
717 char *memType, *memName, *cpc, *cpo;
718 short *fileStruct, *filePtrOld, *memoryStruct, *firstStruct;
719 int elementLength, size, revType, old_nr, new_nr, fpLen;
720 short firstStructType;
721
722 // File to memory lookup
723 memoryStruct = mMemoryDNA->getStruct(new_dna);
724 fileStruct = mFileDNA->getStruct(old_dna);
725 firstStruct = fileStruct;
726
727 filePtrOld = fileStruct;
728 firstStructType = mMemoryDNA->getStruct(0)[0];
729
730 // Get number of elements
731 elementLength = memoryStruct[1];
732 memoryStruct += 2;
733
734 cpc = strcPtr;
735 cpo = 0;
736 for (int ele = 0; ele < elementLength; ele++, memoryStruct += 2)
737 {
738 memType = mMemoryDNA->getType(memoryStruct[0]);
739 memName = mMemoryDNA->getName(memoryStruct[1]);
740
741 size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]);
742 revType = mMemoryDNA->getReverseType(memoryStruct[0]);
743
744 if (revType != -1 && memoryStruct[0] >= firstStructType && memName[0] != '*')
745 {
746 cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld);
747 if (cpo)
748 {
749 int arrayLen = mFileDNA->getArraySizeNew(filePtrOld[1]);
750 old_nr = mFileDNA->getReverseType(memType);
751 new_nr = revType;
752 fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]);
753 if (arrayLen == 1)
754 {
755 parseStruct(cpc, cpo, old_nr, new_nr, fixupPointers);
756 }
757 else
758 {

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