Skip to content

Commit 4d99455

Browse files
Use lazy static regex for BAM header parsing (#222)
1 parent 699f67a commit 4d99455

File tree

4 files changed

+9
-6
lines changed

4 files changed

+9
-6
lines changed

src/bam/header.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// except according to those terms.
55

66
use crate::bam::HeaderView;
7+
use lazy_static::lazy_static;
78
use linear_map::LinearMap;
89
use regex::Regex;
910
use std::collections::HashMap;
@@ -65,15 +66,17 @@ impl Header {
6566
pub fn to_hashmap(&self) -> HashMap<String, Vec<LinearMap<String, String>>> {
6667
let mut header_map = HashMap::default();
6768

68-
let rec_type_re = Regex::new(r"@([A-Z][A-Z])").unwrap();
69-
let tag_re = Regex::new(r"([A-Za-z][A-Za-z0-9]):([ -~]+)").unwrap();
69+
lazy_static! {
70+
static ref REC_TYPE_RE: Regex = Regex::new(r"@([A-Z][A-Z])").unwrap();
71+
static ref TAG_RE: Regex = Regex::new(r"([A-Za-z][A-Za-z0-9]):([ -~]+)").unwrap();
72+
}
7073

7174
let header_string = String::from_utf8(self.to_bytes()).unwrap();
7275

7376
for line in header_string.split('\n').filter(|x| !x.is_empty()) {
7477
let parts: Vec<_> = line.split('\t').filter(|x| !x.is_empty()).collect();
7578
// assert!(rec_type_re.is_match(parts[0]));
76-
let record_type = rec_type_re
79+
let record_type = REC_TYPE_RE
7780
.captures(parts[0])
7881
.unwrap()
7982
.get(1)
@@ -82,7 +85,7 @@ impl Header {
8285
.to_owned();
8386
let mut field = LinearMap::default();
8487
for part in parts.iter().skip(1) {
85-
let cap = tag_re.captures(part).unwrap();
88+
let cap = TAG_RE.captures(part).unwrap();
8689
let tag = cap.get(1).unwrap().as_str().to_owned();
8790
let value = cap.get(2).unwrap().as_str().to_owned();
8891
field.insert(tag, value);

src/bam/record.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ use std::str;
1414
use std::str::FromStr;
1515
use std::u32;
1616

17+
use lazy_static::lazy_static;
1718
use regex::Regex;
1819

1920
use crate::bam::errors::Result;

src/bcf/record.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use std::str;
1515

1616
use bio_types::genome;
1717
use ieee754::Ieee754;
18+
use lazy_static::lazy_static;
1819

1920
use crate::bcf::errors::Result;
2021
use crate::bcf::header::{HeaderView, Id};

src/lib.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@
6767
6868
#[macro_use]
6969
extern crate custom_derive;
70-
#[macro_use]
71-
extern crate lazy_static;
7270
extern crate libc;
7371
#[macro_use]
7472
extern crate newtype_derive;

0 commit comments

Comments
 (0)