SeqAn3 3.1.0-rc.2
The Modern C++ library for sequence analysis.
output_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
24
25namespace seqan3::detail
26{
27
38template <typename format_type>
39struct sequence_file_output_format_exposer : public format_type
40{
41public:
42
43 // Can't use `using format_type::write_sequence_record` as it produces a hard failure in the format concept check
44 // for types that do not model the format concept, i.e. don't offer the proper write_sequence_record interface.
46 template <typename ...ts>
47 void write_sequence_record(ts && ...args)
48 {
49 format_type::write_sequence_record(std::forward<ts>(args)...);
50 }
51};
52
53} // namespace seqan3::detail
54
55namespace seqan3
56{
57
69template <typename t>
70SEQAN3_CONCEPT sequence_file_output_format = requires (detail::sequence_file_output_format_exposer<t> & v,
71 std::ofstream & f,
72 sequence_file_output_options & options,
73 dna5_vector & seq,
74 std::string & id,
76 std::vector<dna5q> & seq_qual)
77{
78 t::file_extensions;
79
80 SEQAN3_RETURN_TYPE_CONSTRAINT(v.write_sequence_record(f, options, seq, id, qual), std::same_as, void);
81 SEQAN3_RETURN_TYPE_CONSTRAINT(v.write_sequence_record(f, options, std::ignore, id, std::ignore),
82 std::same_as, void);
83 SEQAN3_RETURN_TYPE_CONSTRAINT(v.write_sequence_record(f, options, std::ignore, std::ignore, std::ignore),
84 std::same_as, void);
85 // the last is required to be compile time valid, but should always throw at run-time.
86};
88
123
124} // namespace seqan3
125
126namespace seqan3::detail
127{
128
134template <typename t>
136
142template <typename ...ts>
145
151template <typename t>
152SEQAN3_CONCEPT type_list_of_sequence_file_output_formats = is_type_list_of_sequence_file_output_formats_v<t>;
153} // namespace seqan3::detail
Provides aliases for qualified.
Provides seqan3::dna5, container aliases and string literals.
SEQAN3_CONCEPT type_list_of_sequence_file_output_formats
Auxiliary concept that checks whether a type is a seqan3::type_list and all types meet seqan3::sequen...
Definition: output_format_concept.hpp:152
constexpr bool is_type_list_of_sequence_file_output_formats_v
Auxiliary value metafuncton that checks whether a type is a seqan3::type_list and all types meet seqa...
Definition: output_format_concept.hpp:135
The generic concept for sequence file out formats.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
The main SeqAn3 namespace.
Definition: cigar_operation_table.hpp:2
Provides seqan3::phred42 quality scores.
#define SEQAN3_RETURN_TYPE_CONSTRAINT(expression, concept_name,...)
Same as writing {expression} -> concept_name<type1[, ...]> in a concept definition.
Definition: platform.hpp:57
Provides seqan3::sequence_file_output_options.
Internal class used to expose the actual format interface to write sequence records into the file.
Definition: output_format_concept.hpp:40
void write_sequence_record(ts &&...args)
Forwards to the seqan3::sequence_file_output_format::write_sequence_record interface.
Definition: output_format_concept.hpp:47
Type that contains multiple types.
Definition: type_list.hpp:29
Provides seqan3::type_list.