SeqAn3 3.2.0-rc.1
The Modern C++ library for sequence analysis.
Core

Provides core functionality used by multiple modules. More...

+ Collaboration diagram for Core:

Modules

 Algorithm
 Provides core functionality used for algorithms.
 
 Concept
 Provides core concepts.
 
 Configuration
 Provides core functionality used to configure configurations.
 
 Debug Stream
 Provides core functionality used to print seqan3 and std types.
 
 Range
 Provides seqan3 general purpose range functionality.
 

Classes

struct  seqan3::detail::customisation_point_object< derived_t, max_priority >
 A CRTP base-class that defines a customisation_point_object (CPO). More...
 
struct  seqan3::detail::deferred_crtp_base< crtp_base, args_t >
 An invocable wrapper that defers the instantiation of a crtp_base class. More...
 
struct  seqan3::detail::deferred_crtp_base_vargs< crtp_base, args >
 An invocable wrapper that defers the instantiation of a crtp_base class. More...
 
interface  derived_from_strong_type
 Defines the requirements of a seqan::detail::strong_type specialisation. More...
 
struct  seqan3::detail::empty_type
 An empty class type used in meta programming. More...
 
struct  seqan3::detail::is_class_template_declarable_with< query_t, args_t >
 An unary type trait that tests whether a template class can be declared with the given template type parameters. More...
 
struct  seqan3::detail::is_type_specialisation_of< source_t, target_template >
 Determines whether a source_type is a specialisation of another template. More...
 
struct  seqan3::detail::is_value_specialisation_of< source_t, target_template >
 Determines whether a source_type is a specialisation of another template. More...
 
struct  seqan3::detail::iter_pointer< it_t >
 This is like std::iter_value_t, but for the pointer type. More...
 
struct  seqan3::detail::maybe_inherited_iterator_category< underling_iterator_t >
 This handles more cases than maybe_iterator_category if you inherit the underling_iterator_t. More...
 
struct  seqan3::detail::maybe_iterator_category< underlying_iterator_t >
 Defines iterator_category member if underlying_iterator_t has a valid std::iterator_traits::iterator_category overload. More...
 
class  seqan3::detail::persist_fn
 [adaptor_def] More...
 
struct  seqan3::detail::priority_tag< I >
 A tag that allows controlled overload resolution via implicit base conversion rules. More...
 
class  seqan3::detail::strong_type< value_t, derived_t, skills_ >
 CRTP base class to declare a strong typedef for a regular type to avoid ambiguous parameter settings in function calls. More...
 
interface  template_specialisation_of
 Provides concept seqan3::template_specialisation_of<mytype, [...]> for checking the type specialisation of some type with a given template, for example a specialized type_list<float> with the type_list template. More...
 
struct  seqan3::detail::transfer_template_args_onto< source_template< source_arg_types... >, target_template >
 Extracts a type template's type arguments and specialises another template with them. More...
 
struct  seqan3::detail::transfer_template_vargs_onto< source_template< source_varg_types... >, target_template >
 Extracts a type template's non-type arguments and specialises another template with them. More...
 
struct  seqan3::detail::transfer_type_modifier_onto< source_t, target_t >
 Transfers the type modifier &, && and const (and any combination) to the target type. More...
 
struct  seqan3::detail::valid_template_spec_or< fallback_t, templ_t, spec_t >
 Exposes templ_t<spec_t...> if that is valid, otherwise fallback_t. More...
 
class  seqan3::detail::view_persist< urng_t >
 The type returned by seqan3::detail::persist. More...
 

Macros

#define SEQAN3_CPO_OVERLOAD(...)
 A macro that helps to define a seqan3::detail::customisation_point_object. More...
 
#define SEQAN3_CPO_OVERLOAD_BODY(...)   noexcept(auto) { return __VA_ARGS__; }
 A macro helper for SEQAN3_CPO_OVERLOAD. More...
 
#define SEQAN3_WITH_CEREAL   0
 Whether CEREAL support is available or not.
 
#define SEQAN3_WITH_LEMON   0
 Whether Lemon support is available or not.
 

Typedefs

template<typename deferred_crtp_base_t , typename derived_t >
using seqan3::detail::invoke_deferred_crtp_base = typename deferred_crtp_base_t::template invoke< derived_t >
 Template alias to instantiate the deferred crtp base with the derived class. More...
 
