|
59 | 59 | */
|
60 | 60 |
|
61 | 61 | #include "vsearch.h"
|
| 62 | +#include <algorithm> // std::transform |
62 | 63 | #include <cinttypes> // macros PRIu64 and PRId64
|
63 | 64 | #include <cstdint> // uint64_t
|
64 | 65 | #include <cstdio> // std::FILE, std::fprintf, std::fclose
|
65 | 66 | #include <cstring> // std::strlen, std::strcpy
|
| 67 | +#include <iterator> // std::reverse_iterator, std::next |
66 | 68 | #include <vector>
|
67 | 69 |
|
68 | 70 |
|
@@ -170,17 +172,17 @@ auto fastq_join(struct Parameters const & parameters) -> void
|
170 | 172 |
|
171 | 173 | /* reverse complement reverse read */
|
172 | 174 |
|
173 |
| - char * rev_seq = fastq_get_sequence(fastq_rev); |
174 |
| - char * rev_qual = fastq_get_quality(fastq_rev); |
175 |
| - |
176 |
| - // refactor with transform? |
177 |
| - for (uint64_t i = 0; i < rev_seq_length; ++i) |
178 |
| - { |
179 |
| - auto const rev_pos = rev_seq_length - 1 - i; |
180 |
| - seq_v[len] = chrmap_complement[(int) (rev_seq[rev_pos])]; |
181 |
| - qual_v[len] = rev_qual[rev_pos]; |
182 |
| - ++len; |
183 |
| - } |
| 175 | + std::transform(std::reverse_iterator<char *>{std::next(fastq_get_sequence(fastq_rev), rev_seq_length)}, |
| 176 | + std::reverse_iterator<char *>{fastq_get_sequence(fastq_rev)}, |
| 177 | + &seq_v[len], |
| 178 | + [](char const & lhs) -> char { return chrmap_complement[(int) (lhs)]; } |
| 179 | + ); |
| 180 | + std::transform(std::reverse_iterator<char *>{std::next(fastq_get_quality(fastq_rev), rev_seq_length)}, |
| 181 | + std::reverse_iterator<char *>{fastq_get_quality(fastq_rev)}, |
| 182 | + &qual_v[len], |
| 183 | + [](char const & lhs) -> char { return lhs; } |
| 184 | + ); |
| 185 | + len += rev_seq_length; |
184 | 186 |
|
185 | 187 | /* write output */
|
186 | 188 |
|
|
0 commit comments