1#ifndef ROSE_BinaryAnalysis_ModelChecker_Path_H
2#define ROSE_BinaryAnalysis_ModelChecker_Path_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_MODEL_CHECKER
6#include <Rose/BinaryAnalysis/ModelChecker/BasicTypes.h>
8#include <Rose/BinaryAnalysis/InstructionSemantics/BaseSemantics/BasicTypes.h>
9#include <Rose/BinaryAnalysis/SmtSolver.h>
10#include <Rose/BinaryAnalysis/SymbolicExpression.h>
11#include <Combinatorics.h>
14namespace BinaryAnalysis {
15namespace ModelChecker {
30 explicit Path(
const PathNodePtr &end);
40 static Ptr instance(
const ExecutionUnitPtr&);
49 static Ptr instance(
const PathPtr &prefix,
const ExecutionUnitPtr&,
const SymbolicExpression::Ptr &assertion,
50 const SmtSolver::Evidence&,
const InstructionSemantics::BaseSemantics::StatePtr &parentOutgoingState);
71 size_t nSteps()
const;
80 double processingTime()
const;
90 uint64_t
hash()
const;
91 void hash(Combinatorics::Hasher&)
const;
99 bool executionFailed()
const;
106 std::vector<SymbolicExpression::Ptr> assertions()
const;
113 PathNodePtr lastNode()
const;
121 PathNodePtr firstNode()
const;
131 std::vector<PathNodePtr> nodes()
const;
136 std::string printableName()
const;
144 void print(
const SettingsPtr&, std::ostream&,
const std::string &prefix,
size_t maxSteps)
const;
152 void toYaml(
const SettingsPtr&, std::ostream&,
const std::string &prefix,
size_t maxSteps)
const;
155 std::vector<Sarif::LocationPtr> toSarif(
size_t maxSteps)
const;
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.
uint64_t nNodes(InputIterator begin, InputIterator end)
Counts the number of nodes.
Hash hash(const std::vector< Ptr > &)
Hash zero or more expressions.
void print(const StackVariables &, const Partitioner2::PartitionerConstPtr &, std::ostream &out, const std::string &prefix="")
Print info about multiple local variables.
boost::filesystem::path Path
Name of entities in a filesystem.