Botan 3.3.0
Crypto and TLS for C&
Public Types | Public Member Functions | List of all members
Botan::Strong< T, TagTypeT, Capabilities > Class Template Reference

#include <strong_type.h>

Inheritance diagram for Botan::Strong< T, TagTypeT, Capabilities >:
Botan::detail::Strong_Adapter< T > Botan::detail::Strong_Base< T > Botan::detail::Strong_Base< T >

Public Types

using const_iterator = typename T::const_iterator
 
using const_pointer = typename T::const_pointer
 
using iterator = typename T::iterator
 
using pointer = typename T::pointer
 
using size_type = typename T::size_type
 
using value_type = typename T::value_type
 
using wrapped_type = T
 

Public Member Functions

decltype(auto) begin () const noexcept(noexcept(this->get().begin()))
 
decltype(auto) begin () noexcept(noexcept(this->get().begin()))
 
decltype(auto) cbegin () const noexcept(noexcept(this->get().cbegin()))
 
decltype(auto) cbegin () noexcept(noexcept(this->get().cbegin()))
 
decltype(auto) cend () const noexcept(noexcept(this->get().cend()))
 
decltype(auto) cend () noexcept(noexcept(this->get().cend()))
 
decltype(auto) data () const noexcept(noexcept(this->get().data()))
 
decltype(auto) data () noexcept(noexcept(this->get().data()))
 
bool empty () const noexcept(noexcept(this->get().empty()))
 
decltype(auto) end () const noexcept(noexcept(this->get().end()))
 
decltype(auto) end () noexcept(noexcept(this->get().end()))
 
Tget ()
 
const Tget () const
 
decltype(auto) operator[] (size_type i) const noexcept(noexcept(this->get().operator[](i)))
 
decltype(auto) operator[] (size_type i) noexcept(noexcept(this->get().operator[](i)))
 
void resize (size_type size) noexcept(noexcept(this->get().resize(size)))
 
size_type size () const noexcept(noexcept(this->get().size()))
 

Detailed Description

template<typename T, typename TagTypeT, typename... Capabilities>
class Botan::Strong< T, TagTypeT, Capabilities >

Strong types can be used as wrappers around common types to provide compile time semantics. They usually contribute to more maintainable and less error-prone code especially when dealing with function parameters.

Internally, this provides adapters so that the wrapping strong type behaves as much as the underlying type as possible and desirable.

This implementation was inspired by: https://stackoverflow.com/a/69030899

Definition at line 162 of file strong_type.h.

Member Typedef Documentation

◆ const_iterator

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::const_iterator = typename T::const_iterator
inherited

Definition at line 73 of file strong_type.h.

◆ const_pointer

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::const_pointer = typename T::const_pointer
inherited

Definition at line 75 of file strong_type.h.

◆ iterator

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::iterator = typename T::iterator
inherited

Definition at line 72 of file strong_type.h.

◆ pointer

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::pointer = typename T::pointer
inherited

Definition at line 74 of file strong_type.h.

◆ size_type

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::size_type = typename T::size_type
inherited

Definition at line 71 of file strong_type.h.

◆ value_type

template<std::integral T>
using Botan::detail::Strong_Adapter< T >::value_type = typename T::value_type
inherited

Definition at line 70 of file strong_type.h.

◆ wrapped_type

template<typename T >
using Botan::detail::Strong_Base< T >::wrapped_type = T
inherited

Definition at line 39 of file strong_type.h.

Member Function Documentation

◆ begin() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::begin ( ) const
inlinenoexceptinherited

Definition at line 101 of file strong_type.h.

101{ return this->get().begin(); }

References Botan::detail::Strong_Base< T >::get().

◆ begin() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::begin ( )
inlinenoexceptinherited

Definition at line 99 of file strong_type.h.

99{ return this->get().begin(); }

References Botan::detail::Strong_Base< T >::get().

Referenced by Botan::wots_sign_and_pkgen().

◆ cbegin() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::cbegin ( ) const
inlinenoexceptinherited

Definition at line 109 of file strong_type.h.

109{ return this->get().cbegin(); }

References Botan::detail::Strong_Base< T >::get().

◆ cbegin() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::cbegin ( )
inlinenoexceptinherited

Definition at line 107 of file strong_type.h.

107{ return this->get().cbegin(); }

References Botan::detail::Strong_Base< T >::get().

◆ cend() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::cend ( ) const
inlinenoexceptinherited

Definition at line 113 of file strong_type.h.

113{ return this->get().cend(); }

References Botan::detail::Strong_Base< T >::get().

◆ cend() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::cend ( )
inlinenoexceptinherited

Definition at line 111 of file strong_type.h.

111{ return this->get().cend(); }

References Botan::detail::Strong_Base< T >::get().

◆ data() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::data ( ) const
inlinenoexceptinherited

Definition at line 123 of file strong_type.h.

125 {
126 return this->get().data();
127 }

References Botan::detail::Strong_Base< T >::get().

◆ data() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::data ( )
inlinenoexceptinherited

