-package main
-
-import (
- "bufio"
- "encoding/gob"
- "io"
- _ "net/http/pprof"
-
- "golang.org/x/crypto/blake2b"
-)
-
-type CompactGenome struct {
- Name string
- Variants []tileVariantID
-}
-
-type CompactSequence struct {
- Name string
- TileSequences map[string][]tileLibRef
-}
-
-type TileVariant struct {
- Tag tagID
- Variant tileVariantID
- Blake2b [blake2b.Size256]byte
- Sequence []byte
-}
-
-type LibraryEntry struct {
- TagSet [][]byte
- CompactGenomes []CompactGenome
- CompactSequences []CompactSequence
- TileVariants []TileVariant
-}
-
-func ReadCompactGenomes(rdr io.Reader) ([]CompactGenome, error) {
- var ret []CompactGenome
- err := DecodeLibrary(rdr, func(ent *LibraryEntry) error {
- ret = append(ret, ent.CompactGenomes...)
- return nil
- })
- return ret, err
-}
-
-func DecodeLibrary(rdr io.Reader, cb func(*LibraryEntry) error) error {
- dec := gob.NewDecoder(bufio.NewReaderSize(rdr, 1<<26))
- var err error
- for err == nil {
- var ent LibraryEntry
- err = dec.Decode(&ent)
- if err == nil {
- err = cb(&ent)
- }
- }
- if err == io.EOF {
- return nil
- } else {
- return err
- }
-}