SeqAn3 3.4.0-rc.1
The Modern C++ library for sequence analysis.
Loading...
Searching...
No Matches
sequence_file/input_format_concept.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2006-2024 Knut Reinert & Freie Universität Berlin
2// SPDX-FileCopyrightText: 2016-2024 Knut Reinert & MPI für molekulare Genetik
3// SPDX-License-Identifier: BSD-3-Clause
4
11#pragma once
12
13#include <fstream>
14#include <string>
15#include <vector>
16
22
23namespace seqan3::detail
24{
25
36template <typename format_type>
37struct sequence_file_input_format_exposer : public format_type
38{
39public:
40 // Can't use `using format_type::read_sequence_record` as it produces a hard failure in the format concept check
41 // for types that do not model the format concept, i.e. don't offer the proper read_sequence_record interface.
43 template <typename... ts>
44 void read_sequence_record(ts &&... args)
45 {
46 format_type::read_sequence_record(std::forward<ts>(args)...);
47 }
48};
49
50} // namespace seqan3::detail
51
52namespace seqan3
53{
54
68template <typename t>
69concept sequence_file_input_format =
70 requires (detail::sequence_file_input_format_exposer<t> & v,
71 std::ifstream & f,
72 sequence_file_input_options<dna5> & options,
73 std::streampos & position_buffer,
78 t::file_extensions;
79
80 {
81 v.read_sequence_record(f, options, position_buffer, seq, id, qual)
82 } -> std::same_as<void>;
83 {
84 v.read_sequence_record(f, options, position_buffer, seq_qual, id, seq_qual)
85 } -> std::same_as<void>;
86 {
87 v.read_sequence_record(f, options, position_buffer, std::ignore, std::ignore, std::ignore)
88 } -> std::same_as<void>;
89 };
91
92// Workaround for https://github.com/doxygen/doxygen/issues/9379
93#if SEQAN3_DOXYGEN_ONLY(1) 0
94template <typename t>
97#endif
98
139
140} // namespace seqan3
141
142namespace seqan3::detail
143{
144
150template <typename t>
152
158template <typename... ts>
161
167template <typename t>
168concept type_list_of_sequence_file_input_formats = is_type_list_of_sequence_file_input_formats_v<t>;
169} // namespace seqan3::detail
The generic concept for sequence file in formats.
Definition sequence_file/input_format_concept.hpp:96
Auxiliary concept that checks whether a type is a seqan3::type_list and all types meet seqan3::sequen...
Definition sequence_file/input_format_concept.hpp:168
Provides seqan3::dna5, container aliases and string literals.
constexpr bool is_type_list_of_sequence_file_input_formats_v
Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqa...
Definition sequence_file/input_format_concept.hpp:151
@ id
The identifier, usually a string.
@ seq
The "sequence", usually a range of nucleotides or amino acids.
@ qual
The qualities, usually in Phred score notation.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
Provides seqan3::phred42 quality scores.
Provides quality alphabet composites.
Provides seqan3::sequence_file_input_options.
Internal class used to expose the actual format interface to read sequence records from the file.
Definition sequence_file/input_format_concept.hpp:38
void read_sequence_record(ts &&... args)
Forwards to the seqan3::sequence_file_input_format::read_sequence_record interface.
Definition sequence_file/input_format_concept.hpp:44
Type that contains multiple types.
Definition type_list.hpp:26
Provides seqan3::type_list.
Hide me