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

Method build_queries

modules/engine/runtime/src/ecs/query.cpp:463–580  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

461}
462
463void sugoi_storage_t::build_queries()
464{
465 using namespace sugoi;
466 if (queriesBuilt)
467 return;
468
469 SkrZoneScopedN("sugoi_storage_t::build_queries");
470 struct phase_entry_builder {
471 sugoi_type_index_t type;
472 uint32_t phase;
473 llvm_vecsmall::SmallVector<sugoi_query_t*, 8> queries;
474 };
475 if (phases != nullptr)
476 {
477 for (EIndex i = 0; i < phaseCount; ++i)
478 phases[i]->~phase_entry();
479 }
480 phaseCount = 0;
481 queryBuildArena.reset();
482 skr::stl_vector<phase_entry_builder> entries;
483 for (auto query : queries)
484 {
485 auto parameters = query->parameters;
486 forloop (i, 0, parameters.length)
487 {
488 if (parameters.accesses[i].phase >= 0 && !parameters.accesses[i].readonly)
489 {
490 bool found = false;
491 for (auto& entry : entries)
492 {
493 if (entry.type == parameters.types[i] && entry.phase == parameters.accesses[i].phase)
494 {
495 entry.queries.push_back(query);
496 found = true;
497 break;
498 }
499 }
500 if (!found)
501 {
502 phase_entry_builder entry;
503 entry.type = parameters.types[i];
504 entry.phase = parameters.accesses[i].phase;
505 entry.queries.push_back(query);
506 entries.emplace_back(std::move(entry));
507 }
508 }
509 }
510 }
511 phases = queryBuildArena.allocate<phase_entry*>(entries.size());
512 auto phaseEntries = phases;
513 for (auto query : queries)
514 {
515 uint32_t count = 0;
516 for (auto& entry : entries)
517 {
518 if (entry.queries.size() < 2)
519 continue;
520 if (std::find(entry.queries.begin(), entry.queries.end(), query) != entry.queries.end())

Callers 3

sugoiQ_get_views_groupFunction · 0.80
sugoiQ_getFunction · 0.80
schedule_ecs_jobMethod · 0.80

Calls 14

memcpyFunction · 0.85
data_sizeFunction · 0.85
cloneFunction · 0.70
moveFunction · 0.50
findFunction · 0.50
mergeFunction · 0.50
resetMethod · 0.45
push_backMethod · 0.45
emplace_backMethod · 0.45
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected