diff options
Diffstat (limited to 'src/internal/coverage/stringtab/stringtab.go')
| -rw-r--r-- | src/internal/coverage/stringtab/stringtab.go | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/src/internal/coverage/stringtab/stringtab.go b/src/internal/coverage/stringtab/stringtab.go index 2aba3321be..f093e2cd15 100644 --- a/src/internal/coverage/stringtab/stringtab.go +++ b/src/internal/coverage/stringtab/stringtab.go @@ -6,13 +6,16 @@ package stringtab import ( "fmt" + "internal/coverage/slicereader" "internal/coverage/uleb128" "io" ) -// This package implements a string table writer utility for use in -// emitting coverage meta-data and counter-data files. +// This package implements string table writer and reader utilities, +// for use in emitting and reading/decoding coverage meta-data and +// counter-data files. +// Writer implements a string table writing utility. type Writer struct { stab map[string]uint32 strs []string @@ -87,3 +90,33 @@ func (stw *Writer) Write(w io.Writer) error { } return nil } + +type Reader struct { + r *slicereader.Reader + strs []string +} + +func NewReader(r *slicereader.Reader) *Reader { + str := &Reader{ + r: r, + } + return str +} + +func (str *Reader) Entries() int { + return len(str.strs) +} + +func (str *Reader) Get(idx uint32) string { + return str.strs[idx] +} + +func (str *Reader) Read() { + // Read the table itself. + numEntries := int(str.r.ReadULEB128()) + str.strs = make([]string, 0, numEntries) + for idx := 0; idx < numEntries; idx++ { + slen := str.r.ReadULEB128() + str.strs = append(str.strs, str.r.ReadString(int64(slen))) + } +} |
