(ns cljam.io.cram.seq-resolver
  (:require [cljam.io.cram.seq-resolver.protocol :as proto]
            [cljam.io.sequence :as cseq])
  (:import [java.io Closeable]))
(deftype SeqResolver [seq-reader]
  java.io.Closeable
  (close [_]
    (.close ^Closeable seq-reader))
  proto/ISeqResolver
  (resolve-sequence [_ chr start end]
    (when-let [s (cseq/read-sequence seq-reader {:chr chr :start start :end end})]
      (.getBytes ^String s))))

Creates a new sequence resolver from the given sequence file.

(defn seq-resolver
  [seq-file]
  (->SeqResolver (cseq/reader seq-file)))

Creates a cloned sequence resolver based on the given resolver.

(defn clone-seq-resolver
  [^SeqResolver resolver]
  (->SeqResolver (cseq/reader (.-seq-reader resolver))))