DOKK / manpages / debian 10 / alliance / composebddnode.3.en
COMPOSEBDDNODE(3) BDD FUNCTIONS COMPOSEBDDNODE(3)

composebddnode - substitutes a variable by a bdd in another bdd.

See the file buster/alliance/alc_origin.1.en.gz.

#include "bdd101.h"
bddnode ∗composebddnode( BddSystem, BddNode, Variable, BddSubst )

bddsystem ∗BddSystem;
bddnode ∗BddNode;
bddvar Variable;
bddnode ∗BddSubst;

The bdd system.
The bdd node.
The variable to find.
The bdd to substitute with.

composebddnode substitutes all the occurency of the variable Variable in the bdd node BddNode by the bdd node BddSubst, in the bdd system BddSystem. If a null pointer is given, the default bdd system is used.

composebddnode returns the resulting bdd node.

"variable xxx out of range, error !"

The Variable parameter must be less or equal to the BddSystem->NUMBER_VAR field.

#include "bdd101.h"

bddsystem ∗BddSystem;
bddcircuit ∗BddCircuit;
bddnode ∗BddVariable;
bddnode ∗BddNode;
bddnode ∗BddSubst;
chain_list ∗Expr;
bddvar Variable;
BddSystem = createbddsystem( 100, 1000, 100, 50000 );
BddCircuit = createbddcircuit( "hello_world", 10, 10, BddSystem );
Expr = createablbinexpr( ABL_AND,
createablatom( "i0" ),
createablatom( "i1" ) );
BddNode = addbddcircuitabl( BddCircuit, Expr );
freeablexpr( Expr );
Expr = createablbinexpr( ABL_OR,
createablatom( "i2" ),
createablatom( "i3" ) );
BddSubst = addbddcircuitabl( BddCircuit, Expr );
freeablexpr( Expr );
BddVariable = searchbddcircuitin( (bddcircuit ∗)0, "i0" );
Variable = getbddvarbyindex( (bddsystem ∗)0, BddVariable->INDEX );
BddNode = composebddnode( (bddsystem ∗)0, BddNode, Variable, BddSubst );
Expr = convertbddcircuitabl( BddCircuit, BddNode );
/* displays (i1 and (i2 or i3)) */
viewablexpr( Expr, ABL_VIEW_VHDL );
freeablexpr( Expr );
destroybddsystem( (bddsystem ∗)0 );
destroybddcircuit( (bddcircuit ∗)0 );

bdd(1)

See the file buster/alliance/alc_bug_report.1.en.gz.

October 1, 1997 ASIM/LIP6