xentara-workbench-plugin v1.0.1
The Xentara Workbench Plugin Framework
Loading...
Searching...
No Matches
xentara::workbench::skill::SubElementPointer< Element > Class Template Reference

A pointer holding a sub element. More...

#include <xentara/workbench/skill/SubElementPointer.hpp>

+ Inheritance diagram for xentara::workbench::skill::SubElementPointer< Element >:

Public Types

using pointer = Element *
 The pointer type.
 
using element_type = Element
 The element type.
 

Public Member Functions

Constructors
 SubElementPointer () noexcept=default
 Default constructor.
 
 SubElementPointer (std::nullptr_t) noexcept
 Constructor for a null pointer.
 
 SubElementPointer (pointer rawPointer) noexcept
 Constructor that takes ownership of a raw pointer.
 
 SubElementPointer (const SubElementPointer &other)
 Copy constructor.
 
 SubElementPointer (SubElementPointer &&other) noexcept
 Move constructor.
 
 SubElementPointer (std::unique_ptr< Element > &&pointer) noexcept
 Constructor that takes ownership from a unique_ptr.
 
template<typename... Arguments>
 SubElementPointer (std::in_place_t, Arguments &&...arguments)
 In-place constructor.
 
template<typename InitializerListElement , typename... Arguments>
 SubElementPointer (std::in_place_t, std::initializer_list< InitializerListElement > initializerList, Arguments &&...arguments)
 In-place constructor using an initializer list.
 
template<typename NonEligibleType >
 SubElementPointer (std::unique_ptr< NonEligibleType > &&)=delete
 Do not accept unique pointers to subclasses.
 
Operators
auto operator= (std::nullptr_t) noexcept -> SubElementPointer &
 Assignment operator for a null pointer.
 
auto operator= (const SubElementPointer &rhs) -> SubElementPointer &
 Assignment operator.
 
auto operator= (SubElementPointer &&rhs) noexcept -> SubElementPointer &
 Move assignment operator.
 
auto operator= (std::unique_ptr< Element > &&rhs) noexcept -> SubElementPointer &
 Assignment operator that takes ownership from a unique_ptr.
 
template<typename NonEligibleType >
auto operator= (std::unique_ptr< NonEligibleType > &&) -> SubElementPointer &=delete
 Do not accept unique pointers to subclasses.
 
 operator std::unique_ptr< Element > () &&noexcept
 Conversion to a unique_ptr.
 
 operator bool () const noexcept
 Checks whether the pointer has a managed object.
 
Modifiers
auto release () noexcept -> pointer
 Gives up ownership of the managed object and returns it.
 
auto reset (pointer rawPointer=pointer()) noexcept -> void
 Resets the pointer to a null pointer.
 
template<typename NonEligibleType >
auto reset (NonEligibleType *) noexcept -> void=delete
 Do not accept raw pointers to subclasses.
 
auto swap (SubElementPointer &other) noexcept -> void
 Swaps two pointers.
 
template<typename... Arguments>
auto emplace (Arguments &&...arguments) -> Element &
 Emplaces an object.
 
template<typename InitializerListElement , typename... Arguments>
auto emplace (std::in_place_t, std::initializer_list< InitializerListElement > initializerList, Arguments &&...arguments) -> Element &
 Emplaces an object using an initializer list.
 
Accessors
auto get () const noexcept -> pointer
 Gets a raw pointer to the object.
 
auto operator* () const noexcept -> std::add_lvalue_reference_t< Element >
 Accesses the object.
 
auto operator-> () const noexcept -> pointer
 Accesses a member of the managed object.
 

Static Public Member Functions

template<typename RelatedElement >
static auto static_pointer_cast (std::unique_ptr< RelatedElement > &&pointer) noexcept -> SubElementPointer
 Performs a static_cast on an std::unique_ptr.
 

Detailed Description

template<std::derived_from< SubElement > Element>
class xentara::workbench::skill::SubElementPointer< Element >

A pointer holding a sub element.

This class is similar to an std::unique_ptr, but has a copy constructor and assignment operator that copy the managed object, if it is copy constructible.

Member Typedef Documentation

◆ element_type

template<std::derived_from< SubElement > Element>
using xentara::workbench::skill::SubElementPointer< Element >::element_type = Element

The element type.

◆ pointer

template<std::derived_from< SubElement > Element>
using xentara::workbench::skill::SubElementPointer< Element >::pointer = Element *

The pointer type.

Constructor & Destructor Documentation

