30 static const C4ObjectLink NULL_LINK = {
nullptr,
nullptr,
nullptr };
52 for (link =
First; link; link = next_link)
54 next_link = link->
Next;
125 for (link =
First; link && link->
Obj; link = link->
Next)
166 if (!new_obj || !new_obj->
Def || !new_obj->
Status)
186 assert(sorted_list !=
this);
195 new_link->
Obj = new_obj;
211 bool is_sorted = !(new_obj->
Unsorted);
221 current = current->
Next;
229 for (link2 = sorted_list->
First; link2; link2 = link2->
Next)
233 if (link2->
Obj == new_obj)
235 assert(!current || current->
Obj != new_obj);
239 if (current && link2->
Obj == current->
Obj)
242 current = current->
Next;
245 current = current->
Next;
258 assert(link2 !=
nullptr);
269 for (previous =
nullptr, current =
First; current; current = current->
Next)
274 && (current->
Obj->
id == new_obj->
id))
286 for (previous =
nullptr, current =
First; current; current = current->
Next)
300 current = previous ? previous->
Next :
First;
304 assert(!previous || previous->
Next == current);
305 assert(!current || current->
Prev == previous);
333 for (link =
First; link; link = link->
Next)
335 if (link->
Obj == obj)
349 if (it->link.Prev == link)
353 else if (it->link.Next == link)
357 else if (it->link.Obj == link->
Obj)
359 it->link.
Obj =
nullptr;
387 for (link =
First; link; link = link->
Next)
390 && (link->
Obj->
Def == def)
392 && (dwOCF & link->
Obj->
OCF))
404 for (link =
First; link; link = link->
Next)
421 for (link =
First, cIdx = 0; link; link = link->
Next)
442 for (link =
First; link; link = link->
Next)
444 if (link->
Obj == obj)
456 for (link =
First; link; link = link->
Next)
470 for (link =
First; link; link = link->
Next)
483 int removed_amount = 0;
492 for (link =
First; link && (current_obj = link->
Obj); link = link->
Next)
496 return removed_amount;
503 for (first =
Last; first; first = first->
Prev)
511 for (link = first; link; link = link->
Prev)
524 for (link = first; link; link = link->
Prev)
542 for (link =
Last; link; link = link->
Prev)
550 for (link =
Last; link; link = link->
Prev)
562 for (link =
First; link; link = link->
Next)
564 if (link->
Obj == obj)
599 for (link =
First; link && link->
Obj; link = link->
Next)
613 for (link =
First; link; link = link->
Next)
630 assert(!skip_player_objects || pComp->
hasNaming());
647 for (
int i = 0; i < object_count; i++)
722 for (link =
First; link; link = link->
Next)
738 for (link =
Last; link; link = link->
Prev)
751 for (link =
First; link; link = link->
Next)
794 link->
Prev = after_link;
796 if (after_link->
Next)
804 after_link->
Next = link;
809 link->
Prev =
nullptr;
827 if (it->link.Obj == after_link->
Obj)
829 it->link.
Next = link;
841 if (before_link->
Prev)
849 link->
Next = before_link;
850 before_link->
Prev = link;
855 link->
Next =
nullptr;
873 if (it->link.Obj == before_link->
Obj)
875 it->link.
Prev = link;
903 for (link =
First; link; link = link->
Next)
915 for (link =
First; link; link = link->
Next)
927 for (link =
Last; link; link = link->
Prev)
937 for (link =
First; link && (obj = link->
Obj); link = link->
Next)
947 for (link = list.
First; link; link = link->
Next)
969 if (new_first_link ==
First)
978 First = new_first_link;
1011 if (pCurrID == rList.
end())
1016 if (pCurr == rList.
end())
1021 else if (++pCurr == rList.
end())
1026 if ((*pCurr)->id != (*pCurrID)->id)
1036 if ((*pCheck)->CanConcatPictureWith(*pCurr))
1039 if (++pCurr == rList.
end())
1044 if ((*pCurr)->id != (*pCurrID)->id)
1061 for (++pCheck; pCheck != rList.
end() && (*pCheck)->id == (*pCurr)->id; ++pCheck)
1063 if ((*pCheck)->CanConcatPictureWith(*pCurr))
1104 Log(
"CheckSort failure");
1112 if (link->
Obj == compare_link->
Obj)
1120 compare_link = compare_link->
Next;
1131 for (link =
First; link; link = link->
Next)
1145 List(list), link(link ? *link : NULL_LINK), reverse(reverse)
1150 List(iter.List), link(iter.link), Next(), reverse(iter.reverse)
1156 List.RemoveIter(
this);
1161 link = advance ? *advance : NULL_LINK;
1177 &iter.List == &List &&
1178 iter.link.
Obj == link.
Obj &&
1183 return !(*
this == iter);
1190 if (link.
Obj == target)
1204 return link.
Obj ==
nullptr;
1210 link = l ? *l : NULL_LINK;
1223 assert(&iter.List == &List);
1236 return iterator(*
this,
nullptr,
false);
1253 while (i->Next && i->Next != iter)
1257 i->Next = iter->Next;
1268 return iterator(list,
nullptr,
true);
const int32_t C4D_Foreground
const int32_t C4D_StaticBack
C4Def * C4Id2Def(C4ID id)
bool LogSilent(const char *szMessage, bool fConsole)
bool Log(const char *szMessage)
bool LogF(const char *strMessage,...)
C4ID TempListID[MaxTempListID]
C4ObjectListChangeListener & ObjectListChangeListener
void SAppend(const char *szSource, char *szTarget, int iMaxL)
bool Inside(T ival, U lbound, V rbound)
StdSTLContainerAdapt< C > mkSTLContainerAdapt(C &rTarget, StdCompiler::Sep eSep=StdCompiler::SEP_SEP)
StdPtrAdapt< T > mkPtrAdaptNoNull(T *&rpObj)
StdParameterAdapt< T, P > mkParAdapt(T &&rObj, P &&rPar)
StdNamingCountAdapt< int_t > mkNamingCountAdapt(int_t &iCount, const char *szName)
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
void ClearPointers(C4Object *obj)
C4Object * ObjectPointer(int32_t object_number)
void InsertLink(C4ObjectLink *link, C4ObjectLink *after_link) override
void InsertLinkBefore(C4ObjectLink *link, C4ObjectLink *before_link) override
void RemoveLink(C4ObjectLink *link) override
void UpdateScriptPointers()
void UpdateFace(bool bUpdateShape, bool fTemp=false)
void DrawTopFace(C4TargetFacet &cgo, int32_t iByPlayer=-1, DrawMode eDrawMode=ODM_Normal, float offX=0, float offY=0)
void ClearPointers(C4Object *ptr)
bool CloseMenu(bool fForce)
void ClearInfo(C4ObjectInfo *pInfo)
void Draw(C4TargetFacet &cgo, int32_t iByPlayer=-1, DrawMode eDrawMode=ODM_Normal, float offX=0, float offY=0)
void DrawSelectMark(C4TargetFacet &cgo) const
void Denumerate(C4ValueNumbers *) override
bool IsUserPlayerObject()
void UpdateGraphics(bool fGraphicsChanged, bool fTemp=false)
iterator & operator=(const iterator &iter)
iterator(const iterator &iter)
bool find(C4Object *target)
bool operator!=(const iterator &iter) const
bool operator==(const iterator &iter) const
virtual void OnObjectRemove(C4ObjectList *list, C4ObjectLink *link)
virtual void OnObjectAdded(C4ObjectList *list, C4ObjectLink *link)
bool DenumeratePointers()
void UpdateFaces(bool update_shape)
void UpdateGraphics(bool graphics_changed)
void UpdateScriptPointers()
bool ShiftContents(C4Object *new_first)
virtual bool AssignInfo()
int ListIDCount(int32_t dwCategory) const
void Copy(const C4ObjectList &list)
virtual void InsertLinkBefore(C4ObjectLink *link, C4ObjectLink *before_link)
void Draw(C4TargetFacet &cgo, int player, int MinPlane, int MaxPlane)
iterator * AddIter(iterator *iter) const
bool Write(char *szTarget)
void DrawSelectMark(C4TargetFacet &cgo) const
const C4ObjectLink * GetLink(const C4Object *obj) const
virtual bool Add(C4Object *new_obj, SortType sort_type, C4ObjectList *sorted_list=nullptr)
virtual bool ValidateOwners()
virtual void RemoveLink(C4ObjectLink *link)
C4ID GetListID(int32_t dwCategory, int index) const
const ReverseView reverse() const
C4Object * Find(C4Def *def, int owner=ANY_OWNER, DWORD dwOCF=OCF_All)
virtual bool Remove(C4Object *obj)
virtual void InsertLink(C4ObjectLink *link, C4ObjectLink *after_link)
int ObjectCount(C4ID id=C4ID::None) const
void CompileFunc(StdCompiler *pComp, C4ValueNumbers *=nullptr)
void ClearInfo(C4ObjectInfo *info)
StdStrBuf GetNameList(C4DefList &defs) const
std::list< int32_t > * pEnumerated
int ClearPointers(C4Object *obj)
bool IsContained(const C4Object *obj) const
C4Object * FindOther(C4ID id, int owner=ANY_OWNER)
bool CheckSort(C4ObjectList *list)
void DrawIfCategory(C4TargetFacet &cgo, int player, uint32_t dwCategory, bool invert)
void Denumerate(C4ValueNumbers *)
const iterator end() const
C4Object * GetObject(int index=0) const
void RemoveIter(iterator *iter) const
C4Object * GetNext(int32_t *piCount)
const char * GetName() const override
void Value(const T &rStruct)
virtual bool isDeserializer()
void AppendFormat(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
const char * getData() const
void Append(const char *pnData, size_t iChars)
C4ObjectListDumpHelper(C4ObjectList *pLst, C4ValueNumbers *numbers)
void CompileFunc(StdCompiler *pComp)