//== StoreRef.h - Smart pointer for store objects ---------------*- C++ -*--==// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defined the type StoreRef. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_GR_STOREREF_H #define LLVM_CLANG_GR_STOREREF_H #include namespace clang { namespace ento { /// Store - This opaque type encapsulates an immutable mapping from /// locations to values. At a high-level, it represents the symbolic /// memory model. Different subclasses of StoreManager may choose /// different types to represent the locations and values. typedef const void *Store; class StoreManager; class StoreRef { Store store; StoreManager &mgr; public: StoreRef(Store, StoreManager &); StoreRef(const StoreRef &); StoreRef &operator=(StoreRef const &); bool operator==(const StoreRef &x) const { assert(&mgr == &x.mgr); return x.store == store; } bool operator!=(const StoreRef &x) const { return !operator==(x); } ~StoreRef(); Store getStore() const { return store; } const StoreManager &getStoreManager() const { return mgr; } }; }} #endif