X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/f50e2e9f8c572357ecab7117991efb7c9bea13e7..056c033351153c6e4f20ff70796a1dca14878302:/gob.go diff --git a/gob.go b/gob.go index a8401d8af8..5682db3771 100644 --- a/gob.go +++ b/gob.go @@ -1,17 +1,25 @@ -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 { @@ -33,18 +41,25 @@ type LibraryEntry struct { 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 + if gz { + zrdr, err = pgzip.NewReader(bufio.NewReaderSize(rdr, 1<<20)) + if err != nil { + return err + } + } + dec := gob.NewDecoder(zrdr) for err == nil { var ent LibraryEntry err = dec.Decode(&ent) @@ -52,9 +67,8 @@ func DecodeLibrary(rdr io.Reader, cb func(*LibraryEntry) error) error { err = cb(&ent) } } - if err == io.EOF { - return nil - } else { + if err != io.EOF { return err } + return zrdr.Close() }