| //===- 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 <cassert> |
| |
| 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 |