template<typename it_t >
using seqan3::detail::iter_pointer_t = typename iter_pointer< it_t >::type
 Return the pointer type of the input type (transformation_trait shortcut). More...
 
template<typename it_t >
using seqan3::detail::iterator_concept_tag_t = std::conditional_t< std::contiguous_iterator< it_t >, std::contiguous_iterator_tag, std::conditional_t< std::random_access_iterator< it_t >, std::random_access_iterator_tag, std::conditional_t< std::bidirectional_iterator< it_t >, std::bidirectional_iterator_tag, std::conditional_t< std::forward_iterator< it_t >, std::forward_iterator_tag, std::conditional_t< std::input_iterator< it_t >, std::input_iterator_tag, std::output_iterator_tag > > > > >
 Exposes the iterator_concept from the modelled concept. More...
 
using seqan3::semiregular_box = ::ranges::semiregular_box
 Utility wrapper that behaves like std::optional but makes the type conform with the std::semiregular concept. Imported from ranges::semiregular_box. More...
 
using seqan3::semiregular_box_t = ::ranges::semiregular_box_t
 Utility transformation trait to get a wrapper type that models std::semiregular. Imported from ranges::semiregular_box_t. More...
 
template<typename t >
using seqan3::detail::strip_type_identity_t = std::conditional_t< is_type_specialisation_of_v< t, std::type_identity >, transformation_trait_or_t< t, void >, t >
 A transformation trait shortcut that returns the type inside a std::type_identity or the type itself. More...
 
template<typename source_type , template< typename ... > typename target_template>
using seqan3::detail::transfer_template_args_onto_t = typename transfer_template_args_onto< source_type, target_template >::type
 Shortcut for seqan3::detail::transfer_template_args_onto (transformation_trait shortcut). More...
 
template<typename source_type , template< auto ... > typename target_template>
using seqan3::detail::transfer_template_vargs_onto_t = typename transfer_template_vargs_onto< source_type, target_template >::type
 Shortcut for seqan3::detail::transfer_template_vargs_onto (transformation_trait shortcut). More...
 
template<typename fallback_t , template< typename ... > typename templ_t, typename ... spec_t>
using seqan3::detail::valid_template_spec_or_t = typename valid_template_spec_or< fallback_t, templ_t, spec_t... >::type
 Helper for seqan3::detail::valid_template_spec_or (transformation_trait shortcut). More...
 

Enumerations

enum struct  seqan3::detail::strong_type_skill {
  none = 0 , add = 1 << 0 , subtract = 1 << 1 , multiply = 1 << 2 ,
  divide = 1 << 3 , modulo = 1 << 4 , bitwise_and = 1 << 5 , bitwise_or = 1 << 6 ,
  bitwise_xor = 1 << 7 , bitwise_not = 1 << 8 , bitwise_lshift = 1 << 9 , bitwise_rshift = 1 << 10 ,
  logical_and = 1 << 11 , logical_or = 1 << 12 , logical_not = 1 << 13 , increment = 1 << 14 ,
  decrement = 1 << 15 , convert = 1 << 16 , comparable = 1 << 17 , additive = add | subtract ,
  multiplicative = multiply | divide | modulo , bitwise_logic = bitwise_and | bitwise_or | bitwise_xor | bitwise_not , bitwise_shift = bitwise_lshift | bitwise_rshift , logic = logical_and | logical_or | logical_not
}
 Enum class for all supported operations that can be added to a seqan3::detail::strong_type. More...
 

Variables

template<typename t >
constexpr bool seqan3::add_enum_bitwise_operators = false
 Set to true for a scoped enum to have binary operators overloaded. More...
 
template<typename t >
constexpr bool seqan3::detail::is_type_list_of_sequence_file_input_formats_v = false
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::sequence_file_input_format [default is false]. More...
 
template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_sequence_file_input_formats_v< type_list< ts... > >
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::sequence_file_input_format [overload]. More...
 
template<typename t >
constexpr bool seqan3::detail::is_type_list_of_structure_file_input_formats_v = false
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_input_format [default is false]. More...
 
template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_structure_file_input_formats_v< type_list< ts... > > = (structure_file_input_format<ts> && ...)
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_input_format [overload]. More...
 
