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

Method resolvePointersMismatch

Extras/Serialize/BulletFileLoader/bFile.cpp:1100–1163  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1098}
1099
1100void bFile::resolvePointersMismatch()
1101{
1102 // printf("resolvePointersStructMismatch\n");
1103
1104 int i;
1105
1106 for (i = 0; i < m_pointerFixupArray.size(); i++)
1107 {
1108 char *cur = m_pointerFixupArray.at(i);
1109 void **ptrptr = (void **)cur;
1110 void *ptr = *ptrptr;
1111 ptr = findLibPointer(ptr);
1112 if (ptr)
1113 {
1114 //printf("Fixup pointer!\n");
1115 *(ptrptr) = ptr;
1116 }
1117 else
1118 {
1119 // printf("pointer not found: %x\n",cur);
1120 }
1121 }
1122
1123 for (i = 0; i < m_pointerPtrFixupArray.size(); i++)
1124 {
1125 char *cur = m_pointerPtrFixupArray.at(i);
1126 void **ptrptr = (void **)cur;
1127
1128 bChunkInd *block = m_chunkPtrPtrMap.find(*ptrptr);
1129 if (block)
1130 {
1131 int ptrMem = mMemoryDNA->getPointerSize();
1132 int ptrFile = mFileDNA->getPointerSize();
1133
1134 int blockLen = block->len / ptrFile;
1135
1136 void *onptr = findLibPointer(*ptrptr);
1137 if (onptr)
1138 {
1139 char *newPtr = new char[blockLen * ptrMem];
1140 addDataBlock(newPtr);
1141 memset(newPtr, 0, blockLen * ptrMem);
1142
1143 void **onarray = (void **)onptr;
1144 char *oldPtr = (char *)onarray;
1145
1146 int p = 0;
1147 while (blockLen-- > 0)
1148 {
1149 btPointerUid dp = {{0}};
1150 safeSwapPtr((char *)dp.m_uniqueIds, oldPtr);
1151
1152 void **tptr = (void **)(newPtr + p * ptrMem);
1153 *tptr = findLibPointer(dp.m_ptr);
1154
1155 oldPtr += ptrFile;
1156 ++p;
1157 }

Callers

nothing calls this directly

Calls 4

sizeMethod · 0.45
atMethod · 0.45
findMethod · 0.45
getPointerSizeMethod · 0.45

Tested by

no test coverage detected