MCPcopy Create free account
hub / github.com/beefytech/Beef / GetPermanentPtr

Method GetPermanentPtr

IDEHelper/COFF.cpp:216–242  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

214}
215
216uint8* CvStreamReader::GetPermanentPtr(int offset, int size, bool* madeCopy)
217{
218 int pageStart = offset >> mPageBits;
219 int pageEnd = (offset + size - 1) >> mPageBits;
220
221 if (pageStart == pageEnd)
222 return mStreamPtrs.mVals[pageStart] + (offset & ((1 << mPageBits) - 1));
223
224 // Handle the relatively-rare case of spanning multiple pages
225 BP_ALLOC("GetPermanentPtr", size);
226 uint8* destData = mCOFF->mAlloc.AllocBytes(size, "GetPermanentPtr");
227 if (madeCopy != NULL)
228 *madeCopy = true;
229
230 uint8* destPtr = destData;
231 while (size > 0)
232 {
233 int copyPage = offset >> mPageBits;
234 int pageOffset = offset & ((1 << mPageBits) - 1);
235 int copyBytes = BF_MIN(mCOFF->mCvPageSize - pageOffset, size);
236 memcpy(destPtr, mStreamPtrs.mVals[copyPage] + pageOffset, copyBytes);
237 destPtr += copyBytes;
238 offset += copyBytes;
239 size -= copyBytes;
240 }
241 return destData;
242}
243
244//////////////////////////////////////////////////////////////////////////
245

Callers 3

CvParseMembersMethod · 0.80
CvParseTypeMethod · 0.80
CvParseSymbolMethod · 0.80

Calls 1

AllocBytesMethod · 0.45

Tested by

no test coverage detected