Bifrost SDK
Bifrost SDK documentation
Ptr.h File Reference

Smart pointers used to allow custom user classes (opaque classes) to be used within Amino graphs. They can also be used to implement persistent copy-on-write data structures and types. More...

#include "PtrFwd.h"
#include "internal/PtrRep.h"
#include <functional>
#include <type_traits>

Go to the source code of this file.

Classes

struct  Amino::PointeeTraits
 Traits about the to-be-pointee of an Amino::Ptr<T> or Amino::MutablePtr<T> class. More...
 
struct  Amino::PointeeTraits::is_compliant_base< T >
 Whether a Ptr<T> or MutablePtr<T> can be instantiated. More...
 
struct  Amino::PointeeTraits::is_compliant< T >
 Whether the class of type T can be stored in an Amino::Ptr<T> or an Amino::MutablePtr<T>. More...
 
struct  Amino::PtrDefaultFlag
 Flag that may be passed when creating a Ptr, to make it contain a default value as its pointee. More...
 
class  Amino::Ptr< T >
 Smart pointers allowing custom user classes (opaque classes) to be used within Amino graphs. More...
 
class  Amino::MutablePtr< T >
 Transient version of Amino::Ptr<T> which allows mutable access to the pointee. More...
 
struct  Amino::PtrGuardUniqueFlag
 Flag that may be passed when creating a PtrGuard. More...
 
class  Amino::PtrGuard< T >
 Helper guard to allow mutation on a pointee for the lifescope of the PtrGuard<T> but then reassigning to the source Ptr upon its destruction. More...
 
struct  std::hash< Amino::Ptr< T > >
 Hash functor for Amino::Ptr. More...
 

Namespaces

namespace  Amino
 
namespace  std
 

Functions

template<typename T >
 Amino::Ptr (MutablePtr< T >) -> Ptr< T >
 Deduction guide for Ptr. More...
 
template<class T >
void Amino::swap (Ptr< T > &lhs, Ptr< T > &rhs) noexcept
 Swap two pointers. More...
 
template<class T >
void Amino::swap (MutablePtr< T > &lhs, MutablePtr< T > &rhs) noexcept
 Swap two pointers. More...
 
template<class T , class... Args>
Ptr< T > Amino::newClassPtr (Args &&... args)
 Creates a Ptr holding a new T constructed from the given arguments. More...
 
template<class T , class E >
Ptr< T > Amino::newClassPtr (std::initializer_list< E > list)
 Creates a Ptr holding a new T constructed from the given initializer_list. More...
 
template<class T , class... Args>
MutablePtr< T > Amino::newMutablePtr (Args &&... args)
 Creates a MutablePtr holding a new T constructed from the given arguments. More...
 
template<class T , class E >
MutablePtr< T > Amino::newMutablePtr (std::initializer_list< E > list)
 Creates a MutablePtr holding a new T constructed from the given initializer_list. More...
 
template<typename T >
 Amino::PtrGuard (Ptr< T > &) -> PtrGuard< T >
 Deduction guide for PtrGuard. More...
 
template<typename T >
 Amino::PtrGuard (Ptr< T > &, PtrGuardUniqueFlag) -> PtrGuard< T >
 Deduction guide for PtrGuard. More...
 
Equality comparison
template<class T , class U >
bool Amino::operator== (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator== (const Ptr< T > &x, std::nullptr_t) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator== (std::nullptr_t, const Ptr< T > &y) noexcept
 Return true if pointers are equal. More...
 
template<class T , class U >
bool Amino::operator!= (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Return true if pointers are not equal. More...
 
template<class T >
bool Amino::operator!= (const Ptr< T > &x, std::nullptr_t) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator!= (std::nullptr_t, const Ptr< T > &y) noexcept
 Return true if pointers are equal. More...
 
Ordering comparison
template<class T , class U >
bool Amino::operator< (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator< (const Ptr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator< (std::nullptr_t, const Ptr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator> (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator> (const Ptr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator> (std::nullptr_t, const Ptr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator<= (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator<= (const Ptr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator<= (std::nullptr_t, const Ptr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator>= (Ptr< T > const &x, Ptr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator>= (const Ptr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator>= (std::nullptr_t, const Ptr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator< (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator< (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator< (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator> (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator> (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator> (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator<= (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator<= (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator<= (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Compares the pointer values. More...
 
template<class T , class U >
bool Amino::operator>= (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator>= (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Compares the pointer values. More...
 
template<class T >
bool Amino::operator>= (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Compares the pointer values. More...
 
Comparison operator with nullptr.
template<class T , class U >
bool Amino::operator== (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator== (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator== (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Return true if pointers are equal. More...
 
template<class T , class U >
bool Amino::operator!= (MutablePtr< T > const &x, MutablePtr< U > const &y) noexcept
 Return true if pointers are not equal. More...
 
template<class T >
bool Amino::operator!= (const MutablePtr< T > &x, std::nullptr_t) noexcept
 Return true if pointers are equal. More...
 
template<class T >
bool Amino::operator!= (std::nullptr_t, const MutablePtr< T > &y) noexcept
 Return true if pointers are equal. More...
 
Pointer casts
template<class T , class U >
Ptr< T > Amino::static_pointer_cast (Ptr< U > const &ptr) noexcept
 Static pointer cast. More...
 
template<class T , class U >
Ptr< T > Amino::static_pointer_cast (Ptr< U > &&ptr) noexcept
 Static pointer cast. More...
 
template<class T , class U >
Ptr< T > Amino::dynamic_pointer_cast (Ptr< U > const &ptr) noexcept
 Dynamic pointer cast. More...
 
template<class T , class U >
Ptr< T > Amino::dynamic_pointer_cast (Ptr< U > &&ptr) noexcept
 Dynamic pointer cast. More...
 
template<typename T >
std::enable_if_t< PtrInternal::DefaultPtrTraits::has_default_class< T >::value, Ptr< T > > Amino::makeDefaultPtr ()
 Creates a Ptr holding the default value for T. More...
 
template<typename T >
std::enable_if_t< PtrInternal::DefaultPtrTraits::is_array< T >::value, Ptr< T > > Amino::makeDefaultPtr ()
 Creates a Ptr holding the default value for T. More...
 
template<typename T >
std::enable_if_t< !PtrInternal::DefaultPtrTraits::is_defaultable< T >::value, Ptr< T > > Amino::makeDefaultPtr ()
 Creates a Ptr holding the default value for T. More...
 
template<typename T >
PtrGuard< T > Amino::createPtrGuard (Ptr< T > &src)
 Create a PtrGuard for the given Ptr. More...
 
template<typename T1 , typename T2 >
PtrGuard< T1 > Amino::createPtrGuard (Ptr< T2 > &src)
 Create a PtrGuard for the given Ptr. More...
 
template<typename T >
PtrGuard< T > Amino::createPtrGuard (Ptr< T > &src, PtrGuardUniqueFlag)
 Create a PtrGuard for the given Ptr. More...
 

Detailed Description

Smart pointers used to allow custom user classes (opaque classes) to be used within Amino graphs. They can also be used to implement persistent copy-on-write data structures and types.

See also
Amino::Ptr
Amino::MutablePtr

Definition in file Ptr.h.