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

Method GetTempPtr

IDEHelper/COFF.cpp:173–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

171//////////////////////////////////////////////////////////////////////////
172
173uint8* CvStreamReader::GetTempPtr(int offset, int size, bool mayRecurse, bool* madeCopy)
174{
175 int pageStart = offset >> mPageBits;
176 int pageEnd = (offset + size - 1) >> mPageBits;
177
178 if (pageStart >= pageEnd)
179 return mStreamPtrs.mVals[pageStart] + (offset & ((1<<mPageBits) - 1));
180
181 // Handle the relatively-rare case of spanning multiple pages
182 if (madeCopy != NULL)
183 *madeCopy = true;
184
185 uint8* destPtr;
186 if (mayRecurse)
187 {
188 if (mCOFF->mTempBufIdx >= mCOFF->mTempBufs.size())
189 mCOFF->mTempBufs.push_back(Array<uint8>());
190 auto& arr = mCOFF->mTempBufs[mCOFF->mTempBufIdx++];
191 if (arr.size() < size)
192 arr.Resize(size);
193 destPtr = arr.mVals;
194 }
195 else
196 {
197 if (mTempData.size() < size)
198 mTempData.Resize(size);
199 destPtr = mTempData.mVals;
200 }
201
202 uint8* dest = destPtr;
203 while (size > 0)
204 {
205 int copyPage = offset >> mPageBits;
206 int pageOffset = offset & ((1 << mPageBits) - 1);
207 int copyBytes = BF_MIN(mCOFF->mCvPageSize - pageOffset, size);
208 memcpy(destPtr, mStreamPtrs.mVals[copyPage] + pageOffset, copyBytes);
209 destPtr += copyBytes;
210 offset += copyBytes;
211 size -= copyBytes;
212 }
213 return dest;
214}
215
216uint8* CvStreamReader::GetPermanentPtr(int offset, int size, bool* madeCopy)
217{

Callers 6

CvGetTagDataMethod · 0.80
CvParseMembersMethod · 0.80
CvParseTypeMethod · 0.80
ParseTypeDataMethod · 0.80
CvParseIPIMethod · 0.80
CvParseSymbolMethod · 0.80

Calls 3

sizeMethod · 0.45
push_backMethod · 0.45
ResizeMethod · 0.45

Tested by

no test coverage detected