39 template<DdType LibraryType,
typename ValueType>
70 std::vector<uint_fast64_t>
const& sortedDdVariableIndices,
71 std::function<
bool(uint64_t)>
const& filter);
143 template<
typename ValueType>
291 uint_fast64_t getNonZeroCount(uint_fast64_t numberOfDdVariables)
const;
298 uint_fast64_t getLeafCount()
const;
305 uint_fast64_t getNodeCount()
const;
326 uint_fast64_t getIndex()
const;
333 uint_fast64_t getLevel()
const;
341 void exportToDot(std::string
const& filename, std::vector<std::string>
const& ddVariableNamesAsStrings,
bool showVariablesIfPossible =
true)
const;
348 void exportToText(std::string
const& filename)
const;
355 template<
typename ValueType>
375 std::pair<std::vector<storm::expressions::Expression>, std::unordered_map<uint_fast64_t, storm::expressions::Variable>> toExpression(
384 Odd createOdd(std::vector<uint_fast64_t>
const& ddVariableIndices)
const;
394 template<
typename ValueType>
395 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices, std::vector<ValueType>
const& sourceValues,
396 std::vector<ValueType>& targetValues)
const;
406 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices,
storm::storage::BitVector const& sourceValues,
415 std::vector<InternalBdd<DdType::CUDD>> splitIntoGroups(std::vector<uint_fast64_t>
const& ddGroupVariableIndices)
const;
419#ifdef STORM_HAVE_CUDD
425 cudd::BDD getCuddBdd() const;
432 DdNode* getCuddDdNode() const;
436#ifdef STORM_HAVE_CUDD
449 static DdNode* fromVectorRec(::DdManager* manager, uint_fast64_t& currentOffset, uint_fast64_t currentLevel, uint_fast64_t maxLevel, Odd const& odd,
450 std::vector<uint_fast64_t> const& ddVariableIndices, std::function<bool(uint64_t)> const& filter);
465 void toVectorRec(DdNode const* dd, cudd::Cudd const& manager, storm::storage::BitVector& result, Odd const& rowOdd, bool complement,
466 uint_fast64_t currentRowLevel, uint_fast64_t maxLevel, uint_fast64_t currentRowOffset,
467 std::vector<uint_fast64_t> const& ddRowVariableIndices) const;
472 std::size_t operator()(std::pair<DdNode const*, bool>
const& key)
const;
487 static std::shared_ptr<Odd> createOddRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel, uint_fast64_t maxLevel,
488 std::vector<uint_fast64_t>
const& ddVariableIndices,
489 std::vector<std::unordered_map<DdNode
const*, std::shared_ptr<Odd>>>& uniqueTableForLevels);
505 template<
typename ValueType>
506 static void filterExplicitVectorRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
507 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
508 std::vector<ValueType>& result, uint_fast64_t& currentIndex, std::vector<ValueType>
const& values);
524 static void filterExplicitVectorRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
525 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
548 std::unordered_map<uint_fast64_t, storm::expressions::Variable>& indexToVariableMap,
550 std::unordered_map<DdNode const*, uint_fast64_t>& nodeToCounterMap, std::vector<uint_fast64_t>& nextCounterForIndex);
552 void splitIntoGroupsRec(DdNode* dd,
bool negated, std::vector<
InternalBdd<DdType::CUDD>>& groups, std::vector<uint_fast64_t>
const& ddGroupVariableIndices,
553 uint_fast64_t currentLevel, uint_fast64_t maxLevel)
const;