@@ -3,50 +3,48 @@ pub mod bitenc;
3
3
pub mod samples;
4
4
5
5
use crate :: bitenc:: BitEnc ;
6
- use lazy_static :: lazy_static ;
6
+ use std :: sync :: LazyLock ;
7
7
8
8
pub const DNA_BASES : [ u8 ; 5 ] = * b"ACGTN" ;
9
9
pub const IUPAC_BASES : [ u8 ; 15 ] = * b"ACGTMRWSYKVHDBN" ;
10
10
11
- lazy_static ! {
12
- pub static ref BASE_A : usize = 1 ;
13
- pub static ref BASE_C : usize = 2 ;
14
- pub static ref BASE_G : usize = 4 ;
15
- pub static ref BASE_T : usize = 8 ;
16
- pub static ref BASE_N : usize = 15 ;
17
- pub static ref DNA_MASKS : [ u8 ; 256 ] = {
18
- let mut masks = [ 0 ; 256 ] ;
19
- let ( a, c, g, t) = ( 1 , 2 , 4 , 8 ) ;
20
- masks[ 'A' as usize ] = a;
21
- masks[ 'C' as usize ] = c;
22
- masks[ 'G' as usize ] = g;
23
- masks[ 'T' as usize ] = t;
24
- masks[ 'U' as usize ] = t;
25
- masks[ 'N' as usize ] = a | c | g | t;
26
- masks
27
- } ;
28
- pub static ref IUPAC_MASKS : [ u8 ; 256 ] = {
29
- let mut masks = [ 0 ; 256 ] ;
30
- let ( a, c, g, t) = ( 1 , 2 , 4 , 8 ) ;
31
- masks[ 'A' as usize ] = a;
32
- masks[ 'C' as usize ] = c;
33
- masks[ 'G' as usize ] = g;
34
- masks[ 'T' as usize ] = t;
35
- masks[ 'U' as usize ] = t;
36
- masks[ 'M' as usize ] = a | c;
37
- masks[ 'R' as usize ] = a | g;
38
- masks[ 'W' as usize ] = a | t;
39
- masks[ 'S' as usize ] = c | g;
40
- masks[ 'Y' as usize ] = c | t;
41
- masks[ 'K' as usize ] = g | t;
42
- masks[ 'V' as usize ] = a | c | g;
43
- masks[ 'H' as usize ] = a | c | t;
44
- masks[ 'D' as usize ] = a | g | t;
45
- masks[ 'B' as usize ] = c | g | t;
46
- masks[ 'N' as usize ] = a | c | g | t;
47
- masks
48
- } ;
49
- }
11
+ pub static BASE_A : LazyLock < usize > = LazyLock :: new ( || 1 ) ;
12
+ pub static BASE_C : LazyLock < usize > = LazyLock :: new ( || 2 ) ;
13
+ pub static BASE_G : LazyLock < usize > = LazyLock :: new ( || 4 ) ;
14
+ pub static BASE_T : LazyLock < usize > = LazyLock :: new ( || 8 ) ;
15
+ pub static BASE_N : LazyLock < usize > = LazyLock :: new ( || 15 ) ;
16
+ pub static DNA_MASKS : LazyLock < [ u8 ; 256 ] > = LazyLock :: new ( || {
17
+ let mut masks = [ 0 ; 256 ] ;
18
+ let ( a, c, g, t) = ( 1 , 2 , 4 , 8 ) ;
19
+ masks[ 'A' as usize ] = a;
20
+ masks[ 'C' as usize ] = c;
21
+ masks[ 'G' as usize ] = g;
22
+ masks[ 'T' as usize ] = t;
23
+ masks[ 'U' as usize ] = t;
24
+ masks[ 'N' as usize ] = a | c | g | t;
25
+ masks
26
+ } ) ;
27
+ pub static IUPAC_MASKS : LazyLock < [ u8 ; 256 ] > = LazyLock :: new ( || {
28
+ let mut masks = [ 0 ; 256 ] ;
29
+ let ( a, c, g, t) = ( 1 , 2 , 4 , 8 ) ;
30
+ masks[ 'A' as usize ] = a;
31
+ masks[ 'C' as usize ] = c;
32
+ masks[ 'G' as usize ] = g;
33
+ masks[ 'T' as usize ] = t;
34
+ masks[ 'U' as usize ] = t;
35
+ masks[ 'M' as usize ] = a | c;
36
+ masks[ 'R' as usize ] = a | g;
37
+ masks[ 'W' as usize ] = a | t;
38
+ masks[ 'S' as usize ] = c | g;
39
+ masks[ 'Y' as usize ] = c | t;
40
+ masks[ 'K' as usize ] = g | t;
41
+ masks[ 'V' as usize ] = a | c | g;
42
+ masks[ 'H' as usize ] = a | c | t;
43
+ masks[ 'D' as usize ] = a | g | t;
44
+ masks[ 'B' as usize ] = c | g | t;
45
+ masks[ 'N' as usize ] = a | c | g | t;
46
+ masks
47
+ } ) ;
50
48
51
49
#[ must_use]
52
50
pub fn encode ( bases : & [ u8 ] ) -> BitEnc {
@@ -56,7 +54,11 @@ pub fn encode(bases: &[u8]) -> BitEnc {
56
54
IUPAC_MASKS [ b'N' as usize ]
57
55
} else {
58
56
let value = base. to_ascii_uppercase ( ) as usize ;
59
- if value < 256 { IUPAC_MASKS [ value] } else { 0 }
57
+ if value < 256 {
58
+ IUPAC_MASKS [ value]
59
+ } else {
60
+ 0
61
+ }
60
62
} ;
61
63
vec. push ( bit) ;
62
64
}
0 commit comments