diff options
Diffstat (limited to 'rosalind')
-rw-r--r-- | rosalind/dna.rs | 10 | ||||
-rw-r--r-- | rosalind/fasta.rs | 20 | ||||
-rw-r--r-- | rosalind/mod.rs (renamed from rosalind/mod.rc) | 10 | ||||
-rw-r--r-- | rosalind/protein.rs | 6 |
4 files changed, 28 insertions, 18 deletions
diff --git a/rosalind/dna.rs b/rosalind/dna.rs index 7279c36..beb19a5 100644 --- a/rosalind/dna.rs +++ b/rosalind/dna.rs @@ -1,6 +1,6 @@ use str = core::str; -pure fn gc_content(dna: &str) -> float { +fn gc_content(dna: &str) -> float { let mut content = 0; for str::each_char(dna) |ch| { match ch { @@ -11,20 +11,20 @@ pure fn gc_content(dna: &str) -> float { (content as float) / (str::len(dna) as float) } -pure fn complement(base: char) -> char { +fn complement(base: char) -> char { match base { 'A' => 'T', 'C' => 'G', 'G' => 'C', 'T' => 'A', - _ => fail ~"Unknown character found", + _ => fail!(~"Unknown character found"), } } -pure fn transcribe(base: char) -> char { +fn transcribe(base: char) -> char { match base { 'T' => 'U', 'A' | 'C' | 'G' => base, - _ => fail ~"Unknown character found", + _ => fail!(~"Unknown character found"), } } diff --git a/rosalind/fasta.rs b/rosalind/fasta.rs index 9cd80a1..c4c828f 100644 --- a/rosalind/fasta.rs +++ b/rosalind/fasta.rs @@ -4,8 +4,8 @@ use str = core::str; const EOF: char = -1 as char; struct FASTAReader { - in: Reader, - priv mut peeked: char, + in: Reader, + priv peeked: char, } impl FASTAReader { @@ -13,7 +13,7 @@ impl FASTAReader { FASTAReader { in: stdin(), peeked: EOF } } - priv fn read_line(&self) -> ~str { + fn read_line(&mut self) -> ~str { let mut line = self.in.read_line(); if self.peeked != '>' { str::unshift_char(&mut line, self.peeked); @@ -22,7 +22,7 @@ impl FASTAReader { line } - priv fn read_sequence(&self) -> (~str, ~str) { + fn read_sequence(&mut self) -> (~str, ~str) { if self.peeked == EOF { self.peeked = self.in.read_char(); } @@ -36,10 +36,20 @@ impl FASTAReader { (name, dna) } - fn each_sequence(&self, cb: fn(~str, ~str) -> bool) { + pub fn each_sequence(&mut self, cb: &fn(~str, ~str) -> bool) { while !self.in.eof() { let (name, dna) = self.read_sequence(); cb(name, dna); } } + + pub fn sequences(&mut self) -> (~[~str], ~[~str]) { + let mut names = ~[]; + let mut dnas = ~[]; + for self.each_sequence |name, dna| { + names.push(name); + dnas.push(dna); + } + (names, dnas) + } } diff --git a/rosalind/mod.rc b/rosalind/mod.rs index 99fa08f..3d19392 100644 --- a/rosalind/mod.rc +++ b/rosalind/mod.rs @@ -2,8 +2,8 @@ #[crate_type = "lib"]; -mod dna; -mod fasta; -mod protein; -mod io; -mod str; +pub mod dna; +pub mod fasta; +pub mod protein; +pub mod io; +pub mod str; diff --git a/rosalind/protein.rs b/rosalind/protein.rs index 815b9c0..d1534bf 100644 --- a/rosalind/protein.rs +++ b/rosalind/protein.rs @@ -3,7 +3,7 @@ use str = core::str; const STOP: char = -1 as char; fn translate(rna: &str) -> ~str { - assert str::len(rna) % 3 == 0; + fail_unless!(str::len(rna) % 3 == 0); let codons = str::len(rna) / 3; let mut protein = str::with_capacity(codons); @@ -21,7 +21,7 @@ fn translate(rna: &str) -> ~str { } priv fn translate_single(codon: &str) -> char { - assert str::len(codon) == 3; + fail_unless!(str::len(codon) == 3); match codon { "UUU" => 'F', "CUU" => 'L', "AUU" => 'I', "GUU" => 'V', "UUC" => 'F', "CUC" => 'L', "AUC" => 'I', "GUC" => 'V', @@ -39,6 +39,6 @@ priv fn translate_single(codon: &str) -> char { "UGC" => 'C', "CGC" => 'R', "AGC" => 'S', "GGC" => 'G', "UGA" => STOP, "CGA" => 'R', "AGA" => 'R', "GGA" => 'G', "UGG" => 'W', "CGG" => 'R', "AGG" => 'R', "GGG" => 'G', - _ => fail ~"Unknown codon", + _ => fail!(~"Unknown codon"), } } |