MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / open_chunk_iterator

Method open_chunk_iterator

ogsr_engine/xrCore/FS.cpp:215–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

213}
214
215IReader* IReader::open_chunk_iterator(u32& ID, IReader* _prev)
216{
217 if (0 == _prev)
218 {
219 // first
220 rewind();
221 }
222 else
223 {
224 // next
225 seek(_prev->iterpos);
226 _prev->close();
227 }
228
229 // open
230 if (elapsed() < static_cast<long>(sizeof(u32) * 2))
231 return nullptr;
232
233 ID = r_u32();
234 size_t _size = r_u32();
235
236 //На всякий случай тут тоже так сделаем по аналогии с find_chunk()
237 if (elapsed() < static_cast<long>(_size))
238 {
239 Msg("!![%s] chunk [%u] has invalid size [%lu], return elapsed size [%d]", __FUNCTION__, ID, _size, elapsed());
240 _size = elapsed();
241 }
242
243 if (ID & CFS_CompressMark)
244 {
245 // compressed
246 u8* dest;
247 size_t dest_sz;
248 _decompressLZ(&dest, &dest_sz, pointer(), _size);
249 return xr_new<CTempReader>(dest, dest_sz, tell() + _size);
250 }
251 else
252 {
253 // normal
254 return xr_new<IReader>(pointer(), _size, tell() + _size);
255 }
256}
257
258constexpr unsigned char boms[]{0xef, 0xbb, 0xbf};
259

Callers 5

LoadMethod · 0.80
loadMethod · 0.80
load_rawMethod · 0.80
LoadMethod · 0.80

Calls 7

seekFunction · 0.85
MsgFunction · 0.85
_decompressLZFunction · 0.85
pointerFunction · 0.85
tellFunction · 0.85
r_u32Function · 0.70
closeMethod · 0.45

Tested by

no test coverage detected