Botan 3.8.1
Crypto and TLS for C&
Botan::CT::Option< T > Class Template Referencefinal

#include <ct_utils.h>

Public Member Functions

constexpr std::optional< T > as_optional_vartime () const
 
constexpr Choice has_value () const
 Return true if this Option contains a value.
 
constexpr CT::Option< T > operator&& (CT::Choice also)
 Return a new CT::Option that is set if also is set as well.
 
constexpr Option ()
 Construct an unset option with a default inner value.
 
constexpr Option (T v)
 Construct a set option with the provided value.
 
constexpr Option (T v, Choice valid)
 Construct an Option which contains the specified value, and is set or not.
 
template<std::invocable< const T & > F>
constexpr auto transform (F f) const -> Option< std::remove_cvref_t< std::invoke_result_t< F, const T & > > >
 
constexpr const T & value () const
 Either returns the value or throws an exception.
 
constexpr T value_or (T other) const
 
constexpr T value_or (T other) const
 

Detailed Description

template<typename T>
class Botan::CT::Option< T >

A CT::Option<T> is either a valid T, or not

To maintain constant time behavior a value must always be stored. A CT::Choice tracks if the value is valid or not. It is not possible to access the inner value if the Choice is unset.

Definition at line 656 of file ct_utils.h.

Constructor & Destructor Documentation

◆ Option() [1/3]

template<typename T>
Botan::CT::Option< T >::Option ( T v,
Choice valid )
inlineconstexpr

Construct an Option which contains the specified value, and is set or not.

Definition at line 659 of file ct_utils.h.

659: m_has_value(valid), m_value(std::move(v)) {}

Referenced by Option(), Option(), and transform().

◆ Option() [2/3]

template<typename T>
Botan::CT::Option< T >::Option ( T v)
inlineconstexpr

Construct a set option with the provided value.

Definition at line 662 of file ct_utils.h.

constexpr Option()
Construct an unset option with a default inner value.
Definition ct_utils.h:665

References Option().

◆ Option() [3/3]

template<typename T>
Botan::CT::Option< T >::Option ( )
inlineconstexpr

Construct an unset option with a default inner value.

Definition at line 665 of file ct_utils.h.

667 : Option(T(), Choice::no()) {}

References Option().

Member Function Documentation

◆ as_optional_vartime()

template<typename T>
std::optional< T > Botan::CT::Option< T >::as_optional_vartime ( ) const
inlineconstexpr

Convert this Option into a std::optional

This is not constant time, leaking if the Option had a value or not

Definition at line 716 of file ct_utils.h.

716 {
717 if(m_has_value.as_bool()) {
718 return {m_value};
719 } else {
720 return {};
721 }
722 }

◆ has_value()

template<typename T>
Choice Botan::CT::Option< T >::has_value ( ) const
inlineconstexpr

Return true if this Option contains a value.

Definition at line 670 of file ct_utils.h.

670{ return m_has_value; }

◆ operator&&()

template<typename T>
CT::Option< T > Botan::CT::Option< T >::operator&& ( CT::Choice also)
inlineconstexpr

Return a new CT::Option that is set if also is set as well.

Definition at line 725 of file ct_utils.h.

725{ return CT::Option<T>(m_value, m_has_value && also); }

◆ transform()

template<typename T>
template<std::invocable< const T & > F>
auto Botan::CT::Option< T >::transform ( F f) const -> Option<std::remove_cvref_t<std::invoke_result_t<F, const T&>>>
inlineconstexpr

Apply a function to the inner value and return a new Option which contains that value. This is constant time only if f is.

Note
The function will always be called, even if the Option is None. It must be prepared to handle any possible state of T.

Definition at line 680 of file ct_utils.h.

680 {
681 return {f(m_value), m_has_value};
682 }

References Option().

◆ value()

template<typename T>
const T & Botan::CT::Option< T >::value ( ) const
inlineconstexpr

Either returns the value or throws an exception.

Definition at line 685 of file ct_utils.h.

685 {
686 BOTAN_STATE_CHECK(m_has_value.as_bool());
687 return m_value;
688 }
#define BOTAN_STATE_CHECK(expr)
Definition assert.h:43

References BOTAN_STATE_CHECK.

◆ value_or() [1/2]

template<typename T>
T Botan::CT::Option< T >::value_or ( T other) const
inlineconstexpr

Returns either the inner value or the alternative, in constant time

This variant is used for types which explicitly define a function conditional_assign which takes a CT::Choice as the conditional.

Definition at line 694 of file ct_utils.h.

696 {
697 other.conditional_assign(m_has_value, m_value);
698 return other;
699 }

◆ value_or() [2/2]

template<typename T>
T Botan::CT::Option< T >::value_or ( T other) const
inlineconstexpr

Returns either the inner value or the alternative, in constant time

This variant is used for integer types where CT::Mask can perform a constant time selection

Definition at line 705 of file ct_utils.h.

707 {
708 auto mask = CT::Mask<T>::from_choice(m_has_value);
709 return mask.select(m_value, other);
710 }
static constexpr Mask< T > from_choice(Choice c)
Definition ct_utils.h:414

References Botan::CT::Mask< T >::from_choice().


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