diff options
| author | Vedant Kumar <vsk@apple.com> | 2017-10-18 23:58:28 +0000 |
|---|---|---|
| committer | Vedant Kumar <vsk@apple.com> | 2017-10-18 23:58:28 +0000 |
| commit | 821160d5efc38b84cd51efc4d94acd3948e22873 (patch) | |
| tree | c54a57109398ecdb5e33ca063a2ddf80bce2ca3c /llvm/tools/llvm-cov/CoverageSummaryInfo.h | |
| parent | e955f6183749410992ef358b2d49b8cae2acaae1 (diff) | |
| download | bcm5719-llvm-821160d5efc38b84cd51efc4d94acd3948e22873.tar.gz bcm5719-llvm-821160d5efc38b84cd51efc4d94acd3948e22873.zip | |
[llvm-cov] Move LineCoverageIterator to libCoverage. NFC.
LineCoverageIterator makes it easy for clients of coverage data to
determine line execution counts for a file or function. The coverage
iteration logic is tricky enough that it really pays not to have
multiple copies of it. Hopefully having just one implementation in LLVM
will make the iteration logic easier to test, reuse, and update.
This commit is NFC but I've added a unit test to go along with it just
because it's easy to do now.
llvm-svn: 316141
Diffstat (limited to 'llvm/tools/llvm-cov/CoverageSummaryInfo.h')
| -rw-r--r-- | llvm/tools/llvm-cov/CoverageSummaryInfo.h | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/llvm/tools/llvm-cov/CoverageSummaryInfo.h b/llvm/tools/llvm-cov/CoverageSummaryInfo.h index d3f43d19104..8eae0b7fec9 100644 --- a/llvm/tools/llvm-cov/CoverageSummaryInfo.h +++ b/llvm/tools/llvm-cov/CoverageSummaryInfo.h @@ -15,8 +15,6 @@ #ifndef LLVM_COV_COVERAGESUMMARYINFO_H #define LLVM_COV_COVERAGESUMMARYINFO_H -#include "llvm/ADT/iterator.h" -#include "llvm/ADT/iterator_range.h" #include "llvm/ProfileData/Coverage/CoverageMapping.h" #include "llvm/Support/raw_ostream.h" @@ -138,93 +136,6 @@ public: } }; -/// \brief Coverage statistics for a single line. -class LineCoverageStats { - uint64_t ExecutionCount; - bool HasMultipleRegions; - bool Mapped; - unsigned Line; - ArrayRef<const coverage::CoverageSegment *> LineSegments; - const coverage::CoverageSegment *WrappedSegment; - - friend class LineCoverageIterator; - LineCoverageStats() = default; - -public: - LineCoverageStats(ArrayRef<const coverage::CoverageSegment *> LineSegments, - const coverage::CoverageSegment *WrappedSegment, - unsigned Line); - - uint64_t getExecutionCount() const { return ExecutionCount; } - - bool hasMultipleRegions() const { return HasMultipleRegions; } - - bool isMapped() const { return Mapped; } - - unsigned getLine() const { return Line; } - - ArrayRef<const coverage::CoverageSegment *> getLineSegments() const { - return LineSegments; - } - - const coverage::CoverageSegment *getWrappedSegment() const { - return WrappedSegment; - } -}; - -/// Iterates over LineCoverageStats for each line described by a CoverageData -/// object. -class LineCoverageIterator - : public iterator_facade_base< - LineCoverageIterator, std::forward_iterator_tag, LineCoverageStats> { -public: - LineCoverageIterator(const coverage::CoverageData &CD) - : LineCoverageIterator(CD, CD.begin()->Line) {} - - LineCoverageIterator(const coverage::CoverageData &CD, unsigned Line) - : CD(CD), WrappedSegment(nullptr), Next(CD.begin()), Ended(false), - Line(Line), Segments(), Stats() { - this->operator++(); - } - - LineCoverageIterator &operator=(const LineCoverageIterator &R) = default; - - bool operator==(const LineCoverageIterator &R) const { - return &CD == &R.CD && Next == R.Next && Ended == R.Ended; - } - - const LineCoverageStats &operator*() const { return Stats; } - - LineCoverageStats &operator*() { return Stats; } - - LineCoverageIterator &operator++(); - - LineCoverageIterator getEnd() const { - auto EndIt = *this; - EndIt.Next = CD.end(); - EndIt.Ended = true; - return EndIt; - } - -private: - const coverage::CoverageData &CD; - const coverage::CoverageSegment *WrappedSegment; - std::vector<coverage::CoverageSegment>::const_iterator Next; - bool Ended; - unsigned Line; - SmallVector<const coverage::CoverageSegment *, 4> Segments; - LineCoverageStats Stats; -}; - -/// Get a range of LineCoverageStats for each line described by a CoverageData -/// object. -static inline iterator_range<LineCoverageIterator> -getLineCoverageStats(const coverage::CoverageData &CD) { - auto Begin = LineCoverageIterator(CD); - auto End = Begin.getEnd(); - return make_range(Begin, End); -} - /// \brief A summary of function's code coverage. struct FunctionCoverageSummary { std::string Name; |

