Halide
Halide::Internal::IntrusivePtr< T > Struct Template Reference

Intrusive shared pointers have a reference count (a RefCount object) stored in the class itself. More...

#include <IntrusivePtr.h>

Public Member Functions

T * get () const
 Access the raw pointer in a variety of ways. More...
 
T & operator* () const
 
T * operator-> () const
 
 ~IntrusivePtr ()
 
HALIDE_ALWAYS_INLINE IntrusivePtr ()=default
 
HALIDE_ALWAYS_INLINE IntrusivePtr (T *p)
 
HALIDE_ALWAYS_INLINE IntrusivePtr (const IntrusivePtr< T > &other) noexcept
 
HALIDE_ALWAYS_INLINE IntrusivePtr (IntrusivePtr< T > &&other) noexcept
 
IntrusivePtr< T > & operator= (const IntrusivePtr< T > &other)
 
IntrusivePtr< T > & operator= (IntrusivePtr< T > &&other) noexcept
 
HALIDE_ALWAYS_INLINE bool defined () const
 
HALIDE_ALWAYS_INLINE bool same_as (const IntrusivePtr &other) const
 
HALIDE_ALWAYS_INLINE bool operator< (const IntrusivePtr< T > &other) const
 

Protected Attributes

T * ptr = nullptr
 

Detailed Description

template<typename T>
struct Halide::Internal::IntrusivePtr< T >

Intrusive shared pointers have a reference count (a RefCount object) stored in the class itself.

This is perhaps more efficient than storing it externally, but more importantly, it means it's possible to recover a reference-counted handle from the raw pointer, and it's impossible to have two different reference counts attached to the same raw object. Seeing as we pass around raw pointers to concrete IRNodes and Expr's interchangeably, this is a useful property.

Definition at line 68 of file IntrusivePtr.h.

Constructor & Destructor Documentation

◆ ~IntrusivePtr()

template<typename T >
Halide::Internal::IntrusivePtr< T >::~IntrusivePtr ( )
inline

Definition at line 112 of file IntrusivePtr.h.

◆ IntrusivePtr() [1/4]

template<typename T >
HALIDE_ALWAYS_INLINE Halide::Internal::IntrusivePtr< T >::IntrusivePtr ( )
default

◆ IntrusivePtr() [2/4]

template<typename T >
HALIDE_ALWAYS_INLINE Halide::Internal::IntrusivePtr< T >::IntrusivePtr ( T *  p)
inline

Definition at line 120 of file IntrusivePtr.h.

◆ IntrusivePtr() [3/4]

template<typename T >
HALIDE_ALWAYS_INLINE Halide::Internal::IntrusivePtr< T >::IntrusivePtr ( const IntrusivePtr< T > &  other)
inlinenoexcept

Definition at line 126 of file IntrusivePtr.h.

◆ IntrusivePtr() [4/4]

template<typename T >
HALIDE_ALWAYS_INLINE Halide::Internal::IntrusivePtr< T >::IntrusivePtr ( IntrusivePtr< T > &&  other)
inlinenoexcept

Definition at line 132 of file IntrusivePtr.h.

Member Function Documentation

◆ get()

template<typename T >
T* Halide::Internal::IntrusivePtr< T >::get ( ) const
inline

Access the raw pointer in a variety of ways.

Note that a "const IntrusivePtr<T>" is not the same thing as an IntrusivePtr<const T>. So the methods that return the ptr are const, despite not adding an extra const to T.

Definition at line 99 of file IntrusivePtr.h.

Referenced by Halide::Internal::FunctionPtr::group().

◆ operator*()

template<typename T >
T& Halide::Internal::IntrusivePtr< T >::operator* ( ) const
inline

Definition at line 103 of file IntrusivePtr.h.

◆ operator->()

template<typename T >
T* Halide::Internal::IntrusivePtr< T >::operator-> ( ) const
inline

Definition at line 107 of file IntrusivePtr.h.

◆ operator=() [1/2]

template<typename T >
IntrusivePtr<T>& Halide::Internal::IntrusivePtr< T >::operator= ( const IntrusivePtr< T > &  other)
inline

Definition at line 138 of file IntrusivePtr.h.

◆ operator=() [2/2]

template<typename T >
IntrusivePtr<T>& Halide::Internal::IntrusivePtr< T >::operator= ( IntrusivePtr< T > &&  other)
inlinenoexcept

Definition at line 154 of file IntrusivePtr.h.

◆ defined()

◆ same_as()

◆ operator<()

template<typename T >
HALIDE_ALWAYS_INLINE bool Halide::Internal::IntrusivePtr< T >::operator< ( const IntrusivePtr< T > &  other) const
inline

Definition at line 173 of file IntrusivePtr.h.

Member Data Documentation

◆ ptr


The documentation for this struct was generated from the following file: