Kanzi 4.0.0-beta2
kanzi::FlatOptional< T, sentinel, typename > Class Template Reference

Optional-like lightweight wrapper around type T with no space overhead. More...

#include <kanzi/core/util/flat_optional.hpp>

Public Types

using ValueType
 Alias for underlying type.
 

Public Member Functions

KZ_NO_DISCARD optional< TcreateOptional () const noexcept
 Creates a kanzi::optional copy of the stored value.
 
 FlatOptional () noexcept
 Constructor.
 
template<typename U , typename = enable_if_t<is_convertible_v<decay_t<U>, T>>>
 FlatOptional (U &&value) noexcept
 Constructor.
 
KZ_NO_DISCARD bool hasValue () const noexcept
 Checks if a value is stored.
 
KZ_NO_DISCARD operator bool () const noexcept
 Conversion operator to bool.
 
KZ_NO_DISCARD T && operator* () &&noexcept
 Provides access to stored value via rvalue reference.
 
KZ_NO_DISCARD Toperator* () &noexcept
 Provides access to stored value via reference.
 
KZ_NO_DISCARD const T && operator* () const &&noexcept
 Provides access to stored value via const rvalue reference.
 
KZ_NO_DISCARD const Toperator* () const &noexcept
 Provides access to stored value via const reference.
 
KZ_NO_DISCARD const Toperator-> () const noexcept
 Provides access to stored value via const pointer.
 
KZ_NO_DISCARD Toperator-> () noexcept
 Provides access to stored value via pointer.
 
void reset () noexcept
 Replaces stored value with sentinel value.
 
template<typename U , typename = enable_if_t<is_convertible_v<decay_t<U>, T>>>
void reset (U &&newValue) noexcept
 Stores a new value inside.
 
void swap (FlatOptional &other)
 Swap function.
 
KZ_NO_DISCARD optional< TtoOptional () &&noexcept
 Converts FlatOptional to kanzi::optional.
 

Static Public Member Functions

static constexpr T getSentinel () noexcept
 Gets sentinel value that can be used to represent an empty state.
 

Protected Attributes

T m_value
 Stored value.
 

Detailed Description

template<typename T, T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
class kanzi::FlatOptional< T, sentinel, typename >

Optional-like lightweight wrapper around type T with no space overhead.

Uses sentinel value to represent empty state.

Template Parameters
TType of the value.
sentinelSentinel value that can be used to represent empty state.
Since
Kanzi 4.0.0

Member Typedef Documentation

◆ ValueType

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
using kanzi::FlatOptional< T, sentinel, typename >::ValueType

Alias for underlying type.

Constructor & Destructor Documentation

◆ FlatOptional() [1/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
kanzi::FlatOptional< T, sentinel, typename >::FlatOptional ( )
inlineexplicitnoexcept

Constructor.

Creates FlatOptional with empty state.

◆ FlatOptional() [2/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
template<typename U , typename = enable_if_t<is_convertible_v<decay_t<U>, T>>>
kanzi::FlatOptional< T, sentinel, typename >::FlatOptional ( U && value)
inlineexplicitnoexcept

Constructor.

Template Parameters
UDeduced type for universal reference of T.
Parameters
valueValue to store.

Member Function Documentation

◆ swap()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
void kanzi::FlatOptional< T, sentinel, typename >::swap ( FlatOptional< T, sentinel, typename > & other)
inline

Swap function.

Parameters
otherSecond object to swap with.

◆ operator*() [1/4]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD T & kanzi::FlatOptional< T, sentinel, typename >::operator* ( ) &
inlinenoexcept

Provides access to stored value via reference.

Returns
Reference to stored value.

◆ operator*() [2/4]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD const T & kanzi::FlatOptional< T, sentinel, typename >::operator* ( ) const &
inlinenoexcept

Provides access to stored value via const reference.

Returns
Const reference to stored value.

◆ operator*() [3/4]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD T && kanzi::FlatOptional< T, sentinel, typename >::operator* ( ) &&
inlinenoexcept

Provides access to stored value via rvalue reference.

Returns
Rvalue reference to stored value.

◆ operator*() [4/4]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD const T && kanzi::FlatOptional< T, sentinel, typename >::operator* ( ) const &&
inlinenoexcept

Provides access to stored value via const rvalue reference.

Returns
Const rvalue reference to stored value.

◆ operator->() [1/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD T * kanzi::FlatOptional< T, sentinel, typename >::operator-> ( )
inlinenoexcept

Provides access to stored value via pointer.

Returns
Pointer to stored value.

◆ operator->() [2/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD const T * kanzi::FlatOptional< T, sentinel, typename >::operator-> ( ) const
inlinenoexcept

Provides access to stored value via const pointer.

Returns
Const pointer to stored value.

◆ operator bool()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD kanzi::FlatOptional< T, sentinel, typename >::operator bool ( ) const
inlineexplicitnoexcept

Conversion operator to bool.

Returns
If holds a value, true, otherwise false.

◆ hasValue()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD bool kanzi::FlatOptional< T, sentinel, typename >::hasValue ( ) const
inlinenoexcept

Checks if a value is stored.

Returns
If holds a value, true, otherwise false.

◆ getSentinel()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
static constexpr T kanzi::FlatOptional< T, sentinel, typename >::getSentinel ( )
inlinestaticconstexprnoexcept

Gets sentinel value that can be used to represent an empty state.

Returns
Sentinel value.

◆ reset() [1/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
void kanzi::FlatOptional< T, sentinel, typename >::reset ( )
inlinenoexcept

Replaces stored value with sentinel value.

◆ reset() [2/2]

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
template<typename U , typename = enable_if_t<is_convertible_v<decay_t<U>, T>>>
void kanzi::FlatOptional< T, sentinel, typename >::reset ( U && newValue)
inlinenoexcept

Stores a new value inside.

Template Parameters
UDeduced type for universal reference of T.
Parameters
newValueNew value to store.

◆ toOptional()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD optional< T > kanzi::FlatOptional< T, sentinel, typename >::toOptional ( ) &&
inlinenoexcept

Converts FlatOptional to kanzi::optional.

Use by moving the value first:

kanzi::optional<int> kzOpt = kanzi::move(flatOpt).toOptional();
string logArgumentToString(const JNIError &jniError)
Used by logging system to convert legacy exception type objects to string.
Definition jni_error.hpp:25
Optional-like lightweight wrapper around type T with no space overhead.
Definition flat_optional.hpp:33
Return values
nulloptFlatOptional represented an empty value.
Returns
kanzi::optional equivalent.

◆ createOptional()

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
KZ_NO_DISCARD optional< T > kanzi::FlatOptional< T, sentinel, typename >::createOptional ( ) const
inlinenoexcept

Creates a kanzi::optional copy of the stored value.

Return values
nulloptFlatOptional represented an empty value.
Returns
kanzi::optional equivalent.

Member Data Documentation

◆ m_value

template<typename T , T sentinel, typename = enable_if_t<satisfiesFlatOptional<T>>>
T kanzi::FlatOptional< T, sentinel, typename >::m_value
protected

Stored value.


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