diff options
| author | Than McIntosh <thanm@google.com> | 2021-09-29 16:42:55 -0400 |
|---|---|---|
| committer | Than McIntosh <thanm@google.com> | 2022-09-26 20:52:13 +0000 |
| commit | 84f95aa811ed4fdb316f787fe2af80b30d531abf (patch) | |
| tree | 606169df535b939938e1f0f4e6507bc23ff98106 /src/internal/coverage/stringtab | |
| parent | f951f697c45ace2f00dccd8d2533463b6538dc36 (diff) | |
| download | go-84f95aa811ed4fdb316f787fe2af80b30d531abf.tar.xz | |
internal/coverage: add coverage meta-data decoder
Add a coverage meta-data decoder, which provides APIs for reading
encoded coverage meta-data and expanding it usable form. This package
is intended to be used in the coverage tooling that reads data files
emitted from coverage runs. Along with the new decoding package is a
unit test that runs the encode/decode paths together to check to make
sure that "decode(encode(X)) == X".
Updates #51430.
Change-Id: I81d27d8da0b2fcfa5039114a6e35a4b463d19b3c
Reviewed-on: https://go-review.googlesource.com/c/go/+/353454
Reviewed-by: David Chase <drchase@google.com>
Run-TryBot: Than McIntosh <thanm@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src/internal/coverage/stringtab')
| -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))) + } +} |
