github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/internal/coverage/decodemeta/decodefile.go (about)

     1  // Copyright 2021 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package decodemeta
     6  
     7  import (
     8  	"github.com/shogo82148/std/bufio"
     9  	"github.com/shogo82148/std/internal/coverage"
    10  	"github.com/shogo82148/std/internal/coverage/stringtab"
    11  	"github.com/shogo82148/std/os"
    12  )
    13  
    14  // CoverageMetaFileReader provides state and methods for reading
    15  // a meta-data file from a code coverage run.
    16  type CoverageMetaFileReader struct {
    17  	f          *os.File
    18  	hdr        coverage.MetaFileHeader
    19  	tmp        []byte
    20  	pkgOffsets []uint64
    21  	pkgLengths []uint64
    22  	strtab     *stringtab.Reader
    23  	fileRdr    *bufio.Reader
    24  	fileView   []byte
    25  	debug      bool
    26  }
    27  
    28  // NewCoverageMetaFileReader returns a new helper object for reading
    29  // the coverage meta-data output file 'f'. The param 'fileView' is a
    30  // read-only slice containing the contents of 'f' obtained by mmap'ing
    31  // the file read-only; 'fileView' may be nil, in which case the helper
    32  // will read the contents of the file using regular file Read
    33  // operations.
    34  func NewCoverageMetaFileReader(f *os.File, fileView []byte) (*CoverageMetaFileReader, error)
    35  
    36  // NumPackages returns the number of packages for which this file
    37  // contains meta-data.
    38  func (r *CoverageMetaFileReader) NumPackages() uint64
    39  
    40  // CounterMode returns the counter mode (set, count, atomic) used
    41  // when building for coverage for the program that produce this
    42  // meta-data file.
    43  func (r *CoverageMetaFileReader) CounterMode() coverage.CounterMode
    44  
    45  // CounterGranularity returns the counter granularity (single counter per
    46  // function, or counter per block) selected when building for coverage
    47  // for the program that produce this meta-data file.
    48  func (r *CoverageMetaFileReader) CounterGranularity() coverage.CounterGranularity
    49  
    50  // FileHash returns the hash computed for all of the package meta-data
    51  // blobs. Coverage counter data files refer to this hash, and the
    52  // hash will be encoded into the meta-data file name.
    53  func (r *CoverageMetaFileReader) FileHash() [16]byte
    54  
    55  // GetPackageDecoder requests a decoder object for the package within
    56  // the meta-data file whose index is 'pkIdx'. If the
    57  // CoverageMetaFileReader was set up with a read-only file view, a
    58  // pointer into that file view will be returned, otherwise the buffer
    59  // 'payloadbuf' will be written to (or if it is not of sufficient
    60  // size, a new buffer will be allocated). Return value is the decoder,
    61  // a byte slice with the encoded meta-data, and an error.
    62  func (r *CoverageMetaFileReader) GetPackageDecoder(pkIdx uint32, payloadbuf []byte) (*CoverageMetaDataDecoder, []byte, error)
    63  
    64  // GetPackagePayload returns the raw (encoded) meta-data payload for the
    65  // package with index 'pkIdx'. As with GetPackageDecoder, if the
    66  // CoverageMetaFileReader was set up with a read-only file view, a
    67  // pointer into that file view will be returned, otherwise the buffer
    68  // 'payloadbuf' will be written to (or if it is not of sufficient
    69  // size, a new buffer will be allocated). Return value is the decoder,
    70  // a byte slice with the encoded meta-data, and an error.
    71  func (r *CoverageMetaFileReader) GetPackagePayload(pkIdx uint32, payloadbuf []byte) ([]byte, error)