| 2495 | |
| 2496 | |
| 2497 | void BlContext::PopulateResData(BlSegment* resSeg) |
| 2498 | { |
| 2499 | int prevSize = resSeg->mCurSize; |
| 2500 | |
| 2501 | // Insert fake chunk |
| 2502 | { |
| 2503 | BlChunk chunk; |
| 2504 | chunk.mOffset = 0; |
| 2505 | chunk.mAlignPad = 0; |
| 2506 | chunk.mData = 0; |
| 2507 | chunk.mSize = 0; |
| 2508 | resSeg->mChunks.push_back(chunk); |
| 2509 | } |
| 2510 | |
| 2511 | int dirCount = 0; |
| 2512 | int dataCount = 0; |
| 2513 | int symsStrSize = 0; |
| 2514 | int dataSize = 0; |
| 2515 | GetResDataStats(&mRootResDirectory, dirCount, dataCount, symsStrSize, dataSize); |
| 2516 | int resDirSize = 16 + ((16 + 8) * dirCount) + ((8) * dataCount); |
| 2517 | resSeg->mCurSize = resDirSize + symsStrSize + (dataCount * 16); |
| 2518 | |
| 2519 | DynMemStream symStrsStream; |
| 2520 | DynMemStream dataEntryStream; |
| 2521 | CreateResData(resSeg, &mRootResDirectory, resDirSize, symsStrSize, symStrsStream, dataEntryStream); |
| 2522 | BF_ASSERT(mResDataStream.GetSize() == resDirSize); |
| 2523 | |
| 2524 | if (symStrsStream.GetSize() != 0) |
| 2525 | mResDataStream.Write(symStrsStream.GetPtr(), symStrsStream.GetSize()); |
| 2526 | if (dataEntryStream.GetSize() != 0) |
| 2527 | mResDataStream.Write(dataEntryStream.GetPtr(), dataEntryStream.GetSize()); |
| 2528 | |
| 2529 | BlChunk& chunk = resSeg->mChunks.front(); |
| 2530 | chunk.mData = (void*)&mResDataStream.mData[0]; |
| 2531 | chunk.mSize = mResDataStream.GetSize(); |
| 2532 | BF_ASSERT(resSeg->mCurSize == prevSize); |
| 2533 | } |
| 2534 | |
| 2535 | BlSegment* BlContext::CreateSegment(const StringImpl& name, int characteristics, int align) |
| 2536 | { |