//===- StoreRef.h - Smart pointer for store objects -------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defined the type StoreRef. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_STOREREF_H #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_STOREREF_H #include namespace clang { namespace ento { class StoreManager; /// 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. using Store = const void *; class StoreRef { Store store; StoreManager &mgr; public: StoreRef(Store store, StoreManager &smgr); StoreRef(const StoreRef &sr); StoreRef &operator=(StoreRef const &newStore); ~StoreRef(); bool operator==(const StoreRef &x) const { assert(&mgr == &x.mgr); return x.store == store; } bool operator!=(const StoreRef &x) const { return !operator==(x); } Store getStore() const { return store; } const StoreManager &getStoreManager() const { return mgr; } }; } // namespace ento } // namespace clang #endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_STOREREF_H