◆ SubElementPointer() [1/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( )
defaultnoexcept

Default constructor.

Constructs a null pointer

◆ SubElementPointer() [2/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( std::nullptr_t  )
noexcept

Constructor for a null pointer.

◆ SubElementPointer() [3/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( pointer  rawPointer)
explicitnoexcept

Constructor that takes ownership of a raw pointer.

Parameters
rawPointerThe raw pointer. Can be a null pointer.

◆ SubElementPointer() [4/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( const SubElementPointer< Element > &  other)

Copy constructor.

This constructor copies the managed object of the other pointer, if there is one.

◆ SubElementPointer() [5/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( SubElementPointer< Element > &&  other)
noexcept

Move constructor.

◆ SubElementPointer() [6/9]

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( std::unique_ptr< Element > &&  pointer)
noexcept

Constructor that takes ownership from a unique_ptr.

◆ SubElementPointer() [7/9]

template<std::derived_from< SubElement > Element>
template<typename... Arguments>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( std::in_place_t  ,
Arguments &&...  arguments 
)
explicit

In-place constructor.

◆ SubElementPointer() [8/9]

template<std::derived_from< SubElement > Element>
template<typename InitializerListElement , typename... Arguments>
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( std::in_place_t  ,
std::initializer_list< InitializerListElement >  initializerList,
Arguments &&...  arguments 
)
explicit

In-place constructor using an initializer list.

◆ SubElementPointer() [9/9]

template<std::derived_from< SubElement > Element>
template<typename NonEligibleType >
xentara::workbench::skill::SubElementPointer< Element >::SubElementPointer ( std::unique_ptr< NonEligibleType > &&  )
delete

Do not accept unique pointers to subclasses.

Member Function Documentation

◆ emplace() [1/2]

template<std::derived_from< SubElement > Element>
template<typename... Arguments>
auto xentara::workbench::skill::SubElementPointer< Element >::emplace ( Arguments &&...  arguments) -> Element &

Emplaces an object.

◆ emplace() [2/2]

template<std::derived_from< SubElement > Element>
template<typename InitializerListElement , typename... Arguments>
auto xentara::workbench::skill::SubElementPointer< Element >::emplace ( std::in_place_t  ,
std::initializer_list< InitializerListElement >  initializerList,
Arguments &&...  arguments 
) -> Element &

Emplaces an object using an initializer list.

◆ get()

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::get ( ) const -> pointer
noexcept

Gets a raw pointer to the object.

◆ operator bool()

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::operator bool ( ) const
explicitnoexcept

Checks whether the pointer has a managed object.

Returns
Return true if the pointer holds an object, or false if it i a null pointer.

◆ operator std::unique_ptr< Element >()

template<std::derived_from< SubElement > Element>
xentara::workbench::skill::SubElementPointer< Element >::operator std::unique_ptr< Element > ( ) &&
noexcept

Conversion to a unique_ptr.

◆ operator*()

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator* ( ) const -> std::add_lvalue_reference_t<Element>
noexcept

Accesses the object.

Precondition
Must not be called on a null pointer
Returns
A reference to the object

◆ operator->()

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator-> ( ) const -> pointer
noexcept

Accesses a member of the managed object.

Returns
A pointer to the object

◆ operator=() [1/5]

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator= ( const SubElementPointer< Element > &  rhs) -> SubElementPointer &

Assignment operator.

This constructor copies the managed object of the other pointer, if there is one.

◆ operator=() [2/5]

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator= ( std::nullptr_t  ) -> SubElementPointer &
noexcept

Assignment operator for a null pointer.

◆ operator=() [3/5]

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator= ( std::unique_ptr< Element > &&  rhs) -> SubElementPointer &
noexcept

Assignment operator that takes ownership from a unique_ptr.

◆ operator=() [4/5]

template<std::derived_from< SubElement > Element>
template<typename NonEligibleType >
auto xentara::workbench::skill::SubElementPointer< Element >::operator= ( std::unique_ptr< NonEligibleType > &&  ) -> SubElementPointer &=delete
delete

Do not accept unique pointers to subclasses.

◆ operator=() [5/5]

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::operator= ( SubElementPointer< Element > &&  rhs) -> SubElementPointer &
noexcept

Move assignment operator.

◆ release()

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::release ( ) -> pointer
noexcept

Gives up ownership of the managed object and returns it.

◆ reset() [1/2]

template<std::derived_from< SubElement > Element>
template<typename NonEligibleType >
auto xentara::workbench::skill::SubElementPointer< Element >::reset ( NonEligibleType *  ) -> void=delete
deletenoexcept

Do not accept raw pointers to subclasses.

◆ reset() [2/2]

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::reset ( pointer  rawPointer = pointer()) -> void
noexcept

Resets the pointer to a null pointer.

◆ static_pointer_cast()

template<std::derived_from< SubElement > Element>
template<typename RelatedElement >
static auto xentara::workbench::skill::SubElementPointer< Element >::static_pointer_cast ( std::unique_ptr< RelatedElement > &&  pointer) -> SubElementPointer
staticnoexcept

Performs a static_cast on an std::unique_ptr.

◆ swap()

template<std::derived_from< SubElement > Element>
auto xentara::workbench::skill::SubElementPointer< Element >::swap ( SubElementPointer< Element > &  other) -> void
noexcept

Swaps two pointers.