Add copyright headers.
[lightning.git] / gob.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "bufio"
9         "encoding/gob"
10         "io"
11         "io/ioutil"
12         _ "net/http/pprof"
13
14         "github.com/klauspost/pgzip"
15         "golang.org/x/crypto/blake2b"
16 )
17
18 type CompactGenome struct {
19         Name     string
20         Variants []tileVariantID
21 }
22
23 type CompactSequence struct {
24         Name          string
25         TileSequences map[string][]tileLibRef
26 }
27
28 type TileVariant struct {
29         Tag      tagID
30         Variant  tileVariantID
31         Blake2b  [blake2b.Size256]byte
32         Sequence []byte
33 }
34
35 type LibraryEntry struct {
36         TagSet           [][]byte
37         CompactGenomes   []CompactGenome
38         CompactSequences []CompactSequence
39         TileVariants     []TileVariant
40 }
41
42 func ReadCompactGenomes(rdr io.Reader, gz bool) ([]CompactGenome, error) {
43         var ret []CompactGenome
44         err := DecodeLibrary(rdr, gz, func(ent *LibraryEntry) error {
45                 ret = append(ret, ent.CompactGenomes...)
46                 return nil
47         })
48         return ret, err
49 }
50
51 func DecodeLibrary(rdr io.Reader, gz bool, cb func(*LibraryEntry) error) error {
52         zrdr := ioutil.NopCloser(rdr)
53         var err error
54         if gz {
55                 zrdr, err = pgzip.NewReader(bufio.NewReaderSize(rdr, 1<<20))
56                 if err != nil {
57                         return err
58                 }
59         }
60         dec := gob.NewDecoder(zrdr)
61         for err == nil {
62                 var ent LibraryEntry
63                 err = dec.Decode(&ent)
64                 if err == nil {
65                         err = cb(&ent)
66                 }
67         }
68         if err != io.EOF {
69                 return err
70         }
71         return zrdr.Close()
72 }