diff --git a/include/seqan3/alignment/configuration/align_config_scoring_scheme.hpp b/include/seqan3/alignment/configuration/align_config_scoring_scheme.hpp index 797e6094ff..d29cf6f487 100644 --- a/include/seqan3/alignment/configuration/align_config_scoring_scheme.hpp +++ b/include/seqan3/alignment/configuration/align_config_scoring_scheme.hpp @@ -16,9 +16,9 @@ #include #include -#include #include #include +#include namespace seqan3::align_cfg { diff --git a/include/seqan3/alignment/matrix/alignment_coordinate.hpp b/include/seqan3/alignment/matrix/alignment_coordinate.hpp index 561d79f0e7..ef590944a6 100644 --- a/include/seqan3/alignment/matrix/alignment_coordinate.hpp +++ b/include/seqan3/alignment/matrix/alignment_coordinate.hpp @@ -12,15 +12,15 @@ #pragma once +#include +#include #include #include #include #include #include -#include -#include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/alignment_optimum.hpp b/include/seqan3/alignment/matrix/alignment_optimum.hpp index 1195350ac6..6b02ae6609 100644 --- a/include/seqan3/alignment/matrix/alignment_optimum.hpp +++ b/include/seqan3/alignment/matrix/alignment_optimum.hpp @@ -16,7 +16,7 @@ #include #include -#include +#include #include #include #include diff --git a/include/seqan3/alignment/matrix/debug_matrix.hpp b/include/seqan3/alignment/matrix/debug_matrix.hpp index 48ec61e50f..44134d6137 100644 --- a/include/seqan3/alignment/matrix/debug_matrix.hpp +++ b/include/seqan3/alignment/matrix/debug_matrix.hpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/aligned_sequence_builder.hpp b/include/seqan3/alignment/matrix/detail/aligned_sequence_builder.hpp index ca8179cc2e..bee88112b5 100644 --- a/include/seqan3/alignment/matrix/detail/aligned_sequence_builder.hpp +++ b/include/seqan3/alignment/matrix/detail/aligned_sequence_builder.hpp @@ -12,6 +12,8 @@ #pragma once +#include +#include #include #include @@ -19,15 +21,14 @@ #include #include #include -#include -#include +#include #include #include #include #include #include -#include -#include +#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/alignment_matrix_column_major_range_base.hpp b/include/seqan3/alignment/matrix/detail/alignment_matrix_column_major_range_base.hpp index 6b43535fa7..9064da7553 100644 --- a/include/seqan3/alignment/matrix/detail/alignment_matrix_column_major_range_base.hpp +++ b/include/seqan3/alignment/matrix/detail/alignment_matrix_column_major_range_base.hpp @@ -12,12 +12,13 @@ #pragma once -#include -#include #include #include #include +#include +#include + namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/alignment_trace_matrix_proxy.hpp b/include/seqan3/alignment/matrix/detail/alignment_trace_matrix_proxy.hpp index 3073b1deaf..ccdd752f8f 100644 --- a/include/seqan3/alignment/matrix/detail/alignment_trace_matrix_proxy.hpp +++ b/include/seqan3/alignment/matrix/detail/alignment_trace_matrix_proxy.hpp @@ -16,7 +16,7 @@ #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/combined_score_and_trace_matrix.hpp b/include/seqan3/alignment/matrix/detail/combined_score_and_trace_matrix.hpp index 2f262d36e4..27cf50199a 100644 --- a/include/seqan3/alignment/matrix/detail/combined_score_and_trace_matrix.hpp +++ b/include/seqan3/alignment/matrix/detail/combined_score_and_trace_matrix.hpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include #include namespace seqan3::detail diff --git a/include/seqan3/alignment/matrix/detail/coordinate_matrix.hpp b/include/seqan3/alignment/matrix/detail/coordinate_matrix.hpp index 0d7c33e1e5..226e3ab5ef 100644 --- a/include/seqan3/alignment/matrix/detail/coordinate_matrix.hpp +++ b/include/seqan3/alignment/matrix/detail/coordinate_matrix.hpp @@ -16,13 +16,13 @@ #include #include +#include #include #include #include #include -#include -#include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/trace_matrix_full.hpp b/include/seqan3/alignment/matrix/detail/trace_matrix_full.hpp index 8a4132d4b7..5f756557b5 100644 --- a/include/seqan3/alignment/matrix/detail/trace_matrix_full.hpp +++ b/include/seqan3/alignment/matrix/detail/trace_matrix_full.hpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/include/seqan3/alignment/matrix/detail/two_dimensional_matrix.hpp b/include/seqan3/alignment/matrix/detail/two_dimensional_matrix.hpp index 370ed8779a..687c515817 100644 --- a/include/seqan3/alignment/matrix/detail/two_dimensional_matrix.hpp +++ b/include/seqan3/alignment/matrix/detail/two_dimensional_matrix.hpp @@ -12,16 +12,16 @@ #pragma once +#include #include +#include #include #include #include -#include -#include -#include -#include -#include +#include +#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/matrix/detail/two_dimensional_matrix_iterator_base.hpp b/include/seqan3/alignment/matrix/detail/two_dimensional_matrix_iterator_base.hpp index 750cac5783..f50fe6d35d 100644 --- a/include/seqan3/alignment/matrix/detail/two_dimensional_matrix_iterator_base.hpp +++ b/include/seqan3/alignment/matrix/detail/two_dimensional_matrix_iterator_base.hpp @@ -12,13 +12,13 @@ #pragma once +#include +#include #include #include -#include -#include -#include -#include +#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/align_pairwise.hpp b/include/seqan3/alignment/pairwise/align_pairwise.hpp index 72fe6b51ec..91847cf46b 100644 --- a/include/seqan3/alignment/pairwise/align_pairwise.hpp +++ b/include/seqan3/alignment/pairwise/align_pairwise.hpp @@ -12,8 +12,10 @@ #pragma once +#include #include #include +#include #include #include @@ -28,10 +30,8 @@ #include #include #include -#include #include -#include -#include +#include namespace seqan3 { diff --git a/include/seqan3/alignment/pairwise/align_result_selector.hpp b/include/seqan3/alignment/pairwise/align_result_selector.hpp index 6f7f73bf8d..5119ec0ea7 100644 --- a/include/seqan3/alignment/pairwise/align_result_selector.hpp +++ b/include/seqan3/alignment/pairwise/align_result_selector.hpp @@ -24,13 +24,13 @@ #include #include #include -#include -#include -#include -#include -#include +#include +#include #include #include +#include +#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/alignment_algorithm.hpp b/include/seqan3/alignment/pairwise/alignment_algorithm.hpp index d6bcc5d293..86771dcdbb 100644 --- a/include/seqan3/alignment/pairwise/alignment_algorithm.hpp +++ b/include/seqan3/alignment/pairwise/alignment_algorithm.hpp @@ -12,8 +12,10 @@ #pragma once +#include #include #include +#include #include #include @@ -24,20 +26,17 @@ #include #include #include - +#include #include #include #include #include #include -#include -#include #include #include #include #include -#include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/alignment_configurator.hpp b/include/seqan3/alignment/pairwise/alignment_configurator.hpp index 6239088d13..cbb881213b 100644 --- a/include/seqan3/alignment/pairwise/alignment_configurator.hpp +++ b/include/seqan3/alignment/pairwise/alignment_configurator.hpp @@ -53,12 +53,12 @@ #include #include #include +#include +#include #include -#include -#include -#include #include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/alignment_result.hpp b/include/seqan3/alignment/pairwise/alignment_result.hpp index e84c7018e0..ad8cb14e24 100644 --- a/include/seqan3/alignment/pairwise/alignment_result.hpp +++ b/include/seqan3/alignment/pairwise/alignment_result.hpp @@ -17,7 +17,7 @@ #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/detail/policy_affine_gap_recursion.hpp b/include/seqan3/alignment/pairwise/detail/policy_affine_gap_recursion.hpp index aa474bfd72..56e6f807c9 100644 --- a/include/seqan3/alignment/pairwise/detail/policy_affine_gap_recursion.hpp +++ b/include/seqan3/alignment/pairwise/detail/policy_affine_gap_recursion.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include diff --git a/include/seqan3/alignment/pairwise/detail/policy_alignment_matrix.hpp b/include/seqan3/alignment/pairwise/detail/policy_alignment_matrix.hpp index 73262082a1..39a7fc61d8 100644 --- a/include/seqan3/alignment/pairwise/detail/policy_alignment_matrix.hpp +++ b/include/seqan3/alignment/pairwise/detail/policy_alignment_matrix.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/detail/policy_alignment_result_builder.hpp b/include/seqan3/alignment/pairwise/detail/policy_alignment_result_builder.hpp index 7f1045eeb9..d6828ca9fa 100644 --- a/include/seqan3/alignment/pairwise/detail/policy_alignment_result_builder.hpp +++ b/include/seqan3/alignment/pairwise/detail/policy_alignment_result_builder.hpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker.hpp b/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker.hpp index 99255a4b7a..c4862af3d1 100644 --- a/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker.hpp +++ b/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker.hpp @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker_simd.hpp b/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker_simd.hpp index 69b0770dc8..578c640f89 100644 --- a/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker_simd.hpp +++ b/include/seqan3/alignment/pairwise/detail/policy_optimum_tracker_simd.hpp @@ -19,8 +19,8 @@ #include #include #include -#include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/detail/type_traits.hpp b/include/seqan3/alignment/pairwise/detail/type_traits.hpp index cbbbd341e7..7849b506c9 100644 --- a/include/seqan3/alignment/pairwise/detail/type_traits.hpp +++ b/include/seqan3/alignment/pairwise/detail/type_traits.hpp @@ -12,6 +12,7 @@ #pragma once +#include #include #include @@ -30,14 +31,13 @@ #include #include #include +#include #include #include -#include -#include -#include #include #include -#include +#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/edit_distance_fwd.hpp b/include/seqan3/alignment/pairwise/edit_distance_fwd.hpp index 9e751968de..84a768bc3a 100644 --- a/include/seqan3/alignment/pairwise/edit_distance_fwd.hpp +++ b/include/seqan3/alignment/pairwise/edit_distance_fwd.hpp @@ -12,14 +12,15 @@ #pragma once +#include +#include + #include #include #include #include +#include #include -#include -#include -#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/policy/alignment_matrix_policy.hpp b/include/seqan3/alignment/pairwise/policy/alignment_matrix_policy.hpp index f6fdb7ae2b..45a17bd487 100644 --- a/include/seqan3/alignment/pairwise/policy/alignment_matrix_policy.hpp +++ b/include/seqan3/alignment/pairwise/policy/alignment_matrix_policy.hpp @@ -17,9 +17,9 @@ #include #include -#include #include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alignment/pairwise/policy/scoring_scheme_policy.hpp b/include/seqan3/alignment/pairwise/policy/scoring_scheme_policy.hpp index 4df0701b0a..afe79f9d12 100644 --- a/include/seqan3/alignment/pairwise/policy/scoring_scheme_policy.hpp +++ b/include/seqan3/alignment/pairwise/policy/scoring_scheme_policy.hpp @@ -14,7 +14,7 @@ #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/alphabet/aminoacid/concept.hpp b/include/seqan3/alphabet/aminoacid/concept.hpp index 2e5b5a1cc8..3cbd44c5a3 100644 --- a/include/seqan3/alphabet/aminoacid/concept.hpp +++ b/include/seqan3/alphabet/aminoacid/concept.hpp @@ -16,7 +16,7 @@ #include #include -#include +#include // ============================================================================ // aminoacid_empty_base diff --git a/include/seqan3/alphabet/aminoacid/translation.hpp b/include/seqan3/alphabet/aminoacid/translation.hpp index 669fe69786..7b62f80e85 100644 --- a/include/seqan3/alphabet/aminoacid/translation.hpp +++ b/include/seqan3/alphabet/aminoacid/translation.hpp @@ -17,7 +17,7 @@ #include #include #include -#include +#include namespace seqan3 { diff --git a/include/seqan3/alphabet/composite/alphabet_tuple_base.hpp b/include/seqan3/alphabet/composite/alphabet_tuple_base.hpp index 3e3b682466..8d748cdd10 100644 --- a/include/seqan3/alphabet/composite/alphabet_tuple_base.hpp +++ b/include/seqan3/alphabet/composite/alphabet_tuple_base.hpp @@ -24,10 +24,10 @@ #include #include #include -#include #include #include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alphabet/composite/alphabet_variant.hpp b/include/seqan3/alphabet/composite/alphabet_variant.hpp index 6fe12b62f8..4ea3cd9042 100644 --- a/include/seqan3/alphabet/composite/alphabet_variant.hpp +++ b/include/seqan3/alphabet/composite/alphabet_variant.hpp @@ -24,10 +24,9 @@ #include #include -#include -#include #include #include +#include namespace seqan3::detail { @@ -171,7 +170,7 @@ class alphabet_variant : public alphabet_base static constexpr bool holds_alternative() noexcept { - return detail::type_in_pack_v; + return seqan3::pack_traits::contains; } /*!\name Constructors, destructor and assignment diff --git a/include/seqan3/alphabet/composite/detail.hpp b/include/seqan3/alphabet/composite/detail.hpp index 67ea2d743c..5dfb6b3570 100644 --- a/include/seqan3/alphabet/composite/detail.hpp +++ b/include/seqan3/alphabet/composite/detail.hpp @@ -14,8 +14,8 @@ #include #include -#include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/alphabet/concept.hpp b/include/seqan3/alphabet/concept.hpp index 70f334297f..6e43e5dbb3 100644 --- a/include/seqan3/alphabet/concept.hpp +++ b/include/seqan3/alphabet/concept.hpp @@ -18,8 +18,8 @@ #include #include #include -#include #include +#include // ============================================================================ // forwards diff --git a/include/seqan3/alphabet/detail/alphabet_proxy.hpp b/include/seqan3/alphabet/detail/alphabet_proxy.hpp index 7814713fb7..3ff6a6e723 100644 --- a/include/seqan3/alphabet/detail/alphabet_proxy.hpp +++ b/include/seqan3/alphabet/detail/alphabet_proxy.hpp @@ -12,13 +12,14 @@ #pragma once +#include + #include #include #include #include -#include -#include -#include +#include +#include namespace seqan3 { diff --git a/include/seqan3/argument_parser/auxiliary.hpp b/include/seqan3/argument_parser/auxiliary.hpp index 62de91e1a2..0660072472 100644 --- a/include/seqan3/argument_parser/auxiliary.hpp +++ b/include/seqan3/argument_parser/auxiliary.hpp @@ -12,16 +12,16 @@ #pragma once +#include #include +#include #include #include #include #include -#include #include -#include -#include +#include namespace seqan3::custom { diff --git a/include/seqan3/argument_parser/validators.hpp b/include/seqan3/argument_parser/validators.hpp index 572b28c934..2f384b51da 100644 --- a/include/seqan3/argument_parser/validators.hpp +++ b/include/seqan3/argument_parser/validators.hpp @@ -24,13 +24,13 @@ #include #include #include -#include #include #include #include #include #include #include +#include namespace seqan3 { diff --git a/include/seqan3/contrib/parallel/buffer_queue.hpp b/include/seqan3/contrib/parallel/buffer_queue.hpp index 3d78a7fd3e..c5a16a44a2 100644 --- a/include/seqan3/contrib/parallel/buffer_queue.hpp +++ b/include/seqan3/contrib/parallel/buffer_queue.hpp @@ -12,23 +12,22 @@ #pragma once +#include #include #include +#include #include -#include +#include +#include #include +#include #include #include #include -#include +#include #include #include -#include -#include -#include -#include -#include namespace seqan3::contrib { diff --git a/include/seqan3/contrib/stream/bgzf_stream_util.hpp b/include/seqan3/contrib/stream/bgzf_stream_util.hpp index d7ac87c80d..32b71537a9 100644 --- a/include/seqan3/contrib/stream/bgzf_stream_util.hpp +++ b/include/seqan3/contrib/stream/bgzf_stream_util.hpp @@ -24,12 +24,13 @@ #error "This file cannot be used when building without GZip-support." #endif // SEQAN3_HAS_ZLIB +#include +#include + #include -#include +#include #include #include -#include -#include namespace seqan3::contrib { diff --git a/include/seqan3/core/algorithm/concept.hpp b/include/seqan3/core/algorithm/concept.hpp index 43bfac423e..598cda93ac 100644 --- a/include/seqan3/core/algorithm/concept.hpp +++ b/include/seqan3/core/algorithm/concept.hpp @@ -12,13 +12,13 @@ #pragma once +#include #include #include #include -#include -#include +#include namespace seqan3 { diff --git a/include/seqan3/core/algorithm/detail/execution_handler_parallel.hpp b/include/seqan3/core/algorithm/detail/execution_handler_parallel.hpp index af1e778199..7a73033950 100644 --- a/include/seqan3/core/algorithm/detail/execution_handler_parallel.hpp +++ b/include/seqan3/core/algorithm/detail/execution_handler_parallel.hpp @@ -21,7 +21,7 @@ #include #include -#include +#include namespace seqan3::detail { diff --git a/include/seqan3/core/algorithm/pipeable_config_element.hpp b/include/seqan3/core/algorithm/pipeable_config_element.hpp index 28ec6c1e95..bc23b0a47b 100644 --- a/include/seqan3/core/algorithm/pipeable_config_element.hpp +++ b/include/seqan3/core/algorithm/pipeable_config_element.hpp @@ -17,7 +17,7 @@ #include #include -#include +#include namespace seqan3 { diff --git a/include/seqan3/core/all.hpp b/include/seqan3/core/all.hpp index 287f232a6e..6b24eb0e12 100644 --- a/include/seqan3/core/all.hpp +++ b/include/seqan3/core/all.hpp @@ -22,9 +22,9 @@ #include #include #include -#include #include #include +#include #include /*!\defgroup core Core diff --git a/include/seqan3/core/char_operations/predicate_detail.hpp b/include/seqan3/core/char_operations/predicate_detail.hpp index b6569b4c98..858d8298d9 100644 --- a/include/seqan3/core/char_operations/predicate_detail.hpp +++ b/include/seqan3/core/char_operations/predicate_detail.hpp @@ -20,8 +20,8 @@ #include #include -#include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/core/concept/tuple.hpp b/include/seqan3/core/concept/tuple.hpp index 6b7747a0d3..7a9730d16f 100644 --- a/include/seqan3/core/concept/tuple.hpp +++ b/include/seqan3/core/concept/tuple.hpp @@ -16,10 +16,10 @@ #include #include -#include -#include +#include #include #include +#include namespace seqan3::detail { diff --git a/include/seqan3/core/detail/all.hpp b/include/seqan3/core/detail/all.hpp index cdde8dfb4d..7a662b9fc3 100644 --- a/include/seqan3/core/detail/all.hpp +++ b/include/seqan3/core/detail/all.hpp @@ -20,6 +20,7 @@ #include #include #include +#include +#include #include -#include -#include +#include diff --git a/include/seqan3/core/detail/debug_stream_optional.hpp b/include/seqan3/core/detail/debug_stream_optional.hpp index 9b60a8d022..f61b1ecf05 100644 --- a/include/seqan3/core/detail/debug_stream_optional.hpp +++ b/include/seqan3/core/detail/debug_stream_optional.hpp @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include namespace seqan3 { diff --git a/include/seqan3/core/detail/debug_stream_range.hpp b/include/seqan3/core/detail/debug_stream_range.hpp index 6f81cc3057..af19e29ad7 100644 --- a/include/seqan3/core/detail/debug_stream_range.hpp +++ b/include/seqan3/core/detail/debug_stream_range.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include namespace seqan3::detail diff --git a/include/seqan3/core/detail/debug_stream_variant.hpp b/include/seqan3/core/detail/debug_stream_variant.hpp index 8dca90cf25..c6c92cd51e 100644 --- a/include/seqan3/core/detail/debug_stream_variant.hpp +++ b/include/seqan3/core/detail/debug_stream_variant.hpp @@ -15,8 +15,8 @@ #include #include -#include -#include +#include +#include namespace seqan3 { diff --git a/include/seqan3/core/detail/deferred_crtp_base.hpp b/include/seqan3/core/detail/deferred_crtp_base.hpp new file mode 100644 index 0000000000..bd4523217a --- /dev/null +++ b/include/seqan3/core/detail/deferred_crtp_base.hpp @@ -0,0 +1,101 @@ +// ----------------------------------------------------------------------------------------------------- +// Copyright (c) 2006-2020, Knut Reinert & Freie Universität Berlin +// Copyright (c) 2016-2020, Knut Reinert & MPI für molekulare Genetik +// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License +// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md +// ----------------------------------------------------------------------------------------------------- + +/*!\file + * \brief Provides seqan3::detail::deferred_crtp_base. + * \author Rene Rahn + */ + +#pragma once + +#include + +namespace seqan3::detail +{ + +/*!\brief An invocable wrapper that defers the instantiation of a crtp_base class. + * \ingroup core + * \tparam crtp_base The crtp base class to be deferred. Must be a template template parameter. + * \tparam args_t A type template parameter pack used to augment the `crtp_base` class. + * + * \details + * + * This transformation trait wrapper allows to defer the template instantiation of crtp-base classes. This can be useful + * if the crtp_base class should be augmented with traits or other templates, especially when using variadic + * crtp_bases. The help function seqan3::detail::invoke_deferred_crtp_base can be used to instantiate the + * deferred crtp base with the respective derived type. + * + * ### Example + * + * The following snippet demonstrates the use of the deferred crtp base class instantiation. + * + * \include test/snippet/core/detail/deferred_crtp_base.cpp + * + * \see seqan3::detail::invoke_deferred_crtp_base + * \see seqan3::detail::deferred_crtp_base_vargs + */ +template