SeqAn3  3.0.2
The Modern C++ library for sequence analysis.
seqan3::configuration< configs_t > Class Template Reference

Collection of elements to configure an algorithm. More...

#include <seqan3/core/algorithm/configuration.hpp>

+ Inheritance diagram for seqan3::configuration< configs_t >:

Public Member Functions

swap (T... args)
 
Constructor, destructor and assignment
constexpr configuration ()=default
 Defaulted.
 
constexpr configuration (configuration const &)=default
 Defaulted.
 
constexpr configuration (configuration &&)=default
 Defaulted.
 
constexpr configurationoperator= (configuration const &)=default
 Defaulted.
 
constexpr configurationoperator= (configuration &&)=default
 Defaulted.
 
 ~configuration ()=default
 Defaulted.
 
template<typename derived_t , typename value_t >
constexpr configuration (pipeable_config_element< derived_t, value_t > &&elem)
 Constructs a configuration from a single configuration element. More...
 
template<typename derived_t , typename value_t >
constexpr configuration (pipeable_config_element< derived_t, value_t > const &elem)
 Constructs a configuration from a single configuration element. More...
 
Capacity
constexpr size_t size () const noexcept
 Returns the number of contained config elements.
 

Friends

template<detail::config_element_specialisation ... _configs_t>
class configuration
 Friend declaration for other instances of the configuration.
 
Pipe operator
template<typename lhs_derived_t , typename lhs_value_t , typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > &&lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > &&rhs)
 Combines two seqan3::pipeable_config_element objects to a seqan3::configuration. More...
 
template<typename lhs_derived_t , typename lhs_value_t , typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > &&lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename lhs_derived_t , typename lhs_value_t , typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > const &lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > &&rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename lhs_derived_t , typename lhs_value_t , typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > const &lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (configuration &&lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > &&rhs)
 Combines a seqan3::configuration with a seqan3::pipeable_config_element. More...
 
