18bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//== ProgramState_Fwd.h - Incomplete declarations of ProgramState -*- C++ -*--=/
28bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//
38bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//                     The LLVM Compiler Infrastructure
48bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//
58bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek// This file is distributed under the University of Illinois Open Source
68bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek// License. See LICENSE.TXT for details.
78bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//
88bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek//===----------------------------------------------------------------------===//
98bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek
108bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek#ifndef LLVM_CLANG_PROGRAMSTATE_FWD_H
118bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek#define LLVM_CLANG_PROGRAMSTATE_FWD_H
128bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek
13c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith#include "clang/Basic/LLVM.h"
14a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis#include "llvm/ADT/IntrusiveRefCntPtr.h"
15a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis
168bef8238181a30e52dea380789a7e2d760eac532Ted Kremeneknamespace clang {
178bef8238181a30e52dea380789a7e2d760eac532Ted Kremeneknamespace ento {
188bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek  class ProgramState;
198bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek  class ProgramStateManager;
20a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis  void ProgramStateRetain(const ProgramState *state);
21a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis  void ProgramStateRelease(const ProgramState *state);
22a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis}
23a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis}
24a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis
25a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidisnamespace llvm {
26a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis  template <> struct IntrusiveRefCntPtrInfo<const clang::ento::ProgramState> {
27a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis    static void retain(const clang::ento::ProgramState *state) {
28a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis      clang::ento::ProgramStateRetain(state);
29a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis    }
30a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis    static void release(const clang::ento::ProgramState *state) {
31a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis      clang::ento::ProgramStateRelease(state);
32a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis    }
33a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis  };
34a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis}
35a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidis
36a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidisnamespace clang {
37a5888f61be9f8d76e9b48a453dbced50523bd2e0Argyrios Kyrtzidisnamespace ento {
38c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith  typedef IntrusiveRefCntPtr<const ProgramState> ProgramStateRef;
398bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek}
408bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek}
418bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek
428bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek#endif
438bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek
44