helper function for statistics and such that determines which features are involved in this feature expression
helper function for statistics and such that determines which features are involved in this feature expression
counts the number of features in this expression for statistic purposes
counts the number of features in this expression for statistic purposes
Check structural equality, assuming that all component nodes have already been canonicalized.
Check structural equality, assuming that all component nodes have already been canonicalized. The default implementation checks for pointer equality.
uses a SAT solver to determine whether two expressions are equivalent.
uses a SAT solver to determine whether two expressions are equivalent.
for performance reasons, it checks pointer equivalence first, but won't use the recursive equals on aexpr (there should only be few cases when equals is more accurate than eq, which are not worth the performance overhead)
evaluate the expression for a given feature selection (all features not provided are assumed deselected)
evaluate the expression for a given feature selection (all features not provided are assumed deselected)
features provided as a list of names (how they would be created with createDefinedExternal)
evaluates to true or false
NOT implemented, this method will always return None.
NOT implemented, this method will always return None.
NOT implemented, this method will always return None.
NOT implemented, this method will always return None.
checks whether there is some unresolved macro (DefinedMacro) somewhere in the expression tree
checks whether there is some unresolved macro (DefinedMacro) somewhere in the expression tree
x.
x.isSatisfiable(fm) is short for x.and(fm).isSatisfiable but is faster because FM is cached
heuristic to determine whether a feature expression is small (may be used to decide whether to inline it or not)
heuristic to determine whether a feature expression is small (may be used to decide whether to inline it or not)
use with care
FM -> X is tautology if FM.
FM -> X is tautology if FM.implies(X).isTautology or !FM.and.(x.not).isSatisfiable
not final for optimization purposes
map function that applies to all leafs in the feature expression (i.
map function that applies to all leafs in the feature expression (i.e. all DefinedExpr nodes)
Prints the textual representation of this formula on a Writer.
Prints the textual representation of this formula on a Writer. The result shall be equivalent to p.print(toTextExpr), but it should avoid consuming so much temporary space.
the output Writer
replaces all DefinedMacro tokens by their full expansion.
replaces all DefinedMacro tokens by their full expansion.
the resulting feature expression contains only DefinedExternal nodes as leafs and can be printed and read again
creates an equivalent feature expression in CNF
creates an equivalent feature expression in CNF
be aware of exponential explosion. consider using toCnfEquiSat instead if possible
creates an equisatisfiable feature expression in CNF
creates an equisatisfiable feature expression in CNF
the result is not equivalent but will yield the same result in satisifiability tests with SAT solvers
the algorithm introduces new variables and is faster than toCNF
Converts this formula to a textual expression.
Converts this formula to a textual expression.
unique existential quantification over feature "feature".
unique existential quantification over feature "feature".
This has the effect of substituting the feature by true and false respectively and returning the xor of both: this[feature->True] xor this[feature->False]
It can be seen as identifying under which condition the feature matters for the result of the formula