template<typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (configuration const &lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > &&rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (configuration &&lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| (configuration const &lhs, pipeable_config_element< rhs_derived_t, rhs_value_t > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename lhs_derived_t , typename lhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > &&lhs, configuration &&rhs)
 Combines a seqan3::pipeable_config_element with a seqan3::configuration. More...
 
template<typename lhs_derived_t , typename lhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > &&lhs, configuration const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename lhs_derived_t , typename lhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > const &lhs, configuration &&rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename lhs_derived_t , typename lhs_value_t >
constexpr friend auto operator| (pipeable_config_element< lhs_derived_t, lhs_value_t > const &lhs, configuration const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename ... rhs_configs_t>
constexpr friend auto operator| (configuration &&lhs, configuration< rhs_configs_t... > &&rhs)
 Combines two seqan3::configuration objects. More...
 
template<typename ... rhs_configs_t>
constexpr friend auto operator| (configuration const &lhs, configuration< rhs_configs_t... > &&rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename ... rhs_configs_t>
constexpr friend auto operator| (configuration &&lhs, configuration< rhs_configs_t... > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename ... rhs_configs_t>
constexpr friend auto operator| (configuration const &lhs, configuration< rhs_configs_t... > const &rhs)
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 

Related Functions

(Note that these are not member functions.)

Type deduction guides
template<typename derived_t , typename value_t >
 configuration (pipeable_config_element< derived_t, value_t > &&) -> configuration< std::remove_cvref_t< derived_t >>
 Deduces the correct configuration element type from the passed seqan3::pipeable_config_element.
 
template<typename derived_t , typename value_t >
 configuration (pipeable_config_element< derived_t, value_t > const &) -> configuration< std::remove_cvref_t< derived_t >>
 Deduces the correct configuration element type from the passed seqan3::pipeable_config_element.
 
Tuple interface
template<template< typename ... > class query_t, typename ... configs_t>
constexpr auto & get (configuration< configs_t... > &config) noexcept
 Returns the stored element. More...
 

Observers

template<typename alternative_t >
constexpr decltype(auto) get_or (alternative_t &&alternative) &noexcept
 Returns the stored configuration element if present otherwise the given alternative. More...
 
template<typename alternative_t >
constexpr decltype(auto) get_or (alternative_t &&alternative) const &noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename alternative_t >
constexpr decltype(auto) get_or (alternative_t &&alternative) &&noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename alternative_t >
constexpr decltype(auto) get_or (alternative_t &&alternative) const &&noexcept
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 
template<typename query_t >
static constexpr bool exists () noexcept
 Checks if the given type exists in the tuple.
 
template<template< typename ... > typename query_t>
static constexpr bool exists () noexcept
 Checks if the given type exists in the tuple.
 

Modifiers

Note that modifications return new configurations and do not modify this.

template<typename query_t >
constexpr auto remove () const
 Remove a config element from the configuration. More...
 
template<template< typename ... > typename query_t>
constexpr auto remove () const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.
 

Detailed Description

template<detail::config_element_specialisation ... configs_t>
class seqan3::configuration< configs_t >

Collection of elements to configure an algorithm.

Template Parameters
configs_tTemplate parameter pack containing all configuration elements; Must model seqan3::detail::config_element_specialisation

This class provides a unified interface to create and query such configurations for a specific algorithm. It extends the standard tuple interface with some useful functions to modify and query the user configurations.

Constructor & Destructor Documentation

◆ configuration() [1/2]

template<detail::config_element_specialisation ... configs_t>
template<typename derived_t , typename value_t >
constexpr seqan3::configuration< configs_t >::configuration ( pipeable_config_element< derived_t, value_t > &&  elem)
inlineconstexpr

Constructs a configuration from a single configuration element.

Parameters
elemThe element to store.

◆ configuration() [2/2]

template<detail::config_element_specialisation ... configs_t>
template<typename derived_t , typename value_t >
constexpr seqan3::configuration< configs_t >::configuration ( pipeable_config_element< derived_t, value_t > const &  elem)
inlineconstexpr

Constructs a configuration from a single configuration element.

Parameters
elemThe element to store.

Member Function Documentation

◆ get_or()

template<detail::config_element_specialisation ... configs_t>
template<typename alternative_t >
constexpr decltype(auto) seqan3::configuration< configs_t >::get_or ( alternative_t &&  alternative) &
inlineconstexprnoexcept

Returns the stored configuration element if present otherwise the given alternative.

Template Parameters
alternative_tThe type of the configuration element that is queried.
Parameters
[in]alternativeThe alternative whose type is used to check for an existing configuration element.

Uses the type alternative_t of the given alternative to check if such an configuration element was already stored inside of the configuration. If no suitable candidate can be found the passed value alternative will be returned. If alternative_t is a class template, then any specialisation of this alternative type will be searched and returned if present.

Returns
The stored configuration element identified by alternative_t or the alternative if not present.

Example

// Initial setup used in the actual example:
enum struct my_id : int
{
bar_id,
foo_id
};
struct bar : public seqan3::pipeable_config_element<bar>
{
public:
float value{};
bar() = default;
bar(bar const &) = default;
bar(bar &&) = default;
bar & operator=(bar const &) = default;
bar & operator=(bar &&) = default;
~bar() = default;
bar(float v) : value{v}
{}
static constexpr my_id id{my_id::bar_id};
};
template <typename t>
class foo : public seqan3::pipeable_config_element<foo<t>>
{
public:
t value{};
foo() = default;
foo(foo const &) = default;
foo(foo &&) = default;
foo & operator=(foo const &) = default;
foo & operator=(foo &&) = default;
~foo() = default;
foo(t v) : value{std::move(v)}
{}
static constexpr my_id id{my_id::foo_id};
};
template <typename t>
foo(t) -> foo<t>;
int main()
{
seqan3::configuration my_cfg{foo{1}}; // Only foo<int> is present.
seqan3::debug_stream << my_cfg.get_or(foo{std::string{"hello"}}).value << '\n'; // finds foo<int> -> prints: 1
seqan3::debug_stream << my_cfg.get_or(bar{2.4}).value << '\n'; // bar not present -> prints: 2.4
}

Exception

no-throw guarantee.

Complexity

Constant time.

◆ remove()

template<detail::config_element_specialisation ... configs_t>
template<typename query_t >
constexpr auto seqan3::configuration< configs_t >::remove ( ) const
inlineconstexpr

Remove a config element from the configuration.

Template Parameters
query_tThe config element type to remove from the configuration.
Returns
A new configuration object without the config element identified by query_t.

Friends And Related Function Documentation

◆ operator| [1/4]

template<detail::config_element_specialisation ... configs_t>
template<typename ... rhs_configs_t>
constexpr friend auto operator| ( configuration< configs_t > &&  lhs,
configuration< rhs_configs_t... > &&  rhs 
)
friend

Combines two seqan3::configuration objects.

Template Parameters
rhs_configs_tA template parameter pack for the second seqan3::configuration operand.
Parameters
[in]lhsThe left hand operand.
[in]rhsThe right hand operand.
Returns
A new seqan3::configuration as the result of concatenating lhs and rhs.

◆ operator| [2/4]

template<detail::config_element_specialisation ... configs_t>
template<typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| ( configuration< configs_t > &&  lhs,
pipeable_config_element< rhs_derived_t, rhs_value_t > &&  rhs 
)
friend

Combines a seqan3::configuration with a seqan3::pipeable_config_element.

Template Parameters
rhs_derived_tThe derived type of the right hand side operand.
rhs_value_tThe value type of the right hand side operand.
Parameters
[in]lhsThe left hand operand.
[in]rhsThe right hand operand.
Returns
A new seqan3::configuration adding rhs to the passed lhs object.

◆ operator| [3/4]

template<detail::config_element_specialisation ... configs_t>
template<typename lhs_derived_t , typename lhs_value_t >
constexpr friend auto operator| ( pipeable_config_element< lhs_derived_t, lhs_value_t > &&  lhs,
configuration< configs_t > &&  rhs 
)
friend

Combines a seqan3::pipeable_config_element with a seqan3::configuration.

Template Parameters
lhs_derived_tThe derived type of the left hand side operand.
lhs_value_tThe value type of the left hand side operand.
Parameters
[in]lhsThe left hand operand.
[in]rhsThe right hand operand.
Returns
A new seqan3::configuration adding lhs to the passed rhs object.

◆ operator| [4/4]

template<detail::config_element_specialisation ... configs_t>
template<typename lhs_derived_t , typename lhs_value_t , typename rhs_derived_t , typename rhs_value_t >
constexpr friend auto operator| ( pipeable_config_element< lhs_derived_t, lhs_value_t > &&  lhs,
pipeable_config_element< rhs_derived_t, rhs_value_t > &&  rhs 
)
friend

Combines two seqan3::pipeable_config_element objects to a seqan3::configuration.

Template Parameters
lhs_derived_tThe derived type of the left hand side operand.
lhs_value_tThe value type of the left hand side operand.
rhs_derived_tThe derived type of the right hand side operand.
rhs_value_tThe value type of the right hand side operand.
Parameters
[in]lhsThe left hand operand.
[in]rhsThe right hand operand.
Returns
A new seqan3::configuration containing lhs and rhs.

The documentation for this class was generated from the following file:
debug_stream.hpp
Provides seqan3::debug_stream and related types.
std::string
configuration.hpp
Provides seqan3::detail::configuration and utility functions.
pipeable_config_element.hpp
Provides seqan3::pipeable_config_element.
seqan3::configuration
Collection of elements to configure an algorithm.
Definition: configuration.hpp:82
seqan3::views::move
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:68
seqan3::configuration::operator=
constexpr configuration & operator=(configuration const &)=default
Defaulted.
seqan3::debug_stream
debug_stream_type debug_stream
A global instance of seqan3::debug_stream_type.
Definition: debug_stream.hpp:42