30 mySharedSafePtr = std::make_shared<T*>(
this);
33 virtual ~DtSafePtrObject()
35 *mySharedSafePtr.get() =
nullptr;
39 std::shared_ptr<std::atomic<T*>> mySharedSafePtr;
41 friend class DtSafeObjectPtr<T>;
47 std::weak_ptr<std::atomic<T*>> myPtrObjPtr;
51 DtSafeObjectPtr(T* obj)
53 myPtrObjPtr = obj->mySharedSafePtr;;
55 virtual ~DtSafeObjectPtr() {}
57 DtSafeObjectPtr& operator = (T* obj)
59 myPtrObjPtr = obj->mySharedSafePtr;
64 return !myPtrObjPtr.expired() && bool(*myPtrObjPtr.lock().get());
67 T* operator-> ()
const
69 DtASSERT(!myPtrObjPtr.expired(),
"Dereferencing invalid object ref");
70 return *myPtrObjPtr.lock().get();
75 DtASSERT(!myPtrObjPtr.expired(),
"Dereferencing invalid object ref");
76 return *myPtrObjPtr.lock().get();
81 DtASSERT(!myPtrObjPtr.expired(),
"Dereferencing invalid object ref");
82 return myPtrObjPtr.lock().get();
99 using Sptr = std::shared_ptr<DtSpObject>;
102 using Wptr = std::weak_ptr<DtSpObject>;
122 template <
class AS_T>
125 return std::dynamic_pointer_cast<AS_T>(p);
134 template <
class AS_T>
137 return std::static_pointer_cast<AS_T>(p);
143 virtual std::string
type()
const = 0;
173template <
class SELF_T,
class SUPER_T = DtSpObject>
184 using Sptr = std::shared_ptr<SELF_T>;
187 using Wptr = std::weak_ptr<SELF_T>;
198 Sptr self() {
return std::static_pointer_cast<SELF_T>(Super::self()); }
203 static std::string
Type() {
return typeid(SELF_T).
name(); }
208 std::string
type()
const override {
return typeid(SELF_T).
name(); }
232 LOG_FATAL(
"UTIL") << SELF_T::Type() <<
"::create called with no creator class registered." << std::endl;
233 DtASSERT(
false,
"create() called with no creator class registered. See log.");
235 return creator()->create()->self();
241 template <
class CUSTOM_T>
244 creator() = std::make_shared<DtCreator<SELF_T, CUSTOM_T>>();
251 static std::shared_ptr<DtBaseCreator<SELF_T>>&
creator()
253 static std::shared_ptr<DtBaseCreator<SELF_T>> creator_sp;
270 LOG_FATAL(
"UTIL") << SELF_T::Type() <<
"::createVersion(" << version
271 <<
") called with no creator class registered." << std::endl;
272 DtASSERT(
false,
"create() called with no creator class registered. See log.");
281 template <
class CUSTOM_T>
284 creatorVersion(version) = std::make_shared<DtCreator<SELF_T, CUSTOM_T>>();
292 static std::shared_ptr<DtBaseCreator<SELF_T>>&
creatorVersion(
unsigned int version)
294 static std::map<unsigned int, std::shared_ptr<DtBaseCreator<SELF_T>>> creatorMap_sp;
295 return creatorMap_sp[version];
Provides assertion macros and functions for error detection and handling.
#define DtASSERT(exp, description)
Primary assertion macro for runtime validation.
Definition assert.h:53
virtual void setName(const std::string &name)
Sets the name of this object.
Definition baseClass.h:148
static std::shared_ptr< AS_T > cast(Sptr p)
Safely casts a base shared pointer to a derived type.
Definition baseClass.h:123
DtSpObject()
Default constructor.
Definition baseClass.h:105
std::string myName
The name of this object.
Definition baseClass.h:157
Sptr self()
Gets a shared pointer to this object.
Definition baseClass.h:116
Wptr mySelf
Weak pointer to self for shared_ptr management.
Definition baseClass.h:161
virtual std::string name() const
Gets the name of this object.
Definition baseClass.h:153
virtual ~DtSpObject()
Virtual destructor.
Definition baseClass.h:108
std::shared_ptr< DtSpObject > Sptr
Shared pointer type alias.
Definition baseClass.h:99
static std::shared_ptr< AS_T > unsafe_cast(Sptr p)
Performs an unsafe static cast of a shared pointer.
Definition baseClass.h:135
DtSpObject * Ptr
Raw pointer type alias.
Definition baseClass.h:96
std::weak_ptr< DtSpObject > Wptr
Weak pointer type alias.
Definition baseClass.h:102
virtual std::string type() const =0
Gets the type of this object.
std::string type() const override
Gets the runtime type of this object.
Definition baseClass.h:208
static std::shared_ptr< DtBaseCreator< SELF_T > > & creatorVersion(unsigned int version)
Gets the reference to the creator object for a specific version.
Definition baseClass.h:292
static void registerCreatorVersion(unsigned int version)
Registers a custom class for a specific version.
Definition baseClass.h:282
static std::string Type()
Gets the static type name of this class.
Definition baseClass.h:203
virtual ~DtSpSubClass()
Virtual destructor.
Definition baseClass.h:193
Sptr self()
Gets a shared pointer to this object of the derived type.
Definition baseClass.h:198
std::weak_ptr< SELF_T > Wptr
Weak pointer type alias.
Definition baseClass.h:187
static std::shared_ptr< DtBaseCreator< SELF_T > > & creator()
Gets the reference to the creator object.
Definition baseClass.h:251
SELF_T * Ptr
Raw pointer type alias.
Definition baseClass.h:181
static std::shared_ptr< SELF_T > createVersion(unsigned int version)
Creates an instance of this class for a specific version.
Definition baseClass.h:266
static void registerCreator()
Registers a custom extended class to be created instead of this type.
Definition baseClass.h:242
static std::shared_ptr< SELF_T > create()
Creates an instance of this class or its registered extension.
Definition baseClass.h:228
DtSpSubClass()
Default constructor.
Definition baseClass.h:190
SUPER_T Super
Super class type alias.
Definition baseClass.h:178
std::shared_ptr< SELF_T > Sptr
Shared pointer type alias.
Definition baseClass.h:184
Provides a template-based factory system for object creation.
#define LOG_FATAL(channel)
Macro to log a fatal message to log files.
Definition logger.h:64
Include export definitions for this library.
Definition glsVreMessageUtil.h:49