blob: eec175222b44261c778da64d165e7c77cd959b8a [file] [log] [blame]
Alex Lorenze82d89c2014-08-22 22:56:03 +00001//===- SourceCoverageDataManager.h - Manager for source file coverage data-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This class separates and merges mapping regions for a specific source file.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_COV_SOURCECOVERAGEDATAMANAGER_H
15#define LLVM_COV_SOURCECOVERAGEDATAMANAGER_H
16
Alex Lorenze82d89c2014-08-22 22:56:03 +000017#include "llvm/ProfileData/CoverageMapping.h"
Alex Lorenze82d89c2014-08-22 22:56:03 +000018#include <vector>
Alex Lorenze82d89c2014-08-22 22:56:03 +000019
20namespace llvm {
21
Justin Bognerfe357c02014-09-17 18:23:47 +000022struct CoverageSegment {
23 unsigned Line;
24 unsigned Col;
25 bool IsRegionEntry;
26 uint64_t Count;
27 bool HasCount;
28
29 CoverageSegment(unsigned Line, unsigned Col, bool IsRegionEntry)
30 : Line(Line), Col(Col), IsRegionEntry(IsRegionEntry),
31 Count(0), HasCount(false) {}
32 void setCount(uint64_t NewCount) {
33 Count = NewCount;
34 HasCount = true;
35 }
36};
37
Alex Lorenze82d89c2014-08-22 22:56:03 +000038/// \brief Partions mapping regions by their kind and sums
39/// the execution counts of the regions that start at the same location.
40class SourceCoverageDataManager {
Justin Bognere53be062014-09-09 05:32:18 +000041 std::vector<coverage::CountedRegion> Regions;
Justin Bognerfe357c02014-09-17 18:23:47 +000042 std::vector<CoverageSegment> Segments;
Alex Lorenze82d89c2014-08-22 22:56:03 +000043
44public:
Justin Bogner8e8aa3f2014-09-09 05:32:14 +000045 void insert(const coverage::CountedRegion &CR);
Alex Lorenze82d89c2014-08-22 22:56:03 +000046
Justin Bognerfe357c02014-09-17 18:23:47 +000047 /// \brief Return a sequence of non-overlapping coverage segments.
48 ArrayRef<CoverageSegment> getCoverageSegments();
Alex Lorenze82d89c2014-08-22 22:56:03 +000049};
50
51} // namespace llvm
52
53#endif // LLVM_COV_SOURCECOVERAGEDATAMANAGER_H