MCPcopy Create free account
hub / github.com/crownengine/crown / load

Function load

src/resource/package_resource.cpp:323–355  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

321namespace package_resource_internal
322{
323 void *load(File &file, Allocator &a)
324 {
325 u32 version;
326 u32 compressed_size;
327 u32 uncompressed_size;
328 BinaryReader br(file);
329
330 br.read(version);
331 CE_ENSURE(version == RESOURCE_HEADER(RESOURCE_VERSION_PACKAGE));
332 br.read(compressed_size);
333
334 if (compressed_size == 0) {
335 file.seek(0);
336 return simple_resource::load(file, a);
337 }
338
339 br.read(uncompressed_size);
340
341 const u32 file_size = file.size(); // Compressed package.
342 const u32 header_size = file_size - compressed_size;
343 const u32 resource_size = header_size + uncompressed_size;
344 char *data = (char *)a.allocate(resource_size, 16);
345 char *compressed_data = (char *)a.allocate(compressed_size);
346
347 file.seek(0);
348 file.read(data, file_size - compressed_size);
349 file.read(compressed_data, compressed_size);
350 const int decompressed_size = LZ4_decompress_safe(compressed_data, data + header_size, compressed_size, uncompressed_size);
351 CE_ASSERT(decompressed_size >= 0 && u32(decompressed_size) == uncompressed_size, "Failed to decompress data");
352 CE_UNUSED(decompressed_size);
353 a.deallocate(compressed_data);
354 return data;
355 }
356
357} // namespace package_resource_internal
358

Callers

nothing calls this directly

Calls 6

LZ4_decompress_safeFunction · 0.85
readMethod · 0.45
seekMethod · 0.45
sizeMethod · 0.45
allocateMethod · 0.45
deallocateMethod · 0.45

Tested by

no test coverage detected