1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//== StoreRef.h - Smart pointer for store objects ---------------*- C++ -*--==//
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//                     The LLVM Compiler Infrastructure
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// This file is distributed under the University of Illinois Open Source
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen// License. See LICENSE.TXT for details.
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===//
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//  This file defined the type StoreRef.
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen//===----------------------------------------------------------------------===//
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#ifndef LLVM_CLANG_GR_STOREREF_H
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#define LLVM_CLANG_GR_STOREREF_H
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#include <cassert>
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace clang {
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogennamespace ento {
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen/// Store - This opaque type encapsulates an immutable mapping from
23674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen///  locations to values.  At a high-level, it represents the symbolic
24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen///  memory model.  Different subclasses of StoreManager may choose
25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen///  different types to represent the locations and values.
26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogentypedef const void *Store;
27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass StoreManager;
29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenclass StoreRef {
31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  Store store;
32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  StoreManager &mgr;
33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenpublic:
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  StoreRef(Store, StoreManager &);
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  StoreRef(const StoreRef &);
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  StoreRef &operator=(StoreRef const &);
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  bool operator==(const StoreRef &x) const {
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    assert(&mgr == &x.mgr);
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    return x.store == store;
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  }
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  bool operator!=(const StoreRef &x) const { return !operator==(x); }
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  ~StoreRef();
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  Store getStore() const { return store; }
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  const StoreManager &getStoreManager() const { return mgr; }
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen};
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen}}
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen#endif
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen