34#ifndef vtkWeakPointer_h
35#define vtkWeakPointer_h
45VTK_ABI_NAMESPACE_BEGIN
53 template <
typename U = T>
54 static void CheckTypes()
noexcept
57 "vtkWeakPointer<T>'s T type has not been defined. Missing "
60 "Cannot store an object with undefined type in "
61 "vtkWeakPointer. Missing include?");
62 static_assert(std::is_base_of<T, U>::value,
63 "Argument type is not compatible with vtkWeakPointer<T>'s "
65 static_assert(std::is_base_of<vtkObjectBase, T>::value,
66 "vtkWeakPointer can only be used with subclasses of "
92 vtkWeakPointer::CheckTypes<U>();
109 vtkWeakPointer::CheckTypes<U>();
120 vtkWeakPointer::CheckTypes();
123 template <
typename U>
127 vtkWeakPointer::CheckTypes<U>();
144 vtkWeakPointer::CheckTypes<U>();
164 vtkWeakPointer::CheckTypes<U>();
177 vtkWeakPointer::CheckTypes();
182 template <
typename U>
185 vtkWeakPointer::CheckTypes<U>();
197 T*
Get() const noexcept {
return static_cast<T*
>(this->
Object); }
198 operator T*()
const noexcept {
return static_cast<T*
>(this->
Object); }
216#if defined(__HP_aCC) || defined(__IBMCPP__)
217#define VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(op) \
218 bool operator op(NullPointerOnly*) const { return ::operator op(*this, 0); }
221 class NullPointerOnly
226 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(==)
227 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(!=)
228 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(<)
229 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(<=)
230 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(>)
231 VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND(>=)
232#undef VTK_WEAK_POINTER_DEFINE_OPERATOR_WORKAROUND
247#define VTK_WEAK_POINTER_DEFINE_OPERATOR(op) \
248 template <class T, class U> \
249 inline bool operator op(const vtkWeakPointer<T>& l, const vtkWeakPointer<U>& r) \
251 return (l.GetPointer() op r.GetPointer()); \
253 template <class T, class U> \
254 inline bool operator op(T* l, const vtkWeakPointer<U>& r) \
256 return (l op r.GetPointer()); \
258 template <class T, class U> \
259 inline bool operator op(const vtkWeakPointer<T>& l, U* r) \
261 return (l.GetPointer() op r); \
263 template <class T, class U> \
264 inline bool operator op(const vtkNew<T>& l, const vtkWeakPointer<U>& r) \
266 return (l.GetPointer() op r.GetPointer()); \
268 template <class T, class U> \
269 inline bool operator op(const vtkWeakPointer<T>& l, const vtkNew<U>& r) \
271 return (l.GetPointer() op r.GetPointer); \
284#undef VTK_WEAK_POINTER_DEFINE_OPERATOR
290VTK_ABI_NAMESPACE_BEGIN
303VTK_ABI_NAMESPACE_BEGIN
310 return os << static_cast<const vtkWeakPointerBase&>(p);
Allocate and hold a VTK object.
Non-templated superclass for vtkWeakPointer.
vtkWeakPointerBase & operator=(vtkObjectBase *r)
Assign object to reference.
vtkWeakPointerBase() noexcept
Initialize smart pointer to nullptr.
a weak reference to a vtkObject.
T * GetPointer() const noexcept
Get the contained pointer.
vtkWeakPointer & operator=(vtkWeakPointer< U > &&r) noexcept
Move r's object into this weak pointer, setting r to nullptr.
vtkWeakPointer & operator=(const vtkNew< U > &r)
Assign object to reference.
vtkWeakPointer(const vtkWeakPointer< U > &r)
Initialize smart pointer with the given smart pointer.
vtkWeakPointer() noexcept
Initialize smart pointer to nullptr.
vtkWeakPointer(vtkWeakPointer< U > &&r) noexcept
Initialize smart pointer with the given smart pointer.
vtkWeakPointer(vtkWeakPointer &&r) noexcept
Move r's object into the new weak pointer, setting r to nullptr.
vtkWeakPointer & operator=(const vtkWeakPointer &r)
Assign object to reference.
vtkWeakPointer & operator=(vtkWeakPointer &&r) noexcept
Move r's object into this weak pointer, setting r to nullptr.
T & operator*() const noexcept
Dereference the pointer and return a reference to the contained object.
vtkWeakPointer & operator=(const vtkWeakPointer< U > &r)
Assign object to reference.
vtkWeakPointer(T *r, const NoReference &n)
Get the contained pointer.
vtkWeakPointer & operator=(T *r)
Assign object to reference.
vtkWeakPointer(const vtkWeakPointer &r)
Initialize smart pointer with the given smart pointer.
T * Get() const noexcept
Get the contained pointer.
vtkWeakPointer(T *r)
Initialize smart pointer to given object.
T * operator->() const noexcept
Provides normal pointer target member access using operator ->.
vtkWeakPointer(const vtkNew< U > &r)
Initialize smart pointer with the given smart pointer.
Specialization of tuple ranges and iterators for vtkAOSDataArrayTemplate.
vtkWeakPointer< T > TakeWeakPointer(T *obj)
Construct a vtkWeakPointer<T> containing obj.
ostream & operator<<(ostream &os, const vtkWeakPointer< T > &p)
Streaming operator to print smart pointer like regular pointers.
#define VTK_WEAK_POINTER_DEFINE_OPERATOR(op)