MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / deserialize

Method deserialize

modules/engine/runtime/src/ecs/serialize.cpp:289–334  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

287}
288
289void sugoi_storage_t::deserialize(skr_binary_reader_t* s)
290{
291 using namespace sugoi;
292 SkrZoneScopedN("sugoi_storage_t::deserialize");
293 namespace bin = skr::binary;
294 if(scheduler)
295 {
296 SKR_ASSERT(scheduler->is_main_thread(this));
297 scheduler->sync_storage(this);
298 }
299 // empty storage expected
300 SKR_ASSERT(entities.entries.size() == 0);
301 uint32_t size = 0;
302 bin::Archive(s, size);
303 entities.entries.resize_default(size);
304 uint32_t freeSize = 0;
305 bin::Archive(s, freeSize);
306 entities.freeEntries.resize_default(freeSize);
307 ArchiveBuffer(s, entities.freeEntries.data(), freeSize);
308 uint32_t groupSize = 0;
309 bin::Archive(s, groupSize);
310 forloop (i, 0, groupSize)
311 {
312 SkrZoneScopedN("deserialize group");
313 fixed_stack_scope_t _(localStack);
314 auto type = deserialize_type(localStack, s, true);
315 auto group = construct_group(type);
316 uint32_t chunkCount = 0;
317 bin::Archive(s, chunkCount);
318 forloop (j, 0, chunkCount)
319 {
320 SkrZoneScopedN("deserialize chunk");
321 sugoi_chunk_view_t view;
322 serialize_view(group, view, nullptr, s, true);
323 auto ents = sugoiV_get_entities(&view);
324 forloop(k, 0, view.count)
325 {
326 entity_registry_t::entry_t entry;
327 entry.chunk = view.chunk;
328 entry.indexInChunk = k + view.start;
329 entry.version = e_version(ents[k]);
330 entities.entries[e_id(ents[k])] = entry;
331 }
332 }
333 }
334}

Callers 1

sugoiS_deserializeFunction · 0.80

Calls 8

ArchiveFunction · 0.85
ArchiveBufferFunction · 0.85
sugoiV_get_entitiesFunction · 0.85
is_main_threadMethod · 0.80
sync_storageMethod · 0.80
sizeMethod · 0.45
resize_defaultMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected