don't use #pragma mark, it isn't portable.
[clang.git] / include / clang / StaticAnalyzer / EntoSA / PathSensitive / BlockCounter.h
blob7d0fdfb5f11f925ec38b0069d6b2b76c27a972a3
1 //==- BlockCounter.h - ADT for counting block visits ---------------*- C++ -*-//
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 file defines BlockCounter, an abstract data type used to count
11 // the number of times a given block has been visited along a path
12 // analyzed by CoreEngine.
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_CLANG_GR_BLOCKCOUNTER
17 #define LLVM_CLANG_GR_BLOCKCOUNTER
19 namespace llvm {
20 class BumpPtrAllocator;
23 namespace clang {
25 class StackFrameContext;
27 namespace ento {
29 class BlockCounter {
30 void* Data;
32 BlockCounter(void* D) : Data(D) {}
34 public:
35 BlockCounter() : Data(0) {}
37 unsigned getNumVisited(const StackFrameContext *CallSite,
38 unsigned BlockID) const;
40 class Factory {
41 void* F;
42 public:
43 Factory(llvm::BumpPtrAllocator& Alloc);
44 ~Factory();
46 BlockCounter GetEmptyCounter();
47 BlockCounter IncrementCount(BlockCounter BC,
48 const StackFrameContext *CallSite,
49 unsigned BlockID);
52 friend class Factory;
55 } // end GR namespace
57 } // end clang namespace
59 #endif