Merge more than two consecutive del/ins.
[lightning.git] / gob.go
diff --git a/gob.go b/gob.go
index 9426af9871e0514ed06d606c0a638e2ac003e90a..a8401d8af8627f45882c8fae82704595495baeaa 100644 (file)
--- a/gob.go
+++ b/gob.go
@@ -1,6 +1,7 @@
 package main
 
 import (
+       "bufio"
        "encoding/gob"
        "io"
        _ "net/http/pprof"
@@ -13,29 +14,47 @@ type CompactGenome struct {
        Variants []tileVariantID
 }
 
+type CompactSequence struct {
+       Name          string
+       TileSequences map[string][]tileLibRef
+}
+
 type TileVariant struct {
        Tag      tagID
+       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)
        var ret []CompactGenome
-       for {
+       err := DecodeLibrary(rdr, 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))
+       var err error
+       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 nil
+       } else {
+               return err
        }
 }