48 class sequence_file_input_format<format_sam>
52 using format_tag = format_sam;
57 sequence_file_input_format() =
default;
58 sequence_file_input_format(sequence_file_input_format
const &) =
delete;
61 sequence_file_input_format & operator=(sequence_file_input_format
const &) =
delete;
62 sequence_file_input_format(sequence_file_input_format &&) =
default;
63 sequence_file_input_format & operator=(sequence_file_input_format &&) =
default;
64 ~sequence_file_input_format() =
default;
68 template <
typename stream_type,
69 typename seq_legal_alph_type,
bool seq_qual_combined,
73 void read(stream_type & stream,
74 sequence_file_input_options<seq_legal_alph_type, seq_qual_combined>
const & SEQAN3_DOXYGEN_ONLY(options),
77 qual_type & qualities)
79 alignment_file_input_options<seq_legal_alph_type> align_options;
81 if constexpr (seq_qual_combined)
84 align_format.read(stream, align_options, std::ignore, default_header, sequence, tmp_qual,
id,
85 std::ignore, std::ignore, std::ignore, std::ignore, std::ignore,
86 std::ignore, std::ignore, std::ignore, std::ignore, std::ignore, std::ignore);
88 for (
auto sit = tmp_qual.begin(), dit =
std::ranges::begin(sequence); sit != tmp_qual.end(); ++sit, ++dit)
89 get<1>(*dit).assign_char(*sit);
93 align_format.read(stream, align_options, std::ignore, default_header, sequence, qualities,
id,
94 std::ignore, std::ignore, std::ignore, std::ignore, std::ignore,
95 std::ignore, std::ignore, std::ignore, std::ignore, std::ignore, std::ignore);
98 if constexpr (!detail::decays_to_ignore_v<seq_type>)
100 throw format_error{
"The sequence information must not be empty."};
101 if constexpr (!detail::decays_to_ignore_v<id_type>)
103 throw format_error{
"The sequence information must not be empty."};
108 alignment_file_input_format<format_sam> align_format{};
111 alignment_file_header<> default_header{};
120 class sequence_file_output_format<format_sam>
124 using format_tag = format_sam;
129 sequence_file_output_format() noexcept = default;
130 sequence_file_output_format(sequence_file_output_format const &) = delete;
133 sequence_file_output_format & operator=(sequence_file_output_format const &) = delete;
134 sequence_file_output_format(sequence_file_output_format &&) noexcept = default;
135 sequence_file_output_format & operator=(sequence_file_output_format &&) noexcept = default;
136 ~sequence_file_output_format() noexcept = default;
140 template <typename stream_type,
144 void write(stream_type & stream,
145 sequence_file_output_options const & SEQAN3_DOXYGEN_ONLY(options),
146 seq_type && sequence,
148 qual_type && qualities)
153 alignment_file_output_options output_options;
155 align_format.write(stream, output_options, std::ignore,
156 default_or(sequence), default_or(qualities), default_or(
id),
158 default_mate_t{}, sam_tag_dictionary{}, 0, 0);
163 alignment_file_output_format<format_sam> align_format{};
175 template <
typename t>
176 decltype(
auto) default_or(t && v) const noexcept
178 return std::forward<t>(v);
Provides seqan3::sequence_file_output_options.
::ranges::begin begin
Alias for ranges::begin. Returns an iterator to the beginning of a range.
Definition: ranges:174
Definition: aligned_sequence_concept.hpp:35
::ranges::end end
Alias for ranges::end. Returns an iterator to the end of a range.
Definition: ranges:179