sigalign_utils/sequence_manipulation/
reverse_complementary.rs1pub fn reverse_complement_of_dna_sequence(sequence: &[u8]) -> Vec<u8> {
4 let mut reverse_complement = Vec::with_capacity(sequence.len());
5 for base in sequence.iter().rev() {
6 reverse_complement.push(match base {
7 b'A' => b'T',
8 b'C' => b'G',
9 b'G' => b'C',
10 b'T' => b'A',
11 _ => *base,
12 });
13 }
14 reverse_complement
15}
16
17pub fn reverse_complement_of_dna_sequence_in_place(sequence: &mut [u8]) {
19 let mut i = 0;
20 let mut j = sequence.len() - 1;
21 while i < j {
22 sequence.swap(i, j);
23 i += 1;
24 j -= 1;
25 }
26 sequence.iter_mut().for_each(|x| {
27 *x = match x {
28 b'A' => b'T',
29 b'C' => b'G',
30 b'G' => b'C',
31 b'T' => b'A',
32 _ => *x,
33 }
34 });
35}