Celeritas 0.7.0-33+develop.9c828abdd
Loading...
Searching...
No Matches
Public Member Functions | List of all members
celeritas::ObserverPtr< T, M > Class Template Reference

Type-safe non-owning pointer. More...

#include <ObserverPtr.hh>

Public Member Functions

constexpr operator bool () const noexcept
 True unless nullptr.
 
constexpr pointer get () const noexcept
 
constexpr operator pointer () const noexcept
 
constexpr reference operator* () const noexcept
 
constexpr pointer operator-> () const noexcept
 
constexpr reference operator[] (std::size_t i) const noexcept
 
constexpr pointer release () noexcept
 
constexpr void reset (pointer ptr=nullptr) noexcept
 
constexpr void swap (ObserverPtr &other) noexcept
 

Friends

Comparators
template<class T2 >
constexpr friend bool operator== (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
template<class T2 >
constexpr friend bool operator!= (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
template<class T2 >
constexpr friend bool operator< (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
template<class T2 >
constexpr friend bool operator> (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
template<class T2 >
constexpr friend bool operator<= (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
template<class T2 >
constexpr friend bool operator>= (ObserverPtr lhs, ObserverPtr< T2, M > rhs) noexcept
 
constexpr friend bool operator== (ObserverPtr const &lhs, std::nullptr_t) noexcept
 
constexpr friend bool operator!= (ObserverPtr const &lhs, std::nullptr_t) noexcept
 
constexpr friend bool operator== (std::nullptr_t, ObserverPtr const &rhs) noexcept
 
constexpr friend bool operator!= (std::nullptr_t, ObserverPtr const &rhs) noexcept
 

Type aliases

using element_type = T
 
using pointer = std::add_pointer_t< T >
 
using reference = std::add_lvalue_reference_t< T >
 
constexpr ObserverPtr () noexcept=default
 
constexpr ObserverPtr (std::nullptr_t) noexcept
 
constexpr ObserverPtr (pointer ptr) noexcept
 
template<class T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, bool > = true>
constexpr ObserverPtr (ObserverPtr< T2, M > other) noexcept
 

Detailed Description

template<class T, MemSpace M = MemSpace::native>
class celeritas::ObserverPtr< T, M >

Type-safe non-owning pointer.

This class is based on WG21 N4282, "A Proposal for the World's Dumbest Smart Pointer, v4". It adds memspace safety similar to Thrust's host/device_ptr. (See ObserverPtr.device.hh to convert between device_ptr and ObserverPtr .)

The dereferencing operators can only be used from the "native" memspace: i.e., host data can be accessed from a .cc file, and device data from a .cu file. However, the pointer itself can be accessed directly via get or explicitly casting to the pointer type. Members of observerptr structs can be accessed using a special make_observer overload.

Member Typedef Documentation

◆ element_type

template<class T , MemSpace M = MemSpace::native>
using celeritas::ObserverPtr< T, M >::element_type = T

Construct a pointer

◆ pointer

template<class T , MemSpace M = MemSpace::native>
using celeritas::ObserverPtr< T, M >::pointer = std::add_pointer_t<T>

Construct a pointer

◆ reference

template<class T , MemSpace M = MemSpace::native>
using celeritas::ObserverPtr< T, M >::reference = std::add_lvalue_reference_t<T>

Construct a pointer

Constructor & Destructor Documentation

◆ ObserverPtr() [1/4]

template<class T , MemSpace M = MemSpace::native>
constexpr celeritas::ObserverPtr< T, M >::ObserverPtr ( )
constexprdefaultnoexcept

Construct a pointer

◆ ObserverPtr() [2/4]

template<class T , MemSpace M = MemSpace::native>
constexpr celeritas::ObserverPtr< T, M >::ObserverPtr ( std::nullptr_t  )
inlineconstexprnoexcept

Construct a pointer

◆ ObserverPtr() [3/4]

template<class T , MemSpace M = MemSpace::native>
constexpr celeritas::ObserverPtr< T, M >::ObserverPtr ( pointer  ptr)
inlineexplicitconstexprnoexcept

Construct a pointer

◆ ObserverPtr() [4/4]

template<class T , MemSpace M = MemSpace::native>
template<class T2 , std::enable_if_t< std::is_convertible_v< T2 *, T * >, bool > = true>
constexpr celeritas::ObserverPtr< T, M >::ObserverPtr ( ObserverPtr< T2, M >  other)
inlineconstexprnoexcept

Construct a pointer

Member Function Documentation

◆ get()

template<class T , MemSpace M = MemSpace::native>
constexpr pointer celeritas::ObserverPtr< T, M >::get ( ) const
inlineconstexprnoexcept

Access the pointer without checking

◆ operator pointer()

template<class T , MemSpace M = MemSpace::native>
constexpr celeritas::ObserverPtr< T, M >::operator pointer ( ) const
inlineexplicitconstexprnoexcept

Access the pointer without checking

◆ operator*()

template<class T , MemSpace M = MemSpace::native>
constexpr reference celeritas::ObserverPtr< T, M >::operator* ( ) const
inlineconstexprnoexcept

Access the pointed-to data from the native memspace

◆ operator->()

template<class T , MemSpace M = MemSpace::native>
constexpr pointer celeritas::ObserverPtr< T, M >::operator-> ( ) const
inlineconstexprnoexcept

Access the pointed-to data from the native memspace

◆ operator[]()

template<class T , MemSpace M = MemSpace::native>
constexpr reference celeritas::ObserverPtr< T, M >::operator[] ( std::size_t  i) const
inlineconstexprnoexcept

Access the pointed-to data from the native memspace

◆ release()

template<class T , MemSpace M = MemSpace::native>
constexpr pointer celeritas::ObserverPtr< T, M >::release ( )
inlineconstexprnoexcept

Modify the pointer

◆ reset()

template<class T , MemSpace M = MemSpace::native>
constexpr void celeritas::ObserverPtr< T, M >::reset ( pointer  ptr = nullptr)
inlineconstexprnoexcept

Modify the pointer

◆ swap()

template<class T , MemSpace M = MemSpace::native>
constexpr void celeritas::ObserverPtr< T, M >::swap ( ObserverPtr< T, M > &  other)
inlineconstexprnoexcept

Modify the pointer


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