Skip to content

Commit acf78c1

Browse files
committed
replace raw for-loop with algorithm
1 parent 022e08a commit acf78c1

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/fastqjoin.cc

+13-11
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@
5959
*/
6060

6161
#include "vsearch.h"
62+
#include <algorithm> // std::transform
6263
#include <cinttypes> // macros PRIu64 and PRId64
6364
#include <cstdint> // uint64_t
6465
#include <cstdio> // std::FILE, std::fprintf, std::fclose
6566
#include <cstring> // std::strlen, std::strcpy
67+
#include <iterator> // std::reverse_iterator, std::next
6668
#include <vector>
6769

6870

@@ -170,17 +172,17 @@ auto fastq_join(struct Parameters const & parameters) -> void
170172

171173
/* reverse complement reverse read */
172174

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;
184186

185187
/* write output */
186188

0 commit comments

Comments
 (0)