31 template<DdType LibraryType,
typename ValueType>
34#ifdef STORM_HAVE_SYLVAN
55 std::vector<uint_fast64_t>
const& sortedDdVariableIndices,
56 std::function<
bool(uint64_t)>
const& filter);
129 template<
typename ValueType>
278 uint_fast64_t getNonZeroCount(uint_fast64_t numberOfDdVariables)
const;
285 uint_fast64_t getLeafCount()
const;
292 uint_fast64_t getNodeCount()
const;
313 uint_fast64_t getIndex()
const;
320 uint_fast64_t getLevel()
const;
328 void exportToDot(std::string
const& filename, std::vector<std::string>
const& ddVariableNamesAsStrings,
bool showVariablesIfPossible =
true)
const;
335 void exportToText(std::string
const& filename)
const;
342 template<
typename ValueType>
362 std::pair<std::vector<storm::expressions::Expression>, std::unordered_map<uint_fast64_t, storm::expressions::Variable>> toExpression(
371 Odd createOdd(std::vector<uint_fast64_t>
const& ddVariableIndices)
const;
381 template<
typename ValueType>
382 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices, std::vector<ValueType>
const& sourceValues,
383 std::vector<ValueType>& targetValues)
const;
393 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices,
storm::storage::BitVector const& sourceValues,
402 std::vector<InternalBdd<DdType::Sylvan>> splitIntoGroups(std::vector<uint_fast64_t>
const& ddGroupVariableIndices)
const;
406#ifdef STORM_HAVE_SYLVAN
412 sylvan::Bdd& getSylvanBdd();
419 sylvan::Bdd const& getSylvanBdd() const;
423#ifdef STORM_HAVE_SYLVAN
435 static BDD fromVectorRec(uint_fast64_t& currentOffset, uint_fast64_t currentLevel, uint_fast64_t maxLevel, Odd const& odd,
436 std::vector<uint_fast64_t> const& ddVariableIndices, std::function<bool(uint64_t)> const& filter);
441 std::size_t operator()(std::pair<BDD, bool>
const& key)
const;
456 static std::shared_ptr<Odd> createOddRec(BDD dd,
bool complement, uint_fast64_t currentLevel, uint_fast64_t maxLevel,
457 std::vector<uint_fast64_t>
const& ddVariableIndices,
458 std::vector<std::unordered_map<std::pair<BDD, bool>, std::shared_ptr<Odd>, HashFunctor>>& uniqueTableForLevels);
472 void toVectorRec(BDD dd,
storm::storage::BitVector& result,
Odd const& rowOdd,
bool complement, uint_fast64_t currentRowLevel, uint_fast64_t maxLevel,
473 uint_fast64_t currentRowOffset, std::vector<uint_fast64_t>
const& ddRowVariableIndices)
const;
488 template<
typename ValueType>
489 static void filterExplicitVectorRec(BDD dd, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
490 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
491 std::vector<ValueType>& result, uint_fast64_t& currentIndex, std::vector<ValueType>
const& values);
506 static void filterExplicitVectorRec(BDD dd, 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,
529 std::unordered_map<uint_fast64_t, storm::expressions::Variable>& indexToVariableMap,
531 std::unordered_map<BDD, uint_fast64_t>& nodeToCounterMap, std::vector<uint_fast64_t>& nextCounterForIndex);
533 void splitIntoGroupsRec(BDD dd, std::vector<
InternalBdd<DdType::Sylvan>>& groups, std::vector<uint_fast64_t>
const& ddGroupVariableIndices,
534 uint_fast64_t currentLevel, uint_fast64_t maxLevel)
const;
540 sylvan::Bdd sylvanBdd;