diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-10-06 09:35:45 +0200 |
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-10-06 09:35:45 +0200 |
| commit | 6c7ca6e4d4e26e4c8cbe0d183966011b3b088a0a (patch) | |
| tree | fddeb87db026d64a1d8e597dd0c69d685f433597 /src/pkg/go/token/serialize.go | |
| parent | 04f99b387021a8ce32a8795360cba9beaf986a81 (diff) | |
| download | golang-6c7ca6e4d4e26e4c8cbe0d183966011b3b088a0a.tar.gz | |
Imported Upstream version 2011.09.21upstream-weekly/2011.09.21
Diffstat (limited to 'src/pkg/go/token/serialize.go')
| -rw-r--r-- | src/pkg/go/token/serialize.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/pkg/go/token/serialize.go b/src/pkg/go/token/serialize.go new file mode 100644 index 000000000..80a3323f9 --- /dev/null +++ b/src/pkg/go/token/serialize.go @@ -0,0 +1,62 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package token + +import ( + "gob" + "io" + "os" +) + +type serializedFile struct { + // fields correspond 1:1 to fields with same (lower-case) name in File + Name string + Base int + Size int + Lines []int + Infos []lineInfo +} + +type serializedFileSet struct { + Base int + Files []serializedFile +} + +// Read reads the fileset from r into s; s must not be nil. +func (s *FileSet) Read(r io.Reader) os.Error { + var ss serializedFileSet + if err := gob.NewDecoder(r).Decode(&ss); err != nil { + return err + } + + s.mutex.Lock() + s.base = ss.Base + files := make([]*File, len(ss.Files)) + for i := 0; i < len(ss.Files); i++ { + f := &ss.Files[i] + files[i] = &File{s, f.Name, f.Base, f.Size, f.Lines, f.Infos} + } + s.files = files + s.last = nil + s.mutex.Unlock() + + return nil +} + +// Write writes the fileset s to w. +func (s *FileSet) Write(w io.Writer) os.Error { + var ss serializedFileSet + + s.mutex.Lock() + ss.Base = s.base + files := make([]serializedFile, len(s.files)) + for i, f := range s.files { + files[i] = serializedFile{f.name, f.base, f.size, f.lines, f.infos} + } + ss.Files = files + s.mutex.Unlock() + + return gob.NewEncoder(w).Encode(ss) +} |