template<typename t >
constexpr bool seqan3::detail::is_type_list_of_structure_file_output_formats_v = false
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_output_format [default is false]. More...
 
template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_structure_file_output_formats_v< type_list< ts... > > = (structure_file_output_format<ts> && ...)
 Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_output_format [overload]. More...
 
auto constexpr seqan3::detail::persist
 [adaptor_def] More...
 

Detailed Description

Provides core functionality used by multiple modules.

The core module contains concepts, functions and some classes that are used by multiple other modules, but that usually are not relevant to most users of the library.

Macro Definition Documentation

◆ SEQAN3_CPO_OVERLOAD

#define SEQAN3_CPO_OVERLOAD (   ...)
Value:
cpo_overload(__VA_ARGS__) \
SEQAN3_CPO_OVERLOAD_BODY

A macro that helps to define a seqan3::detail::customisation_point_object.

DEV

Expands to a function definition with the name cpo_overload.

It puts the given expression via SEQAN3_CPO_OVERLOAD_BODY as a single return statement in the function body, the noexcept declaration and requires declaration.

template <typename range_t>
requires true // further constraints
static constexpr auto SEQAN3_CPO_OVERLOAD(seqan3::detail::priority_tag<1>, range_t && range)
(
/*return*/ std::forward<range_t>(range).begin() /*;*/
);
#define SEQAN3_CPO_OVERLOAD(...)
A macro that helps to define a seqan3::detail::customisation_point_object.
Definition: customisation_point.hpp:102
A tag that allows controlled overload resolution via implicit base conversion rules.
Definition: customisation_point.hpp:32

expands to something similar to

template <typename range_t>
requires true // further constraints
static constexpr auto cpo_overload(seqan3::detail::priority_tag<1>, range_t && range)
noexcept(noexcept(std::forward<range_t>(range).begin()))
requires requires()
{
{std::forward<range_t>(range).begin()};
}
{
return std::forward<range_t>(range).begin();
}

◆ SEQAN3_CPO_OVERLOAD_BODY

#define SEQAN3_CPO_OVERLOAD_BODY (   ...)    noexcept(auto) { return __VA_ARGS__; }

A macro helper for SEQAN3_CPO_OVERLOAD.

DEV

Please note that in order to allow a semicolon at the end when using this macro, i.e.

(
...
);
#define SEQAN3_CPO_OVERLOAD_BODY(...)
A macro helper for SEQAN3_CPO_OVERLOAD.
Definition: customisation_point.hpp:62

we need some expression at the end of the macro that can have a semicolon appended. We chose static_assert(true) for that reason.

Typedef Documentation

◆ invoke_deferred_crtp_base

template<typename deferred_crtp_base_t , typename derived_t >
using seqan3::detail::invoke_deferred_crtp_base = typedef typename deferred_crtp_base_t::template invoke<derived_t>

Template alias to instantiate the deferred crtp base with the derived class.

Template Parameters
deferred_crtp_base_tThe deferred crtp base class.
derived_tThe derived type to instantiate the crtp base class with.

Effectively declares the type resulting from deferred_crtp_base_t::template invoke<derived_t>.

See also
seqan3::detail::deferred_crtp_base

◆ iter_pointer_t

template<typename it_t >
using seqan3::detail::iter_pointer_t = typedef typename iter_pointer<it_t>::type

Return the pointer type of the input type (transformation_trait shortcut).

Template Parameters
it_tThe type to operate on.
See also
seqan3::detail::iter_pointer

◆ iterator_concept_tag_t

template<typename it_t >
using seqan3::detail::iterator_concept_tag_t = typedef std::conditional_t< std::contiguous_iterator<it_t>, std::contiguous_iterator_tag, std::conditional_t< std::random_access_iterator<it_t>, std::random_access_iterator_tag, std::conditional_t< std::bidirectional_iterator<it_t>, std::bidirectional_iterator_tag, std::conditional_t< std::forward_iterator<it_t>, std::forward_iterator_tag, std::conditional_t< std::input_iterator<it_t>, std::input_iterator_tag, std::output_iterator_tag> >> >>

Exposes the iterator_concept from the modelled concept.

Template Parameters
it_tThe type to operate on.

◆ semiregular_box

