X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/8a9c807d4b80f61a8485c0fc07abfe23f9d50202..cc97887069d26dd79ab1a28e3040ee7beb0a6f6d:/gob.go diff --git a/gob.go b/gob.go index 9426af9871..0bd1873961 100644 --- a/gob.go +++ b/gob.go @@ -1,41 +1,75 @@ -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 { + Name string + TileSequences map[string][]tileLibRef } type TileVariant struct { Tag tagID + Ref bool + Variant tileVariantID Blake2b [blake2b.Size256]byte Sequence []byte } type LibraryEntry struct { - TagSet [][]byte - CompactGenomes []CompactGenome - TileVariants []TileVariant + TagSet [][]byte + CompactGenomes []CompactGenome + CompactSequences []CompactSequence + TileVariants []TileVariant } -func ReadCompactGenomes(rdr io.Reader) ([]CompactGenome, error) { - dec := gob.NewDecoder(rdr) +func ReadCompactGenomes(rdr io.Reader, gz bool) ([]CompactGenome, error) { var ret []CompactGenome - for { + err := DecodeLibrary(rdr, gz, func(ent *LibraryEntry) error { + ret = append(ret, ent.CompactGenomes...) + return nil + }) + return ret, err +} + +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) - if err == io.EOF { - return ret, nil - } else if err != nil { - return nil, err + err = dec.Decode(&ent) + if err == nil { + err = cb(&ent) } - ret = append(ret, ent.CompactGenomes...) } + if err != io.EOF { + return err + } + return zrdr.Close() }