diff --git a/src/common/objects/dobjgc.h b/src/common/objects/dobjgc.h index a844a16db..25e27bfb3 100644 --- a/src/common/objects/dobjgc.h +++ b/src/common/objects/dobjgc.h @@ -282,6 +282,11 @@ public: return GC::ReadBarrier(o) == u; } + constexpr bool operator==(TObjPtr u) noexcept + { + return ForceGet() == u.ForceGet(); + } + template friend inline void GC::Mark(TObjPtr &obj); template friend FSerializer &Serialize(FSerializer &arc, const char *key, TObjPtr &value, TObjPtr *); template friend FSerializer &Serialize(FSerializer &arc, const char *key, TObjPtr &value, U *); diff --git a/src/common/utility/geometry.h b/src/common/utility/geometry.h index cbe0fc72d..e6b19db38 100644 --- a/src/common/utility/geometry.h +++ b/src/common/utility/geometry.h @@ -232,3 +232,4 @@ inline bool BoxInRange(const DVector2& boxtl, const DVector2& boxbr, const DVect boxtl.Y < max(start.Y, end.Y) && boxbr.Y > min(start.Y, end.Y); } + diff --git a/src/common/utility/tarray.h b/src/common/utility/tarray.h index 760dd6092..e60772688 100644 --- a/src/common/utility/tarray.h +++ b/src/common/utility/tarray.h @@ -455,6 +455,13 @@ public: return start; } + unsigned AddUnique(const T& obj) + { + auto f = Find(obj); + if (f == Size()) Push(obj); + return f; + } + bool Pop () { if (Count > 0)