X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/e473f1316af98ae33f3bea221d713049fbc8df81..0199de0f15752dd69086b1cf5401a13029f318ef:/gob.go diff --git a/gob.go b/gob.go index 2fb061c5b1..0bd1873961 100644 --- a/gob.go +++ b/gob.go @@ -1,44 +1,66 @@ -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) { +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) @@ -46,9 +68,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() }