8 #include <utility/dllexport.h>
9 #include <unordered_set>
10 #include <rtti/object.h>
51 const rtti::Object* get()
const {
return mPtr; }
57 void set(rtti::Object* ptr)
60 mPtr->decrementObjectPtrRefCount();
65 mPtr->incrementObjectPtrRefCount();
104 template<
class OBJECTSBYIDMAP>
105 void patchPointers(OBJECTSBYIDMAP& newTargetObjects);
115 if (ptr->get() == &targetObject)
126 void add(
ObjectPtrBase& ptr) { mObjectPointers.insert(&ptr); }
131 void remove(
ObjectPtrBase& ptr) { mObjectPointers.erase(&ptr); }
133 ObjectPtrSet mObjectPointers;
177 T*
get()
const {
return static_cast<T*
>(mPtr); }
180 T*
get() {
return static_cast<T*
>(mPtr); }
185 template<
typename OTHER>
189 template<
typename OTHER>
193 template<
typename OTHER>
197 template<
typename OTHER>
202 const T&
operator*()
const { assert(mPtr !=
nullptr);
return *
static_cast<T*
>(mPtr); }
204 T&
operator*() { assert(mPtr !=
nullptr);
return *
static_cast<T*
>(mPtr); }
206 T*
operator->()
const { assert(mPtr !=
nullptr);
return static_cast<T*
>(mPtr); }
208 T*
operator->() { assert(mPtr !=
nullptr);
return static_cast<T*
>(mPtr); }
212 template<
typename OTHER>
215 template<
typename OTHER>
216 bool operator==(
const OTHER* ptr)
const {
return mPtr == ptr; }
218 bool operator==(std::nullptr_t)
const {
return mPtr ==
nullptr; }
222 template<
typename OTHER>
225 template<
typename OTHER>
226 bool operator!=(
const OTHER* ptr)
const {
return mPtr != ptr; }
228 bool operator!=(std::nullptr_t)
const {
return mPtr !=
nullptr; }
242 template<
typename OTHER>
248 template<
typename OTHER>
257 template<
class OBJECTSBYIDMAP>
263 if (target ==
nullptr)
266 std::string& target_id = target->
mID;
267 typename OBJECTSBYIDMAP::iterator new_target = newTargetObjects.find(target_id);
268 if (new_target != newTargetObjects.end())
269 ptr->set(&*(new_target->second));
279 mPtr->decrementObjectPtrRefCount();
289 ObjectPtrManager::get().add(*
this);
290 mPtr->incrementObjectPtrRefCount();
295 template<
typename OTHER>
299 if (other.mPtr !=
nullptr)
301 other.mPtr->decrementObjectPtrRefCount();
302 other.mPtr =
nullptr;
307 template<
typename OTHER>
310 if (mPtr ==
nullptr && other.mPtr !=
nullptr)
311 ObjectPtrManager::get().add(*
this);
313 if (other.mPtr != mPtr)
316 mPtr->decrementObjectPtrRefCount();
318 mPtr =
static_cast<T*
>(other.get());
321 mPtr->incrementObjectPtrRefCount();
325 ObjectPtrManager::get().remove(*
this);
338 struct wrapper_mapper<
nap::rtti::ObjectPtr<T>>
340 using wrapped_type = T*;
342 inline static wrapped_type get(
const type& obj) {
return obj.
get(); }
void patchPointers(OBJECTSBYIDMAP &newTargetObjects)
Definition: objectptr.h:258
std::string mID
Property: 'mID' unique name of the object. Used as an identifier by the system.
Definition: object.h:82
std::unordered_set< ObjectPtrBase * > ObjectPtrSet
Definition: objectptr.h:92
bool operator<=(const ObjectPtr< T > &other) const
Definition: objectptr.h:234
rttr::type getWrappedType() const
Definition: objectptr.h:32
const T & operator*() const
Definition: objectptr.h:202
bool operator==(std::nullptr_t) const
Definition: objectptr.h:218
T * operator->() const
Definition: objectptr.h:206
bool operator!=(const OTHER *ptr) const
Definition: objectptr.h:226
ObjectPtr(const ObjectPtr< T > &other)
Definition: objectptr.h:165
bool operator<(const ObjectPtr< T > &other) const
Definition: objectptr.h:230
Definition: objectptr.h:150
ObjectPtr< T > & operator=(const ObjectPtr< OTHER > &other)
Definition: objectptr.h:194
ObjectPtr< T > & operator=(ObjectPtr< OTHER > &&other)
Definition: objectptr.h:198
ObjectPtr< T > & operator=(const ObjectPtr< T > &other)
Definition: objectptr.h:171
bool operator==(const ObjectPtr< OTHER > &other) const
Definition: objectptr.h:213
ObjectPtr< T > & operator=(ObjectPtr< T > &&other)
Definition: objectptr.h:174
bool operator!=(const ObjectPtr< T > &other) const
Definition: objectptr.h:220
bool operator>(const ObjectPtr< T > &other) const
Definition: objectptr.h:232
bool operator!=(const ObjectPtr< OTHER > &other) const
Definition: objectptr.h:223
void resetPointers(const rtti::Object &targetObject)
Definition: objectptr.h:111
ObjectPtr(ObjectPtr< T > &&other)
Definition: objectptr.h:168
virtual ~ObjectPtr() override
Definition: objectptr.h:275
Definition: objectptr.h:89
T * operator->()
Definition: objectptr.h:208
T * get() const
Definition: objectptr.h:177
static ObjectPtrManager & get()
T & operator*()
Definition: objectptr.h:204
Definition: templateapp.h:17
bool operator==(const ObjectPtr< T > &other) const
Definition: objectptr.h:210
bool operator!=(std::nullptr_t) const
Definition: objectptr.h:228
T * get()
Definition: objectptr.h:180
bool operator==(const OTHER *ptr) const
Definition: objectptr.h:216
bool operator>=(const ObjectPtr< T > &other) const
Definition: objectptr.h:236
ObjectPtr(const ObjectPtr< OTHER > &other)
Definition: objectptr.h:186
ObjectPtr(ObjectPtr< OTHER > &&other)
Definition: objectptr.h:190
Definition: objectptr.h:23