3#include <boost/optional.hpp>
6#include <unordered_map>
25template<DdType LibraryType>
26class DdManager :
public std::enable_shared_from_this<DdManager<LibraryType>> {
28 friend class Bdd<LibraryType>;
30 template<DdType LibraryTypePrime,
typename ValueType>
33 template<DdType LibraryTypePrime,
typename ValueType>
69 template<
typename ValueType>
84 template<
typename ValueType>
92 template<
typename ValueType>
100 template<
typename ValueType>
108 template<
typename ValueType>
140 template<
typename ValueType>
149 Bdd<LibraryType> getIdentity(std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>>
const& variablePairs,
150 bool restrictToFirstRange =
true)
const;
185 boost::optional<uint64_t>
const& numberOfLayers = boost::none);
194 std::pair<storm::expressions::Variable, storm::expressions::Variable>
addMetaVariable(
195 std::string
const& variableName, int_fast64_t low, int_fast64_t high,
196 boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none);
205 std::string
const& variableName, int_fast64_t low, int_fast64_t high, uint64_t numberOfLayers,
206 boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none);
215 std::string
const& variableName, uint64_t bits, uint64_t numberOfLayers,
216 boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none);
223 std::pair<storm::expressions::Variable, storm::expressions::Variable>
addMetaVariable(
224 std::string
const& variableName, boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none);
233 std::string
const& variableName, uint64_t numberOfLayers,
234 boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none);
321 std::vector<uint_fast64_t>
getSortedVariableIndices(std::set<storm::expressions::Variable>
const& metaVariables)
const;
350 void execute(std::function<
void()>
const& f)
const;
360 std::vector<storm::expressions::Variable> addMetaVariableHelper(
361 MetaVariableType const& type, std::string
const& name, uint64_t numberOfDdVariables, uint64_t numberOfLayers,
362 boost::optional<std::pair<MetaVariablePosition, storm::expressions::Variable>>
const& position = boost::none,
363 boost::optional<std::pair<int_fast64_t, int_fast64_t>>
const& bounds = boost::none);
370 std::vector<std::string> getDdVariableNames()
const;
377 std::vector<storm::expressions::Variable> getDdVariables()
const;
414 std::unordered_map<storm::expressions::Variable, DdMetaVariable<LibraryType>> metaVariableMap;
417 std::shared_ptr<storm::expressions::ExpressionManager> manager;
storm::expressions::Variable getMetaVariable(std::string const &variableName) const
Retrieves the given meta variable by name.
Add< LibraryType, ValueType > getAddOne() const
Retrieves an ADD representing the constant one function.
bool hasMetaVariable(std::string const &variableName) const
Retrieves whether the given meta variable name is already in use.
std::shared_ptr< DdManager< LibraryType > > asSharedPointer()
static std::shared_ptr< DdManager< LibraryType > > createWithDefaultEnvironment()
Creates a new manager that is configured according to a default environment.
Add< LibraryType, ValueType > getAddZero() const
Retrieves an ADD representing the constant zero function.
std::vector< uint_fast64_t > getSortedVariableIndices() const
Retrieves the (sorted) list of the variable indices of the DD variables given by the meta variable se...
std::set< storm::expressions::Variable > getAllMetaVariables() const
Retrieves the set of meta variables contained in the DD.
InternalDdManager< LibraryType > & getInternalDdManager()
Retrieves the internal DD manager.
Bdd< LibraryType > getCube(storm::expressions::Variable const &variable) const
Retrieves a BDD that is the cube of the variables representing the given meta variable.
Add< LibraryType, ValueType > getInfinity() const
Retrieves an ADD representing the constant infinity function.
void execute(std::function< void()> const &f) const
All code that manipulates DDs shall be called through this function.
Bdd< LibraryType > getBddOne() const
Retrieves a BDD representing the constant one function.
DdManager(DdManager< LibraryType > &&other)=default
std::set< std::string > getAllMetaVariableNames() const
Retrieves the names of all meta variables that have been added to the manager.
Bdd< LibraryType > getBddZero() const
Retrieves a BDD representing the constant zero function.
void triggerReordering()
Triggers a reordering of the DDs managed by this manager (if supported).
DdManager(DdManager< LibraryType > const &other)=delete
Bdd< LibraryType > getEncoding(storm::expressions::Variable const &variable, int_fast64_t value, bool mostSignificantBitAtTop=true) const
Retrieves the BDD representing the function that maps all inputs which have the given meta variable e...
bool isDynamicReorderingAllowed() const
Retrieves whether dynamic reordering is currently allowed (if supported).
std::vector< storm::expressions::Variable > cloneVariable(storm::expressions::Variable const &variable, std::string const &newVariableName, boost::optional< uint64_t > const &numberOfLayers=boost::none)
Clones the given meta variable and optionally changes the number of layers of the variable.
Add< LibraryType, ValueType > getIdentity(storm::expressions::Variable const &variable) const
Retrieves the ADD representing the identity of the meta variable, i.e., a function that maps all lega...
Add< LibraryType, ValueType > getAddUndefined() const
Retrieves an ADD representing an undefined value.
bool supportsOrderedInsertion() const
Checks whether this manager supports the ordered insertion of variables, i.e.
Bdd< LibraryType > getRange(storm::expressions::Variable const &variable) const
Retrieves the BDD representing the range of the meta variable, i.e., a function that maps all legal v...
std::pair< storm::expressions::Variable, storm::expressions::Variable > addMetaVariable(std::string const &variableName, int_fast64_t low, int_fast64_t high, boost::optional< std::pair< MetaVariablePosition, storm::expressions::Variable > > const &position=boost::none)
Adds an integer meta variable with the given range with two layers (a 'normal' and a 'primed' one).
DdManager< LibraryType > & operator=(DdManager< LibraryType > const &other)=delete
Add< LibraryType, ValueType > getConstant(ValueType const &value) const
Retrieves an ADD representing the constant function with the given value.
DdManager< LibraryType > & operator=(DdManager< LibraryType > &&other)=default
std::vector< storm::expressions::Variable > addBitVectorMetaVariable(std::string const &variableName, uint64_t bits, uint64_t numberOfLayers, boost::optional< std::pair< MetaVariablePosition, storm::expressions::Variable > > const &position=boost::none)
Creates a meta variable with the given number of layers.
DdManager(storm::Environment const &env)
Creates an empty manager without any meta variables.
void allowDynamicReordering(bool value)
Sets whether dynamic reordering is allowed for the DDs managed by this manager (if supported).
void debugCheck() const
Performs a debug check if available.
std::size_t getNumberOfMetaVariables() const
Retrieves the number of meta variables that are contained in this manager.
This class is responsible for managing a set of typed variables and all expressions using these varia...