MCPcopy Create free account
hub / github.com/ZDoom/Raze / PropagateMark

Method PropagateMark

source/common/objects/dobject.cpp:360–412  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

358}
359
360size_t DObject::PropagateMark()
361{
362 const PClass *info = GetClass();
363 if (!PClass::bShutdown)
364 {
365 if (info->FlatPointers == nullptr)
366 {
367 info->BuildFlatPointers();
368 assert(info->FlatPointers);
369 }
370
371 for(size_t i = 0; i < info->FlatPointersSize; i++)
372 {
373 GC::Mark((DObject **)((uint8_t *)this + info->FlatPointers[i].first));
374 }
375
376 if (info->ArrayPointers == nullptr)
377 {
378 info->BuildArrayPointers();
379 assert(info->ArrayPointers);
380 }
381
382 for(size_t i = 0; i < info->ArrayPointersSize; i++)
383 {
384 auto aray = (TArray<DObject*>*)((uint8_t *)this + info->ArrayPointers[i].first);
385 for (auto &p : *aray)
386 {
387 GC::Mark(&p);
388 }
389 }
390
391 if (info->MapPointers == nullptr)
392 {
393 info->BuildMapPointers();
394 assert(info->MapPointers);
395 }
396
397 for(size_t i = 0; i < info->MapPointersSize; i++)
398 {
399 PMap * type = static_cast<PMap*>(info->MapPointers[i].second);
400 if(type->KeyType->RegType == REGT_STRING)
401 { // FString,DObject*
402 PropagateMarkMap((ZSMap<FString,DObject*>*)((uint8_t *)this + info->MapPointers[i].first));
403 }
404 else
405 { // uint32_t,DObject*
406 PropagateMarkMap((ZSMap<uint32_t,DObject*>*)((uint8_t *)this + info->MapPointers[i].first));
407 }
408 }
409 return info->Size;
410 }
411 return 0;
412}
413
414//==========================================================================
415//

Callers 1

PropagateMarkFunction · 0.45

Calls 5

PropagateMarkMapFunction · 0.85
BuildFlatPointersMethod · 0.80
BuildArrayPointersMethod · 0.80
BuildMapPointersMethod · 0.80
MarkFunction · 0.70

Tested by

no test coverage detected