-package main
+// Copyright (C) The Lightning Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package lightning
import (
"bufio"
"encoding/gob"
"io"
+ "io/ioutil"
_ "net/http/pprof"
+ "github.com/klauspost/pgzip"
"golang.org/x/crypto/blake2b"
)
type CompactGenome struct {
Name string
Variants []tileVariantID
+ StartTag tagID
+ EndTag tagID
}
type CompactSequence struct {
type TileVariant struct {
Tag tagID
+ Ref bool
Variant tileVariantID
Blake2b [blake2b.Size256]byte
Sequence []byte
TileVariants []TileVariant
}
-func ReadCompactGenomes(rdr io.Reader) ([]CompactGenome, error) {
+func ReadCompactGenomes(rdr io.Reader, gz bool) ([]CompactGenome, error) {
var ret []CompactGenome
- err := DecodeLibrary(rdr, func(ent *LibraryEntry) error {
+ err := DecodeLibrary(rdr, gz, 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))
+func DecodeLibrary(rdr io.Reader, gz bool, cb func(*LibraryEntry) error) error {
+ zrdr := ioutil.NopCloser(rdr)
var err error
- for err == nil {
+ if gz {
+ zrdr, err = pgzip.NewReader(bufio.NewReaderSize(rdr, 1<<20))
+ if err != nil {
+ return err
+ }
+ defer zrdr.Close()
+ }
+ dec := gob.NewDecoder(zrdr)
+ for {
var ent LibraryEntry
err = dec.Decode(&ent)
- if err == nil {
- err = cb(&ent)
+ if err == io.EOF {
+ return zrdr.Close()
+ } else if err != nil {
+ return err
+ }
+ err = cb(&ent)
+ if err != nil {
+ return err
}
- }
- if err == io.EOF {
- return nil
- } else {
- return err
}
}