using seqan3::semiregular_box = typedef ::ranges::semiregular_box

Utility wrapper that behaves like std::optional but makes the type conform with the std::semiregular concept. Imported from ranges::semiregular_box.

See also
https://en.cppreference.com/w/cpp/ranges/copyable_wrapper

◆ semiregular_box_t

using seqan3::semiregular_box_t = typedef ::ranges::semiregular_box_t

Utility transformation trait to get a wrapper type that models std::semiregular. Imported from ranges::semiregular_box_t.

See also
https://en.cppreference.com/w/cpp/ranges/copyable_wrapper

◆ strip_type_identity_t

template<typename t >
using seqan3::detail::strip_type_identity_t = typedef std::conditional_t<is_type_specialisation_of_v<t, std::type_identity>, transformation_trait_or_t<t, void>, t>

A transformation trait shortcut that returns the type inside a std::type_identity or the type itself.

Template Parameters
tThe type to operate on.

◆ transfer_template_args_onto_t

template<typename source_type , template< typename ... > typename target_template>
using seqan3::detail::transfer_template_args_onto_t = typedef typename transfer_template_args_onto<source_type, target_template>::type

Shortcut for seqan3::detail::transfer_template_args_onto (transformation_trait shortcut).

See also
seqan3::detail::transfer_template_args_onto

◆ transfer_template_vargs_onto_t

template<typename source_type , template< auto ... > typename target_template>
using seqan3::detail::transfer_template_vargs_onto_t = typedef typename transfer_template_vargs_onto<source_type, target_template>::type

Shortcut for seqan3::detail::transfer_template_vargs_onto (transformation_trait shortcut).

See also
seqan3::detail::transfer_template_vargs_onto

◆ valid_template_spec_or_t

template<typename fallback_t , template< typename ... > typename templ_t, typename ... spec_t>
using seqan3::detail::valid_template_spec_or_t = typedef typename valid_template_spec_or<fallback_t, templ_t, spec_t...>::type

Helper for seqan3::detail::valid_template_spec_or (transformation_trait shortcut).

See also
seqan3::detail::valid_template_spec_or
Template Parameters
fallback_tThe fallback type.
templ_tThe type template that should be specialised.
spec_tThe specialisation for the type template.

Enumeration Type Documentation

◆ strong_type_skill

Enum class for all supported operations that can be added to a seqan3::detail::strong_type.

See also
seqan3::enum_bitwise_operators enables combining enum values.

Variable Documentation

◆ add_enum_bitwise_operators

template<typename t >
constexpr bool seqan3::add_enum_bitwise_operators = false
constexpr

Set to true for a scoped enum to have binary operators overloaded.

If this type trait is specialised for an enum, the binary operators &, |, ^, ~, &=, |=, ^= will be added and behave just like for ints or unscoped enums.

Example

#include <iostream>
enum class my_enum
{
VAL1 = 1,
VAL2 = 2,
COMB = 3
};
template <>
constexpr bool seqan3::add_enum_bitwise_operators<my_enum> = true;
int main()
{
using seqan3::operator|;
my_enum e = my_enum::VAL1;
my_enum e2 = e | my_enum::VAL2;
std::cout << std::boolalpha << (e2 == my_enum::COMB) << '\n'; // true
}
Provides seqan3::add_enum_bitwise_operators.
T boolalpha(T... args)

◆ is_type_list_of_sequence_file_input_formats_v

template<typename t >
constexpr bool seqan3::detail::is_type_list_of_sequence_file_input_formats_v = false
constexpr

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::sequence_file_input_format [default is false].

See also
seqan3::type_list_specialisationOfsequence_file_input_formats

◆ is_type_list_of_sequence_file_input_formats_v< type_list< ts... > >

template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_sequence_file_input_formats_v< type_list< ts... > >
constexpr
Initial value:
=
The generic concept for sequence file in formats.

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::sequence_file_input_format [overload].

See also
seqan3::type_list_specialisationOfsequence_file_input_formats

◆ is_type_list_of_structure_file_input_formats_v

template<typename t >
constexpr bool seqan3::detail::is_type_list_of_structure_file_input_formats_v = false
constexpr

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_input_format [default is false].

See also
seqan3::type_list_specialisationOfstructure_file_input_formats

