MCPcopy Create free account
hub / github.com/crossuo/crossuo / AddMultiObject

Method AddMultiObject

src/Target.cpp:387–456  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

385}
386
387void CTarget::AddMultiObject(CMultiObject *obj)
388{
389 if (m_Multi == nullptr)
390 {
391 m_Multi = new CMulti(obj->GetX(), obj->GetY());
392 m_Multi->m_Next = nullptr;
393 m_Multi->m_Prev = nullptr;
394 m_Multi->m_Items = obj;
395 obj->m_Next = nullptr;
396 obj->m_Prev = nullptr;
397 }
398 else
399 {
400 CMulti *multi = GetMultiAtXY(obj->GetX(), obj->GetY());
401
402 if (multi != nullptr)
403 {
404 QFOR(multiobj, multi->m_Items, CMultiObject *)
405 {
406 if (obj->GetZ() < multiobj->GetZ())
407 {
408 if (multiobj->m_Prev == nullptr)
409 {
410 multi->Insert(multiobj->m_Prev, obj);
411 }
412 else
413 {
414 multi->Insert(multiobj, obj);
415 }
416
417 return;
418 }
419
420 if (multiobj->m_Next == nullptr)
421 {
422 multiobj->m_Next = obj;
423 obj->m_Prev = multiobj;
424 obj->m_Next = nullptr;
425
426 return;
427 }
428 }
429
430 //Если пришли сюда - что-то пошло не так
431 }
432 else
433 {
434 // FIXME: potential leak, validate
435 CMulti *newmulti = new CMulti(obj->GetX(), obj->GetY());
436 newmulti->m_Next = nullptr;
437 newmulti->m_Items = obj;
438 obj->m_Next = nullptr;
439 obj->m_Prev = nullptr;
440
441 multi = m_Multi;
442
443 while (multi != nullptr)
444 {

Callers

nothing calls this directly

Calls 5

GetYMethod · 0.80
GetZMethod · 0.80
QFORFunction · 0.50
GetXMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected