Add merge command.
[lightning.git] / gob.go
1 package main
2
3 import (
4         "bufio"
5         "encoding/gob"
6         "io"
7         _ "net/http/pprof"
8
9         "golang.org/x/crypto/blake2b"
10 )
11
12 type CompactGenome struct {
13         Name     string
14         Variants []tileVariantID
15 }
16
17 type TileVariant struct {
18         Tag      tagID
19         Variant  tileVariantID
20         Blake2b  [blake2b.Size256]byte
21         Sequence []byte
22 }
23
24 type LibraryEntry struct {
25         TagSet         [][]byte
26         CompactGenomes []CompactGenome
27         TileVariants   []TileVariant
28 }
29
30 func ReadCompactGenomes(rdr io.Reader) ([]CompactGenome, error) {
31         var ret []CompactGenome
32         err := DecodeLibrary(rdr, func(ent *LibraryEntry) error {
33                 ret = append(ret, ent.CompactGenomes...)
34                 return nil
35         })
36         return ret, err
37 }
38
39 func DecodeLibrary(rdr io.Reader, cb func(*LibraryEntry) error) error {
40         dec := gob.NewDecoder(bufio.NewReaderSize(rdr, 1<<26))
41         var err error
42         for err == nil {
43                 var ent LibraryEntry
44                 err = dec.Decode(&ent)
45                 if err == nil {
46                         err = cb(&ent)
47                 }
48         }
49         if err == io.EOF {
50                 return nil
51         } else {
52                 return err
53         }
54 }