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.
 
ostream & operator<<(ostream &os, const vtkWeakPointer< T > &p)
Streaming operator to print smart pointer like regular pointers.
 
#define VTK_WEAK_POINTER_DEFINE_OPERATOR(op)