Definition at line 117 of file strong_type.h.

119 {
120 return this->get().data();
121 }

References Botan::detail::Strong_Base< T >::get().

Referenced by Botan::FrodoMatrix::serialize().

◆ empty()

template<std::integral T>
bool Botan::detail::Strong_Adapter< T >::empty ( ) const
inlinenoexceptinherited

Definition at line 129 of file strong_type.h.

131 {
132 return this->get().empty();
133 }

References Botan::detail::Strong_Base< T >::get().

◆ end() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::end ( ) const
inlinenoexceptinherited

Definition at line 105 of file strong_type.h.

105{ return this->get().end(); }

References Botan::detail::Strong_Base< T >::get().

◆ end() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::end ( )
inlinenoexceptinherited

Definition at line 103 of file strong_type.h.

103{ return this->get().end(); }

References Botan::detail::Strong_Base< T >::get().

◆ get() [1/2]

template<typename T >
T & Botan::detail::Strong_Base< T >::get ( )
inlineinherited

Definition at line 50 of file strong_type.h.

50{ return m_value; }

Referenced by Botan::detail::Strong_Adapter< T >::begin(), Botan::detail::Strong_Adapter< T >::begin(), Botan::detail::Strong_Adapter< T >::cbegin(), Botan::detail::Strong_Adapter< T >::cbegin(), Botan::detail::Strong_Adapter< T >::cend(), Botan::detail::Strong_Adapter< T >::cend(), Botan::chain_lengths(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Strong_Adapter< T >::data(), Botan::detail::Strong_Adapter< T >::empty(), Botan::detail::Strong_Adapter< T >::end(), Botan::detail::Strong_Adapter< T >::end(), Botan::ht_sign(), Botan::ht_verify(), Botan::operator&(), Botan::operator&(), Botan::operator&(), Botan::operator&=(), Botan::operator&=(), Botan::operator*(), Botan::operator*(), Botan::operator*(), Botan::operator*=(), Botan::operator*=(), Botan::operator+(), Botan::operator+(), Botan::operator+(), Botan::operator++(), Botan::operator++(), Botan::operator+=(), Botan::operator+=(), Botan::operator-(), Botan::operator-(), Botan::operator-(), Botan::operator--(), Botan::operator--(), Botan::operator-=(), Botan::operator-=(), Botan::operator/(), Botan::operator/(), Botan::operator/(), Botan::operator/=(), Botan::operator/=(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<(), Botan::operator<<=(), Botan::operator<<=(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator<=>(), Botan::operator==(), Botan::operator==(), Botan::operator==(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>(), Botan::operator>>=(), Botan::operator>>=(), Botan::detail::Strong_Adapter< T >::operator[](), Botan::detail::Strong_Adapter< T >::operator[](), Botan::operator^(), Botan::operator^(), Botan::operator^(), Botan::operator^=(), Botan::operator^=(), Botan::operator|(), Botan::operator|(), Botan::operator|(), Botan::operator|=(), Botan::operator|=(), Botan::TLS::Cipher_State::psk(), Botan::detail::Strong_Adapter< T >::resize(), Botan::TLS::New_Session_Ticket_12::serialize(), Botan::TLS::New_Session_Ticket_13::serialize(), Botan::Sphincs_Address::set_chain(), Botan::Sphincs_Address::set_hash(), Botan::Sphincs_Address::set_keypair(), Botan::Sphincs_Address::set_layer(), Botan::Sphincs_Address::set_tree(), Botan::Sphincs_Address::set_tree_height(), Botan::Sphincs_Address::set_tree_index(), Botan::detail::Strong_Adapter< T >::size(), and Botan::wots_public_key_from_signature().

◆ get() [2/2]

template<typename T >
const T & Botan::detail::Strong_Base< T >::get ( ) const
inlineinherited

Definition at line 52 of file strong_type.h.

52{ return m_value; }

◆ operator[]() [1/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::operator[] ( size_type i) const
inlinenoexceptinherited

Definition at line 141 of file strong_type.h.

141 {
142 return this->get()[i];
143 }

References Botan::detail::Strong_Base< T >::get().

◆ operator[]() [2/2]

template<std::integral T>
decltype(auto) Botan::detail::Strong_Adapter< T >::operator[] ( size_type i)
inlinenoexceptinherited

Definition at line 145 of file strong_type.h.

145{ return this->get()[i]; }

References Botan::detail::Strong_Base< T >::get().

◆ resize()

template<std::integral T>
void Botan::detail::Strong_Adapter< T >::resize ( size_type size)
inlinenoexceptinherited

Definition at line 135 of file strong_type.h.

137 {
138 this->get().resize(size);
139 }
size_type size() const noexcept(noexcept(this->get().size()))

References Botan::detail::Strong_Base< T >::get().

◆ size()

template<std::integral T>
size_type Botan::detail::Strong_Adapter< T >::size ( ) const
inlinenoexceptinherited

Definition at line 115 of file strong_type.h.

115{ return this->get().size(); }

References Botan::detail::Strong_Base< T >::get().


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