20#include "LkEngine/Core/LObject/Class.h"
22#include "LkEngine/Core/MetadataRegistry.h"
31 using FObjectHandle = LUUID;
33 class LMetadataRegistry;
51 : ObjectHandle(Other.ObjectHandle)
52 , bObjectInitialized(Other.bObjectInitialized)
53 , ObjectFlags(Other.ObjectFlags)
73 FORCEINLINE
virtual bool IsInitialized()
const {
return bObjectInitialized; }
85 if (HasAnyFlags(EObjectFlag::Garbage | EObjectFlag::BeginDestroy | EObjectFlag::FinishDestroy))
100 static bool bClassRegistered =
false;
101 if (!bClassRegistered)
104 bClassRegistered =
true;
152 ObjectHandle = Other.ObjectHandle;
153 bObjectInitialized = Other.bObjectInitialized;
154 ObjectFlags = Other.ObjectFlags;
165 ObjectFlags |= EObjectFlag::Garbage;
174 static_assert(
sizeof(T) > 0,
"As<T> failed, incomplete type");
175 return static_cast<T&
>(*this);
184 static_assert(
sizeof(T) > 0,
"As<T> failed, incomplete type");
185 return static_cast<const T&
>(*this);
194 static_assert(
sizeof(T) > 0,
"IsA<T> failed, incomplete type");
195 return (
GetClass()->GetName() == T::StaticClassName());
201 FORCEINLINE
virtual bool IsAsset()
const {
return false; }
211 template <
typename T>
221 FORCEINLINE
bool HasFlag(
const EObjectFlag InFlag)
const
223 return ((ObjectFlags & InFlag) ==
static_cast<std::underlying_type_t<EObjectFlag>
>(InFlag));
229 FORCEINLINE
bool HasAnyFlags(
const EObjectFlag InFlags)
const
231 return static_cast<bool>(ObjectFlags & InFlags);
240 FORCEINLINE
void IncrementReferenceCount()
const
250 FORCEINLINE
void DecrementReferenceCount()
const
257 FObjectHandle ObjectHandle = 0;
259 bool bObjectInitialized =
false;
260 EObjectFlag ObjectFlags = EObjectFlag::None;
278 FORCEINLINE
static bool CheckObjectValidBasedOnFlags(
const LObject* Object)
280 return !(Object->HasAnyFlags(EObjectFlag::Garbage));
284 FORCEINLINE
bool IsValid(
const LObject* Object)
286 return (Object && FInternalLObjectValidator::CheckObjectValidBasedOnFlags(Object));
289 FORCEINLINE
bool IsValid(
const LObject& Object)
291 return IsValid(&Object);
294 template<
typename TObject>
295 inline constexpr bool IsBaseOfObject = std::is_base_of<LObject, std::decay_t<TObject>>::value;
Core macros used by the entire engine.
LObject base implementation.
static LClass * Register(std::string_view ClassName)
Register metadata for a LClass.
Definition Class.h:67
static const LClass * Get(const std::type_index &ClassType)
Retrieve metadata for a LClass.
Definition Class.h:53
Definition ObjectBase.h:57
FORCEINLINE const LClass * GetClass() const
Get the private class member.
Definition ObjectBase.h:99
T & As()
Cast object to type T.
Definition Object.h:172
virtual FORCEINLINE bool IsAsset() const
Check if object is an asset.
Definition Object.h:201
const T & As() const
Cast object to type T.
Definition Object.h:182
virtual void Initialize()
Initialize object.
Definition Object.cpp:15
virtual FORCEINLINE const LClass * GetClass() const
Get the class for this LObject.
Definition Object.h:133
virtual void Destroy()
Destroy object, releasing all resources.
Definition Object.h:68
virtual FORCEINLINE bool IsObjectValid() const
Check if object is valid for use.
Definition Object.h:83
static void ValidateLObjectImplementation()
Validate the implementation of a LObject.
Definition Object.h:212
bool IsA() const
Check if the object is or is a derivation of type T.
Definition Object.h:192
virtual const LClass * ObjectRegistration()=0
Register object class.
static FORCEINLINE std::string StaticClassName()
Static class name.
Definition Object.h:122
virtual std::string ClassName() const =0
Get name of the LObject class.
virtual FORCEINLINE bool IsInitialized() const
Check if object is initialized.
Definition Object.h:73
FORCEINLINE uint32_t GetReferenceCount() const
Return current reference count from all object pointers.
Definition Object.h:206
static FORCEINLINE const LClass * StaticClass()
Get static class object.
Definition Object.h:98
std::atomic< uint32_t > Ptr_ReferenceCount
Definition Object.h:263
FORCEINLINE FObjectHandle GetObjectHandle() const
Get the object handle.
Definition Object.h:78
void MarkAsGarbage()
Mark object as garbage.
Definition Object.h:163
Definition ObjectPtr.h:102
Definition ObjectBase.h:134
Definition TypeTrait.h:29