/// <summary> /// Assumes that set is a union of some minterms (or empty). /// If null then null is returned. /// </summary> public BitVector ConvertFromBDD(BDD set, CharSetSolver solver) { BDD[] partition = _minterms; BitVector result = Empty; for (int i = 0; i < partition.Length; i++) { if (!solver.IsEmpty(solver.And(partition[i], set))) { result = BitVector.Or(result, _mintermVectors[i]); } } return(result); }
/// <summary> /// Assumes that set is a union of some minterms (or empty). /// If null then 0 is returned. /// </summary> public ulong ConvertFromBDD(BDD set, CharSetSolver solver) { BDD[] partition = _minterms; ulong result = 0; for (int i = 0; i < partition.Length; i++) { // Set the i'th bit if the i'th minterm is in the set. if (!solver.IsEmpty(solver.And(partition[i], set))) { result |= (ulong)1 << i; } } return(result); }