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