]> Cypherpunks repositories - gostls13.git/commitdiff
godoc: use new index/suffixarray serialization code
authorRobert Griesemer <gri@golang.org>
Thu, 15 Sep 2011 23:21:42 +0000 (16:21 -0700)
committerRobert Griesemer <gri@golang.org>
Thu, 15 Sep 2011 23:21:42 +0000 (16:21 -0700)
When saving/restoring the fulltext index, the entire
respective suffixarray is now saved/restored (as opposed
to the indexed data only, and the suffixarray recreated).
This saves significant start-up time for large indexes,
at the cost of significantly larger index files.

R=r
CC=golang-dev
https://golang.org/cl/5037043

src/cmd/godoc/index.go

index c70ca4b86e49091ebb72dce94947147e273a57b7..2543f92161acf9d4045be9cdfce51f122ce8ade7 100644 (file)
@@ -834,30 +834,36 @@ func NewIndex(dirnames <-chan string, fulltextIndex bool, throttle float64) *Ind
 }
 
 type fileIndex struct {
-       Sources  []byte
        Words    map[string]*LookupResult
        Alts     map[string]*AltWords
        Snippets []*Snippet
+       Fulltext bool
 }
 
 // Write writes the index x to w.
 func (x *Index) Write(w io.Writer) os.Error {
-       var sources []byte
+       fulltext := false
        if x.suffixes != nil {
-               // fulltext index present
-               sources = x.suffixes.Bytes()
+               fulltext = true
        }
        fx := fileIndex{
-               sources, // indicates if fulltext index is present or not
                x.words,
                x.alts,
                x.snippets,
+               fulltext,
        }
-       err := gob.NewEncoder(w).Encode(fx)
-       if err == nil && sources != nil {
-               err = x.fset.Write(w)
+       if err := gob.NewEncoder(w).Encode(fx); err != nil {
+               return err
+       }
+       if fulltext {
+               if err := x.fset.Write(w); err != nil {
+                       return err
+               }
+               if err := x.suffixes.Write(w); err != nil {
+                       return err
+               }
        }
-       return err
+       return nil
 }
 
 // Read reads the index from r into x; x must not be nil.
@@ -866,17 +872,19 @@ func (x *Index) Read(r io.Reader) os.Error {
        if err := gob.NewDecoder(r).Decode(&fx); err != nil {
                return err
        }
-       if fx.Sources != nil {
-               // fulltext index is present
+       x.words = fx.Words
+       x.alts = fx.Alts
+       x.snippets = fx.Snippets
+       if fx.Fulltext {
                x.fset = token.NewFileSet()
                if err := x.fset.Read(r); err != nil {
                        return err
                }
-               x.suffixes = suffixarray.New(fx.Sources)
+               x.suffixes = new(suffixarray.Index)
+               if err := x.suffixes.Read(r); err != nil {
+                       return err
+               }
        }
-       x.words = fx.Words
-       x.alts = fx.Alts
-       x.snippets = fx.Snippets
        return nil
 }