32 template<DdType LibraryType,
typename ValueType>
54 std::vector<uint_fast64_t>
const& sortedDdVariableIndices,
55 std::function<
bool(uint64_t)>
const& filter);
128 template<
typename ValueType>
277 uint_fast64_t getNonZeroCount(uint_fast64_t numberOfDdVariables)
const;
284 uint_fast64_t getLeafCount()
const;
291 uint_fast64_t getNodeCount()
const;
312 uint_fast64_t getIndex()
const;
319 uint_fast64_t getLevel()
const;
327 void exportToDot(std::string
const& filename, std::vector<std::string>
const& ddVariableNamesAsStrings,
bool showVariablesIfPossible =
true)
const;
334 void exportToText(std::string
const& filename)
const;
341 template<
typename ValueType>
361 std::pair<std::vector<storm::expressions::Expression>, std::unordered_map<uint_fast64_t, storm::expressions::Variable>> toExpression(
370 Odd createOdd(std::vector<uint_fast64_t>
const& ddVariableIndices)
const;
380 template<
typename ValueType>
381 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices, std::vector<ValueType>
const& sourceValues,
382 std::vector<ValueType>& targetValues)
const;
392 void filterExplicitVector(
Odd const& odd, std::vector<uint_fast64_t>
const& ddVariableIndices,
storm::storage::BitVector const& sourceValues,
401 std::vector<InternalBdd<DdType::Sylvan>> splitIntoGroups(std::vector<uint_fast64_t>
const& ddGroupVariableIndices)
const;
410 sylvan::Bdd& getSylvanBdd();
417 sylvan::Bdd const& getSylvanBdd() const;
431 static BDD fromVectorRec(uint_fast64_t& currentOffset, uint_fast64_t currentLevel, uint_fast64_t maxLevel, Odd const& odd,
432 std::vector<uint_fast64_t> const& ddVariableIndices, std::function<bool(uint64_t)> const& filter);
437 std::size_t operator()(std::pair<BDD, bool>
const& key)
const;
452 static std::shared_ptr<Odd> createOddRec(BDD dd,
bool complement, uint_fast64_t currentLevel, uint_fast64_t maxLevel,
453 std::vector<uint_fast64_t>
const& ddVariableIndices,
454 std::vector<std::unordered_map<std::pair<BDD, bool>, std::shared_ptr<Odd>, HashFunctor>>& uniqueTableForLevels);
468 void toVectorRec(BDD dd,
storm::storage::BitVector& result,
Odd const& rowOdd,
bool complement, uint_fast64_t currentRowLevel, uint_fast64_t maxLevel,
469 uint_fast64_t currentRowOffset, std::vector<uint_fast64_t>
const& ddRowVariableIndices)
const;
484 template<
typename ValueType>
485 static void filterExplicitVectorRec(BDD dd, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
486 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
487 std::vector<ValueType>& result, uint_fast64_t& currentIndex, std::vector<ValueType>
const& values);
502 static void filterExplicitVectorRec(BDD dd, uint_fast64_t currentLevel,
bool complement, uint_fast64_t maxLevel,
503 std::vector<uint_fast64_t>
const& ddVariableIndices, uint_fast64_t currentOffset,
storm::dd::Odd const& odd,
525 std::unordered_map<uint_fast64_t, storm::expressions::Variable>& indexToVariableMap,
527 std::unordered_map<BDD, uint_fast64_t>& nodeToCounterMap, std::vector<uint_fast64_t>& nextCounterForIndex);
529 void splitIntoGroupsRec(BDD dd, std::vector<
InternalBdd<DdType::Sylvan>>& groups, std::vector<uint_fast64_t>
const& ddGroupVariableIndices,
530 uint_fast64_t currentLevel, uint_fast64_t maxLevel)
const;
536 sylvan::Bdd sylvanBdd;