SeqAn3 3.2.0-rc.1
The Modern C++ library for sequence analysis.
input_format_concept.hpp
Go to the documentation of this file.
1// -----------------------------------------------------------------------------------------------------
2// Copyright (c) 2006-2021, Knut Reinert & Freie Universität Berlin
3// Copyright (c) 2016-2021, Knut Reinert & MPI für molekulare Genetik
4// This file may be used, modified and/or redistributed under the terms of the 3-clause BSD-License
5// shipped with this file and also available at: https://github.com/seqan/seqan3/blob/master/LICENSE.md
6// -----------------------------------------------------------------------------------------------------
7
13#pragma once
14
15#include <fstream>
16#include <string>
17#include <vector>
18
30
31namespace seqan3::detail
32{
33
44template <typename format_type>
45struct sam_file_input_format_exposer : public format_type
46{
47public:
48 // Can't use `using format_type::read_alignment_record` as it produces a hard failure in the format concept check
49 // for types that do not model the format concept, i.e. don't offer the proper read_alignment_record interface.
51 template <typename ...ts>
52 void read_alignment_record(ts && ...args)
53 {
54 format_type::read_alignment_record(std::forward<ts>(args)...);
55 }
56};
57
58} // namespace seqan3::detail
59
60namespace seqan3
61{
62
76template <typename t>
78 requires (detail::sam_file_input_format_exposer<t> & v,
79 std::ifstream & stream,
80 sam_file_input_options<dna5> & options,
81 std::vector<dna5_vector> & ref_sequences,
82 sam_file_header<> & header,
83 std::streampos & position_buffer,
84 dna5_vector & seq,
86 std::string & id,
87 int32_t & offset,
88 dna5_vector & ref_seq,
90 std::optional<int32_t> & ref_offset,
92 std::vector<cigar> & cigar,
93 sam_flag & flag,
94 uint8_t & mapq,
96 sam_tag_dictionary & tag_dict,
97 double & e_value,
98 double & bit_score)
99{
100 t::file_extensions;
101 // std::same_as<decltype(t::file_extensions), std::vector<std::string>>;
102
103 { v.read_alignment_record(stream,
104 options,
105 ref_sequences,
106 header,
107 position_buffer,
108 seq,
109 qual,
110 id,
111 offset,
112 ref_seq,
113 ref_id,
114 ref_offset,
115 align,
116 cigar,
117 flag,
118 mapq,
119 mate,
120 tag_dict,
121 e_value,
122 bit_score)};
123
124 { v.read_alignment_record(stream,
125 options,
126 std::ignore,
127 header,
128 position_buffer,
129 std::ignore,
130 std::ignore,
131 std::ignore,
132 std::ignore,
133 std::ignore,
134 std::ignore,
135 std::ignore,
136 std::ignore,
137 std::ignore,
138 std::ignore,
139 std::ignore,
140 std::ignore,
141 std::ignore,
142 std::ignore,
143 std::ignore)};
144};
146
226
227} // namespace seqan3
228
229namespace seqan3::detail
230{
231
237template <typename t>
239
245template <typename ...ts>
247
253template <typename t>
254concept type_list_of_sam_file_input_formats = is_type_list_of_sam_file_input_formats_v<t>;
255
256} // namespace seqan3::detail
Provides aliases for qualified.
Provides the seqan3::cigar alphabet.
Auxiliary concept that checks whether a type is a seqan3::type_list and all types meet seqan3::sam_fi...
Definition: input_format_concept.hpp:254
Provides seqan3::dna4, container aliases and string literals.
Provides seqan3::dna5, container aliases and string literals.
Provides seqan3::gapped.
sam_flag
An enum flag that describes the properties of an aligned read (given as a SAM record).
Definition: sam_flag.hpp:76
constexpr bool is_type_list_of_sam_file_input_formats_v
Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqa...
Definition: input_format_concept.hpp:238
Provides the seqan3::sam_file_header class.
The generic concept for alignment file input formats.
void read_alignment_record(stream_type &stream, sam_file_input_options< seq_legal_alph_type > const &options, ref_seqs_type &ref_seqs, header_type &header, stream_pos_type &position_buffer, seq_type &seq, qual_type &qual, id_type &id, offset_type &offset, ref_seq_type &ref_seq, ref_id_type &ref_id, ref_offset_type &ref_offset, align_type &align, cigar_type &cigar_vector, flag_type &flag, mapq_type &mapq, mate_type &mate, tag_dict_type &tag_dict, e_value_type &e_value, bit_score_type &bit_score)
Read from the specified stream and back-insert into the given field buffers.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
The main SeqAn3 namespace.
Definition: cleanup.hpp:4
Provides seqan3::phred42 quality scores.
Provides seqan3::sam_file_input_options.
Provides helper data structures for the seqan3::sam_file_output.
Provides the seqan3::sam_tag_dictionary class and auxiliaries.
Internal class used to expose the actual format interface to read alignment records from the file.
Definition: input_format_concept.hpp:46
void read_alignment_record(ts &&...args)
Forwards to the seqan3::sam_file_input_format::read_alignment_record interface.
Definition: input_format_concept.hpp:52
Type that contains multiple types.
Definition: type_list.hpp:29
Provides seqan3::type_list.