◆ is_type_list_of_structure_file_input_formats_v< type_list< ts... > >

template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_structure_file_input_formats_v< type_list< ts... > > = (structure_file_input_format<ts> && ...)
constexpr

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_input_format [overload].

See also
seqan3::type_list_specialisationOfstructure_file_input_formats

◆ is_type_list_of_structure_file_output_formats_v

template<typename t >
constexpr bool seqan3::detail::is_type_list_of_structure_file_output_formats_v = false
constexpr

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_output_format [default is false].

See also
seqan3::type_list_specialisationOfstructure_file_output_formats

◆ is_type_list_of_structure_file_output_formats_v< type_list< ts... > >

template<typename ... ts>
constexpr bool seqan3::detail::is_type_list_of_structure_file_output_formats_v< type_list< ts... > > = (structure_file_output_format<ts> && ...)
constexpr

Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqan3::structure_file_output_format [overload].

See also
seqan3::type_list_specialisationOfstructure_file_output_formats

◆ persist

auto constexpr seqan3::detail::persist
inlineconstexpr

[adaptor_def]

A view adaptor that wraps rvalue references of non-views.

Template Parameters
urng_tThe type of the range being processed. See below for requirements. [template parameter is omitted in pipe notation]
Parameters
[in]urangeThe range being processed. [parameter is omitted in pipe notation]
Returns
A range wrapped in a view (even if it doesn't model std::ranges::viewable_range).

Header File

#include <seqan3/core/detail/persist_view.hpp>

For ranges that model std::ranges::viewable_range, this adaptor just returns std::views::all. However this adaptor can also take ranges that are not "viewable", e.g. temporaries of containers. It wraps them in a shared pointer internally so all view requirements like constant copy are satisfied. However construction and copying might be slightly slower, because of reference counting.

View properties

Concepts and traits urng_t (underlying range type) rrng_t (returned range type)
std::ranges::input_range required preserved
std::ranges::forward_range preserved
std::ranges::bidirectional_range preserved
std::ranges::random_access_range preserved
std::ranges::contiguous_range preserved
std::ranges::viewable_range not required guaranteed
std::ranges::view guaranteed
std::ranges::sized_range preserved
std::ranges::common_range preserved
std::ranges::output_range preserved
seqan3::const_iterable_range preserved
std::ranges::range_reference_t std::ranges::range_reference_t<urng_t>

See the views submodule documentation for detailed descriptions of the view properties.

Example

// P2415R2 makes our persist view superfluous.
// It's implemented in GCC 12 and can be detected by checking __cpp_lib_ranges.
// P2415R2 allows binding of rvalues with std::views::owning_view and also adapts
// std::views::all to return an owning_view when applicable.
#if defined(__cpp_lib_ranges) && (__cpp_lib_ranges < 202110L)
#define SEQAN3_STL_HAS_OWNING_VIEW 0
#else
#define SEQAN3_STL_HAS_OWNING_VIEW 1
#endif
int main()
{
using namespace seqan3::literals;
// explicitly create an l-value of our dna vector:
auto vec = "ACGT"_dna4;
[[maybe_unused]] auto v = vec | seqan3::views::to_char;
// using seqan3::detail::persist you can bind the temporary directly:
#if !SEQAN3_STL_HAS_OWNING_VIEW
[[maybe_unused]] auto v2 = "ACGT"_dna4 | seqan3::detail::persist | seqan3::views::to_char;
#else
[[maybe_unused]] auto v2 = "ACGT"_dna4 | seqan3::views::to_char;
#endif
// note that seqan3::detail::persist must follow immediately after the temporary,
// thus the function notation might be more intuitive:
#if !SEQAN3_STL_HAS_OWNING_VIEW
[[maybe_unused]] auto v3 = seqan3::detail::persist("ACGT"_dna4) | seqan3::views::to_char;
#else
[[maybe_unused]] auto v3 = seqan3::views::to_char("ACGT"_dna4);
#endif
}
Provides seqan3::dna4, container aliases and string literals.
auto const to_char
A view that calls seqan3::to_char() on each element in the input range.
Definition: to_char.hpp:63
auto constexpr persist
[adaptor_def]
Definition: persist_view.hpp:223
The SeqAn namespace for literals.
Provides seqan3::detail::persist.
Provides seqan3::views::to_char.