Open Search
    GenericDataTemplate< REFCOUNTED > Class Template Reference

    #include <genericdata.h>

    Detailed Description

    template<Bool REFCOUNTED>
    class maxon::GenericDataTemplate< REFCOUNTED >

    GenericDataTemplate wraps an object of arbitary type. It's similar to Data, but with the advantage that you don't need to register the type of the wrapped object as a DataType. This is bought with some restrictions:

    • GenericDataTemplate can be moved, but it can't be copied when REFCOUNTED is false.
    • You can obtain the wrapped object with Get, but you have to know it's exact type at compile-time.
    • You can't query the type at runtime. The destructor of the wrapped object will always be called properly.
    Template Parameters
    REFCOUNTEDTrue if reference counting shall be used for the wrapped object. In that case, multiple GenericDataTemplate instances can share a single object.

    Public Types

    using CopyType = typename std::conditional< REFCOUNTED, GenericDataTemplate, DummyParamType >::type
     

    Public Member Functions

     GenericDataTemplate ()=default
     
     GenericDataTemplate (GenericDataTemplate &&src)
     
     MAXON_OPERATOR_MOVE_ASSIGNMENT (GenericDataTemplate)
     
     GenericDataTemplate (const CopyType &src)
     
    GenericDataTemplateoperator= (const CopyType &src)
     
    void Reset ()
     
     ~GenericDataTemplate ()
     
    template<typename T >
    Result< void > Set (T &&value)
     
    Bool IsEmpty () const
     
    Bool IsPopulated () const
     
    template<typename T >
    const T & Get () const
     
    template<typename T >
    ConstIf< T, REFCOUNTED >::typeGet ()
     
    template<typename T >
    Result< typename ConstIf< T, REFCOUNTED >::type & > GetOrCreate ()
     
    template<typename T >
    Result< T & > Create ()
     
    const void * GetPointer () const
     
    ConstIf< void, REFCOUNTED >::typeGetPointer ()
     

    Private Member Functions

    void RemoveRef ()
     
    void AddRef ()
     

    Static Private Member Functions

    template<typename T >
    static void Free (GenericDataTemplate *v)
     

    Private Attributes

    void * _ptr
     
    void(* _free )(GenericDataTemplate *)
     

    Member Typedef Documentation

    ◆ CopyType

    using CopyType = typename std::conditional<REFCOUNTED, GenericDataTemplate, DummyParamType>::type

    Constructor & Destructor Documentation

    ◆ GenericDataTemplate() [1/3]

    GenericDataTemplate ( )
    default

    Constructs an empty GenericData.

    ◆ GenericDataTemplate() [2/3]

    GenericDataTemplate ( GenericDataTemplate< REFCOUNTED > &&  src)

    Constructs a GenericData by moving the contents of src to the new GenericData. src will be an empty GenericData afterwards.

    Parameters
    [in,out]srcThe source object.

    ◆ GenericDataTemplate() [3/3]

    GenericDataTemplate ( const CopyType src)
    explicit

    ◆ ~GenericDataTemplate()

    Destructs this GenericData. This frees any previously set value.

    Member Function Documentation

    ◆ MAXON_OPERATOR_MOVE_ASSIGNMENT()

    MAXON_OPERATOR_MOVE_ASSIGNMENT ( GenericDataTemplate< REFCOUNTED >  )

    ◆ operator=()

    GenericDataTemplate& operator= ( const CopyType src)

    ◆ Reset()

    void Reset ( )

    Resets this GenericData to an empty object. This frees any previously set value.

    ◆ Set()

    Result<void> Set ( T &&  value)

    Initializes this GenericData with value. This frees any previously set value at first.

    Parameters
    [in]valueThe value to wrap.
    Returns
    OK on success.

    ◆ IsEmpty()

    Bool IsEmpty ( ) const

    Checks if this GenericData is empty.

    Returns
    True if this GenericData has no wrapped value, false otherwise.

    ◆ IsPopulated()

    Bool IsPopulated ( ) const

    Checks if this GenericData has a wrapped value.

    Returns
    True if this GenericData has a wrapped value, false otherwise.

    ◆ Get() [1/2]

    const T& Get ( ) const

    Returns the wrapped value. The type T has to match the exact type of the wrapped value, otherwise the behaviour is undetermined. There is no check that the type matches.

    Template Parameters
    TThe type of the wrapped value.
    Returns
    The wrapped value of type T.

    ◆ Get() [2/2]

    ConstIf<T, REFCOUNTED>::type& Get ( )

    Returns the wrapped value. The type T has to match the exact type of the wrapped value, otherwise the behaviour is undetermined. There is no check that the type matches.

    Template Parameters
    TThe type of the wrapped value.
    Returns
    The wrapped value of type T.

    ◆ GetOrCreate()

    Result<typename ConstIf<T, REFCOUNTED>::type&> GetOrCreate ( )

    ◆ Create()

    Result<T&> Create ( )

    ◆ GetPointer() [1/2]

    const void* GetPointer ( ) const

    Returns a pointer to the wrapped value.

    Returns
    Pointer to the wrapped values.

    ◆ GetPointer() [2/2]

    ConstIf<void, REFCOUNTED>::type* GetPointer ( )

    Returns a pointer to the wrapped value.

    Returns
    Pointer to the wrapped values.

    ◆ Free()

    static void Free ( GenericDataTemplate< REFCOUNTED > *  v)
    staticprivate

    ◆ RemoveRef()

    void RemoveRef ( )
    private

    ◆ AddRef()

    void AddRef ( )
    private

    Member Data Documentation

    ◆ _ptr

    void* _ptr
    private

    ◆ _free

    void(* _free) (GenericDataTemplate *)
    private