| 5330 | } |
| 5331 | |
| 5332 | void COFF::CvParseIPI() |
| 5333 | { |
| 5334 | BF_ASSERT(!mCvIPIReader.IsSetup()); |
| 5335 | |
| 5336 | //uint8* sectionData; |
| 5337 | int sectionSize = 0; |
| 5338 | int hashAdjOffset = 0; |
| 5339 | int32 hashStream = -1; |
| 5340 | int32 hashAdjSize = 0; |
| 5341 | int32 dataOffset = 0; |
| 5342 | ParseTypeData(4, mCvIPIReader, sectionSize, dataOffset, hashStream, hashAdjOffset, hashAdjSize, mCvIPIMinTag, mCvIPIMaxTag); |
| 5343 | //mCvIPIData = sectionData; |
| 5344 | |
| 5345 | int recordCount = mCvIPIMaxTag - mCvIPIMinTag; |
| 5346 | mCvIPITagStartMap.Resize(recordCount + 1); |
| 5347 | |
| 5348 | //uint8* data = sectionData + dataOffset; |
| 5349 | int offset = dataOffset; |
| 5350 | for (int idx = 0; idx < recordCount; idx++) |
| 5351 | { |
| 5352 | //BF_ASSERT(((offset) & 3) == 0); |
| 5353 | uint8* data = mCvIPIReader.GetTempPtr(offset, 4); |
| 5354 | uint16 trLength = GET(uint16); |
| 5355 | int offsetStart = offset; |
| 5356 | offset += 2; |
| 5357 | data = mCvIPIReader.GetTempPtr(offset, trLength); |
| 5358 | uint8* dataStart = data; |
| 5359 | uint16 trLeafType = GET(uint16); |
| 5360 | //uint8* dataEnd = dataStart + trLength; |
| 5361 | offset += trLength; |
| 5362 | |
| 5363 | /* |
| 5364 | */ |
| 5365 | |
| 5366 | lfEasy& funcLeaf = *(lfEasy*)dataStart; |
| 5367 | switch (funcLeaf.leaf) |
| 5368 | { |
| 5369 | case LF_FUNC_ID: |
| 5370 | { |
| 5371 | lfFuncId* funcData = (lfFuncId*)dataStart; |
| 5372 | //subprogram->mName = (const char*)funcData->name; |
| 5373 | |
| 5374 | bool doScope = true; |
| 5375 | |
| 5376 | /*if (strcmp(curSubprogram->mName, "DispatchToMethod") == 0) |
| 5377 | { |
| 5378 | doScope = true; |
| 5379 | }*/ |
| 5380 | |
| 5381 | if ((funcData->scopeId != 0) && (doScope)) |
| 5382 | { |
| 5383 | uint8* data = CvGetTagData(funcData->scopeId, true); |
| 5384 | CvAutoReleaseTempData releaseTempData(this, data); |
| 5385 | |
| 5386 | lfEasy& leaf = *(lfEasy*)data; |
| 5387 | switch (leaf.leaf) |
| 5388 | { |
| 5389 | case LF_STRING_ID: |