src/cmd/godoc/index.go | 38 +++++++++++++++++++++++--------------- diff --git a/src/cmd/godoc/index.go b/src/cmd/godoc/index.go index c70ca4b86e49091ebb72dce94947147e273a57b7..2543f92161acf9d4045be9cdfce51f122ce8ade7 100644 --- a/src/cmd/godoc/index.go +++ b/src/cmd/godoc/index.go @@ -834,30 +834,36 @@ return &Index{x.fset, suffixes, words, alts, x.snippets, x.stats} } 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 } - 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 nil } // Read reads the index from r into x; x must not be nil. @@ -866,17 +872,19 @@ var fx fileIndex 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 }