Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures
| 1389 | |
| 1390 | ///Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures |
| 1391 | void bFile::resolvePointers(int verboseMode) |
| 1392 | { |
| 1393 | bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA; |
| 1394 | |
| 1395 | //char *dataPtr = mFileBuffer+mDataStart; |
| 1396 | |
| 1397 | if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES)) |
| 1398 | { |
| 1399 | resolvePointersMismatch(); |
| 1400 | } |
| 1401 | |
| 1402 | { |
| 1403 | if (verboseMode & FD_VERBOSE_EXPORT_XML) |
| 1404 | { |
| 1405 | printf("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); |
| 1406 | int numitems = m_chunks.size(); |
| 1407 | printf("<bullet_physics version=%d itemcount = %d>\n", btGetVersion(), numitems); |
| 1408 | } |
| 1409 | for (int i = 0; i < m_chunks.size(); i++) |
| 1410 | { |
| 1411 | const bChunkInd &dataChunk = m_chunks.at(i); |
| 1412 | |
| 1413 | if (!mFileDNA || fileDna->flagEqual(dataChunk.dna_nr)) |
| 1414 | { |
| 1415 | //dataChunk.len |
| 1416 | short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr); |
| 1417 | char *oldType = fileDna->getType(oldStruct[0]); |
| 1418 | |
| 1419 | if (verboseMode & FD_VERBOSE_EXPORT_XML) |
| 1420 | printf(" <%s pointer=%p>\n", oldType, dataChunk.oldPtr); |
| 1421 | |
| 1422 | resolvePointersChunk(dataChunk, verboseMode); |
| 1423 | |
| 1424 | if (verboseMode & FD_VERBOSE_EXPORT_XML) |
| 1425 | printf(" </%s>\n", oldType); |
| 1426 | } |
| 1427 | else |
| 1428 | { |
| 1429 | //printf("skipping mStruct\n"); |
| 1430 | } |
| 1431 | } |
| 1432 | if (verboseMode & FD_VERBOSE_EXPORT_XML) |
| 1433 | { |
| 1434 | printf("</bullet_physics>\n"); |
| 1435 | } |
| 1436 | } |
| 1437 | } |
| 1438 | |
| 1439 | // ----------------------------------------------------- // |
| 1440 | void *bFile::findLibPointer(void *ptr) |