]> Cypherpunks repositories - gostls13.git/commitdiff
go/token: remove dependency on encoding/gob
authorRobert Griesemer <gri@golang.org>
Tue, 7 Feb 2012 01:41:19 +0000 (17:41 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 7 Feb 2012 01:41:19 +0000 (17:41 -0800)
R=dsymonds
CC=golang-dev
https://golang.org/cl/5636053

src/cmd/godoc/index.go
src/pkg/go/token/serialize.go
src/pkg/go/token/serialize_test.go

index daf1bc2cc14b49efd555d596fd86c4549236bb8c..f5b531b054d1b81e5a7d5c14085f0415f85c8c41 100644 (file)
@@ -867,7 +867,10 @@ func (x *Index) Write(w io.Writer) error {
                return err
        }
        if fulltext {
-               if err := x.fset.Write(w); err != nil {
+               encode := func(x interface{}) error {
+                       return gob.NewEncoder(w).Encode(x)
+               }
+               if err := x.fset.Write(encode); err != nil {
                        return err
                }
                if err := x.suffixes.Write(w); err != nil {
@@ -897,7 +900,10 @@ func (x *Index) Read(r io.Reader) error {
                        return err
                }
                x.suffixes = new(suffixarray.Index)
-               if err := x.suffixes.Read(r); err != nil {
+               decode := func(x interface{}) error {
+                       return gob.NewDecoder(r).Decode(x)
+               }
+               if err := x.suffixes.Read(decode); err != nil {
                        return err
                }
        }
index 042d6abdf9d236db8ee759ad448e339e63dc36ff..4adc8f9e33422f656039c98a50c65713b3734698 100644 (file)
@@ -4,11 +4,6 @@
 
 package token
 
-import (
-       "encoding/gob"
-       "io"
-)
-
 type serializedFile struct {
        // fields correspond 1:1 to fields with same (lower-case) name in File
        Name  string
@@ -23,19 +18,10 @@ type serializedFileSet struct {
        Files []serializedFile
 }
 
-func (s *serializedFileSet) Read(r io.Reader) error {
-       return gob.NewDecoder(r).Decode(s)
-}
-
-func (s *serializedFileSet) Write(w io.Writer) error {
-       return gob.NewEncoder(w).Encode(s)
-}
-
-// Read reads the fileset from r into s; s must not be nil.
-// If r does not also implement io.ByteReader, it will be wrapped in a bufio.Reader.
-func (s *FileSet) Read(r io.Reader) error {
+// Read calls decode to deserialize a file set into s; s must not be nil.
+func (s *FileSet) Read(decode func(interface{}) error) error {
        var ss serializedFileSet
-       if err := ss.Read(r); err != nil {
+       if err := decode(&ss); err != nil {
                return err
        }
 
@@ -53,8 +39,8 @@ func (s *FileSet) Read(r io.Reader) error {
        return nil
 }
 
-// Write writes the fileset s to w.
-func (s *FileSet) Write(w io.Writer) error {
+// Write calls encode to serialize the file set s.
+func (s *FileSet) Write(encode func(interface{}) error) error {
        var ss serializedFileSet
 
        s.mutex.Lock()
@@ -66,5 +52,5 @@ func (s *FileSet) Write(w io.Writer) error {
        ss.Files = files
        s.mutex.Unlock()
 
-       return ss.Write(w)
+       return encode(ss)
 }
index a8ce30ab2f380a986a994f61d57164e9d4fed5ac..4e925adb6f26406df05ae62582ab866e1b95c8be 100644 (file)
@@ -6,6 +6,7 @@ package token
 
 import (
        "bytes"
+       "encoding/gob"
        "fmt"
        "testing"
 )
@@ -69,12 +70,18 @@ func equal(p, q *FileSet) error {
 
 func checkSerialize(t *testing.T, p *FileSet) {
        var buf bytes.Buffer
-       if err := p.Write(&buf); err != nil {
+       encode := func(x interface{}) error {
+               return gob.NewEncoder(&buf).Encode(x)
+       }
+       if err := p.Write(encode); err != nil {
                t.Errorf("writing fileset failed: %s", err)
                return
        }
        q := NewFileSet()
-       if err := q.Read(&buf); err != nil {
+       decode := func(x interface{}) error {
+               return gob.NewDecoder(&buf).Decode(x)
+       }
+       if err := q.Read(decode); err != nil {
                t.Errorf("reading fileset failed: %s", err)
                return
        }