]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / llvm / tools / clang / include / clang / StaticAnalyzer / Core / PathSensitive / StoreRef.h
1 //== StoreRef.h - Smart pointer for store objects ---------------*- 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 defined the type StoreRef.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CLANG_GR_STOREREF_H
15 #define LLVM_CLANG_GR_STOREREF_H
16
17 #include <cassert>
18
19 namespace clang {
20 namespace ento {
21   
22 /// Store - This opaque type encapsulates an immutable mapping from
23 ///  locations to values.  At a high-level, it represents the symbolic
24 ///  memory model.  Different subclasses of StoreManager may choose
25 ///  different types to represent the locations and values.
26 typedef const void *Store;
27   
28 class StoreManager;
29   
30 class StoreRef {
31   Store store;
32   StoreManager &mgr;
33 public:
34   StoreRef(Store, StoreManager &);
35   StoreRef(const StoreRef &);
36   StoreRef &operator=(StoreRef const &);
37   
38   bool operator==(const StoreRef &x) const {
39     assert(&mgr == &x.mgr);
40     return x.store == store;
41   }
42   bool operator!=(const StoreRef &x) const { return !operator==(x); }
43   
44   ~StoreRef();
45   
46   Store getStore() const { return store; }
47   const StoreManager &getStoreManager() const { return mgr; }
48 };
49
50 }}
51 #endif