36 template<DdType LibraryType,
typename ValueType>
65 std::vector<uint_fast64_t>
const& sortedDdVariableIndices,
66 std::function<
bool(uint64_t)>
const& filter);
138 template<
typename ValueType>
286 uint_fast64_t getNonZeroCount(uint_fast64_t numberOfDdVariables)
const;
293 uint_fast64_t getLeafCount()
const;
300 uint_fast64_t getNodeCount()
const;
321 uint_fast64_t getIndex()
const;
328 uint_fast64_t getLevel()
const;
336 void exportToDot(std::string
const& filename, std::vector<std::string>
const& ddVariableNamesAsStrings,
bool showVariablesIfPossible =
true)
const;
343 void exportToText(std::string
const& filename)
const;
350 template<
typename ValueType>
370 std::pair<std::vector<storm::expressions::Expression>, std::unordered_map<uint_fast64_t, storm::expressions::Variable>> toExpression(
379 Odd createOdd(std::vector<uint_fast64_t>
const& ddVariableIndices)
const;
389 template<
typename ValueType>
390 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices, std::vector<ValueType>
const& sourceValues,
391 std::vector<ValueType>& targetValues)
const;
401 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices,
storm::storage::BitVector const& sourceValues,
410 std::vector<InternalBdd<DdType::CUDD>> splitIntoGroups(std::vector<uint_fast64_t>
const& ddGroupVariableIndices)
const;
419 cudd::BDD getCuddBdd() const;
426 DdNode* getCuddDdNode() const;
441 static DdNode* fromVectorRec(::DdManager* manager, uint_fast64_t& currentOffset, uint_fast64_t currentLevel, uint_fast64_t maxLevel, Odd const& odd,
442 std::vector<uint_fast64_t> const& ddVariableIndices, std::function<bool(uint64_t)> const& filter);
457 void toVectorRec(DdNode const* dd, cudd::Cudd const& manager, storm::storage::BitVector& result, Odd const& rowOdd, bool complement,
458 uint_fast64_t currentRowLevel, uint_fast64_t maxLevel, uint_fast64_t currentRowOffset,
459 std::vector<uint_fast64_t> const& ddRowVariableIndices) const;
464 std::size_t operator()(std::pair<DdNode const*, bool>
const& key)
const;
479 static std::shared_ptr<Odd> createOddRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel, uint_fast64_t maxLevel,
480 std::vector<uint_fast64_t>
const& ddVariableIndices,
481 std::vector<std::unordered_map<DdNode
const*, std::shared_ptr<Odd>>>& uniqueTableForLevels);
497 template<
typename ValueType>
498 static void filterExplicitVectorRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
499 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
500 std::vector<ValueType>& result, uint_fast64_t& currentIndex, std::vector<ValueType>
const& values);
516 static void filterExplicitVectorRec(DdNode
const* dd, cudd::Cudd
const& manager, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
517 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
540 std::unordered_map<uint_fast64_t, storm::expressions::Variable>& indexToVariableMap,
542 std::unordered_map<DdNode const*, uint_fast64_t>& nodeToCounterMap, std::vector<uint_fast64_t>& nextCounterForIndex);
544 void splitIntoGroupsRec(DdNode* dd,
bool negated, std::vector<
InternalBdd<DdType::CUDD>>& groups, std::vector<uint_fast64_t>
const& ddGroupVariableIndices,
545 uint_fast64_t currentLevel, uint_fast64_t maxLevel)
const;