From b632667ce57af89691407bb8668e1512775278ae Mon Sep 17 00:00:00 2001 From: Calvin Date: Fri, 15 Mar 2013 15:26:20 -0400 Subject: nbc added --- src/nbc/genome.sml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/nbc/genome.sml (limited to 'src/nbc/genome.sml') diff --git a/src/nbc/genome.sml b/src/nbc/genome.sml new file mode 100644 index 0000000..81f3183 --- /dev/null +++ b/src/nbc/genome.sml @@ -0,0 +1,33 @@ +signature GENOME = sig + exception Bad + type t + val load: string * int -> t + val get: t * string -> int option +end + +structure Genome :> GENOME = struct + exception Bad + fun |> (x, f) = f x + infix |> + + type t = (string, int) HashTable.hash_table + fun load (gname, order) = + let + val h = HashTable.mkTable + (HashString.hashString, op =) + (1024 * 1024, Fail "") + in + Options.genomeText (order, gname) |> Gzip.openIn |> Misc.sequenceLines + |> Sequence.map (fn s => ( + case Misc.split2 s of + SOME (count, nmer) => ( + nmer + , case Int.fromString count of + NONE => raise Bad + | SOME x => x + ) | NONE => raise Bad + )) |> Sequence.app (HashTable.insert h) + ; h + end + fun get (h, nmer) = HashTable.find h nmer +end -- cgit v1.2.3