|
FAUST compiler
0.9.9.6b8
|
A tree library with hashconsing and maximal sharing capabilities. More...


Go to the source code of this file.
Classes | |
| class | CTree |
| A CTree = (Node x [CTree]) is a Node associated with a list of subtrees called branches. More... | |
| class | Tabber |
Typedefs | |
| typedef CTree * | Tree |
| typedef map< Tree, Tree > | plist |
| typedef vector< Tree > | tvec |
Functions | |
| Tree | tree (const Node &n) |
| Tree | tree (const Node &n, const Tree &a) |
| Tree | tree (const Node &n, const Tree &a, const Tree &b) |
| Tree | tree (const Node &n, const Tree &a, const Tree &b, const Tree &c) |
| Tree | tree (const Node &n, const Tree &a, const Tree &b, const Tree &c, const Tree &d) |
| Tree | tree (const Node &n, const Tree &a, const Tree &b, const Tree &c, const Tree &d, const Tree &e) |
| int | tree2int (Tree t) |
| if t has a node of type int, return it otherwise error | |
| double | tree2float (Tree t) |
| if t has a node of type float, return it otherwise error | |
| double | tree2double (Tree t) |
| if t has a node of type float, return it otherwise error | |
| const char * | tree2str (Tree t) |
| if t has a node of type symbol, return its name otherwise error | |
| void * | tree2ptr (Tree t) |
| if t has a node of type ptr, return it otherwise error | |
| void * | getUserData (Tree t) |
| if t has a node of type symbol, return the associated user data | |
| bool | isTree (const Tree &t, const Node &n) |
| bool | isTree (const Tree &t, const Node &n, Tree &a) |
| bool | isTree (const Tree &t, const Node &n, Tree &a, Tree &b) |
| bool | isTree (const Tree &t, const Node &n, Tree &a, Tree &b, Tree &c) |
| bool | isTree (const Tree &t, const Node &n, Tree &a, Tree &b, Tree &c, Tree &d) |
| bool | isTree (const Tree &t, const Node &n, Tree &a, Tree &b, Tree &c, Tree &d, Tree &e) |
| ostream & | operator<< (ostream &s, const CTree &t) |
| Tree | rec (Tree body) |
| create a de Bruijn recursive tree | |
| Tree | rec (Tree id, Tree body) |
| create a symbolic recursive tree | |
| bool | isRec (Tree t, Tree &body) |
| is t a de Bruijn recursive tree | |
| bool | isRec (Tree t, Tree &id, Tree &body) |
| is t a symbolic recursive tree | |
| Tree | ref (int level) |
| create a de Bruijn recursive reference | |
| Tree | ref (Tree id) |
| create a symbolic recursive reference | |
| bool | isRef (Tree t, int &level) |
| is t a de Bruijn recursive reference | |
| bool | isRef (Tree t, Tree &id) |
| is t a symbolic recursive reference | |
| bool | isOpen (Tree t) |
| t contains free de Bruijn references | |
| bool | isClosed (Tree t) |
| t dont contain free de Bruijn ref | |
| Tree | lift (Tree t) |
| Tree | deBruijn2Sym (Tree t) |
| void | updateAperture (Tree t) |
| ostream & | operator<< (ostream &s, Tabber &t) |
Variables | |
| Tabber | TABBER |
A tree library with hashconsing and maximal sharing capabilities.
A tree library with hashconsing and maximal sharing capabilities.
API:
Useful conversions :
Pattern matching :
Accessors :
Attributs :
Properties:
If p and q are two CTree pointers : p != q <=> *p != *q
Definition in file tree.hh.
| Tree deBruijn2Sym | ( | Tree | t | ) |
Definition at line 223 of file recursive-tree.cpp.
References calcDeBruijn2Sym(), CTree::getProperty(), isClosed(), and CTree::setProperty().
Referenced by calcDeBruijn2Sym(), mapPrepareEqSig(), and ScalarCompiler::prepare().
{
assert(isClosed(t));
Tree t2 = t->getProperty(DEBRUIJN2SYM);
if (!t2) {
t2 = calcDeBruijn2Sym(t);
t->setProperty(DEBRUIJN2SYM, t2);
}
return t2;
}


| void* getUserData | ( | Tree | t | ) |
if t has a node of type symbol, return the associated user data
Definition at line 372 of file tree.cpp.
References getUserData(), isSym(), and CTree::node().
{
Sym s;
if (isSym(t->node(), &s)) {
return getUserData(s);
} else {
return 0;
}
}

t dont contain free de Bruijn ref
Definition at line 237 of file tree.hh.
References CTree::aperture().
Referenced by calcliftn(), and deBruijn2Sym().


t contains free de Bruijn references
Definition at line 236 of file tree.hh.
References CTree::aperture().

is t a de Bruijn recursive tree
Definition at line 59 of file recursive-tree.cpp.
References isTree().
Referenced by annotate(), calcDeBruijn2Sym(), calcliftn(), calcsubstitute(), computePrivatisation(), VectorCompiler::generateCodeRecursions(), ScalarCompiler::generateRecProj(), DocCompiler::generateRecProj(), getSubSignals(), infereSigOrder(), infereSigType(), ppsig::print(), printSignal(), recdraw(), recomputeAperture(), sigLabel(), sigMap(), sigMapRename(), symlistVisit(), typeAnnotation(), and sigvisitor::visit().


is t a symbolic recursive tree
Definition at line 95 of file recursive-tree.cpp.
References CTree::getProperty(), and isTree().
{
if (isTree(t, SYMREC, var)) {
body = t->getProperty(RECDEF);
return true;
} else {
return false;
}
}

is t a de Bruijn recursive reference
Definition at line 70 of file recursive-tree.cpp.
References isInt(), isTree(), and CTree::node().
Referenced by calcDeBruijn2Sym(), calcliftn(), calcsubstitute(), infereSigOrder(), ppsig::print(), printSignal(), recomputeAperture(), sigMapRename(), and sigvisitor::visit().
{
Tree u;
if (isTree(t, DEBRUIJNREF, u)) {
return isInt(u->node(), &level);
} else {
return false;
}
}


is t a symbolic recursive reference
Definition at line 111 of file recursive-tree.cpp.
References isTree().

Definition at line 305 of file tree.cpp.
References CTree::node().
Referenced by isBoxAbstr(), isBoxAccess(), isBoxAppl(), isBoxButton(), isBoxCase(), isBoxCheckbox(), isBoxComponent(), isBoxCut(), isBoxEnvironment(), isBoxError(), isBoxFConst(), isBoxFFun(), isBoxFVar(), isBoxHBargraph(), isBoxHGroup(), isBoxHSlider(), isBoxIdent(), isBoxIPar(), isBoxIProd(), isBoxISeq(), isBoxISum(), isBoxLibrary(), isBoxMerge(), isBoxModifLocalDef(), isBoxNumEntry(), isBoxPar(), isBoxPatternMatcher(), isBoxPatternVar(), isBoxPrim0(), isBoxPrim1(), isBoxPrim2(), isBoxPrim3(), isBoxPrim4(), isBoxPrim5(), isBoxRec(), isBoxSeq(), isBoxSlot(), isBoxSplit(), isBoxSymbolic(), isBoxTGroup(), isBoxVBargraph(), isBoxVGroup(), isBoxVSlider(), isBoxWire(), isBoxWithLocalDef(), isClosure(), isDocDgm(), isDocEqn(), isDocLst(), isDocMtd(), isDocNtc(), isDocTxt(), isImportFile(), isPathCurrent(), isPathParent(), isPathRoot(), isProj(), isRec(), isRef(), isSigAttach(), isSigBinOp(), isSigButton(), isSigCheckbox(), isSigDelay1(), isSigDocAccessTbl(), isSigDocConstantTbl(), isSigDocWriteTbl(), isSigFConst(), isSigFFun(), isSigFixDelay(), isSigFloatCast(), isSigFVar(), isSigGen(), isSigHBargraph(), isSigHSlider(), isSigInput(), isSigIntCast(), isSigIota(), isSigNumEntry(), isSigOutput(), isSigPrefix(), isSigRDTbl(), isSigSelect2(), isSigSelect3(), isSigTable(), isSigTuple(), isSigTupleAccess(), isSigVBargraph(), isSigVSlider(), isSigWRTbl(), isUiFolder(), and isUiWidget().
{
return (t->node() == n);
}

Definition at line 310 of file tree.cpp.
References CTree::arity(), CTree::branch(), and CTree::node().
{
if ((t->node() == n) && (t->arity() == 1)) {
a=t->branch(0);
return true;
} else {
return false;
}
}

Definition at line 320 of file tree.cpp.
References CTree::arity(), CTree::branch(), and CTree::node().
{
if ((t->node() == n) && (t->arity() == 2)) {
a=t->branch(0);
b=t->branch(1);
return true;
} else {
return false;
}
}

Definition at line 331 of file tree.cpp.
References CTree::arity(), CTree::branch(), and CTree::node().
{
if ((t->node() == n) && (t->arity() == 3)) {
a=t->branch(0);
b=t->branch(1);
c=t->branch(2);
return true;
} else {
return false;
}
}

Definition at line 343 of file tree.cpp.
References CTree::arity(), CTree::branch(), and CTree::node().
{
if ((t->node() == n) && (t->arity() == 4)) {
a=t->branch(0);
b=t->branch(1);
c=t->branch(2);
d=t->branch(3);
return true;
} else {
return false;
}
}

Definition at line 356 of file tree.cpp.
References CTree::arity(), CTree::branch(), and CTree::node().
{
if ((t->node() == n) && (t->arity() == 5)) {
a=t->branch(0);
b=t->branch(1);
c=t->branch(2);
d=t->branch(3);
e=t->branch(4);
return true;
} else {
return false;
}
}

Definition at line 149 of file recursive-tree.cpp.
References liftn().
Referenced by listLift(), and propagate().
{ return liftn(t, 1); }


| ostream& operator<< | ( | ostream & | s, |
| const CTree & | t | ||
| ) | [inline] |
Definition at line 210 of file tree.hh.
References CTree::print().
{ return t.print(s); }

| ostream& operator<< | ( | ostream & | s, |
| Tabber & | t | ||
| ) | [inline] |
Definition at line 262 of file tree.hh.
References Tabber::print().
{ return t.print(s); }

create a de Bruijn recursive tree
Definition at line 54 of file recursive-tree.cpp.
References tree().
Referenced by calcDeBruijn2Sym(), calcliftn(), calcsubstitute(), computePrivatisation(), propagate(), sigMap(), and sigMapRename().


create a symbolic recursive tree
Definition at line 88 of file recursive-tree.cpp.
References CTree::setProperty(), and tree().
{
Tree t = tree(SYMREC, var);
t->setProperty(RECDEF, body);
return t;
}

create a de Bruijn recursive reference
Definition at line 64 of file recursive-tree.cpp.
References tree().
Referenced by calcDeBruijn2Sym(), calcliftn(), propagate(), and sigMapRename().
{
assert(level > 0);
return tree(DEBRUIJNREF, tree(level)); // reference to enclosing recursive tree starting from 1
}


create a symbolic recursive reference
Definition at line 106 of file recursive-tree.cpp.
References tree().

Definition at line 185 of file tree.hh.
References CTree::make().
Referenced by addNums(), annotate(), autoName(), xtended::box(), boxAbstr(), boxAccess(), boxAppl(), boxButton(), boxCaseInternal(), boxCheckbox(), boxComplexity(), boxComponent(), boxCut(), boxEnvironment(), boxError(), boxFConst(), boxFFun(), boxFVar(), boxHBargraph(), boxHGroup(), boxHSlider(), boxIdent(), boxInt(), boxIPar(), boxIProd(), boxISeq(), boxISum(), boxLibrary(), boxMerge(), boxModifLocalDef(), boxNumEntry(), boxPar(), boxPatternMatcher(), boxPatternVar(), boxPrim0(), boxPrim1(), boxPrim2(), boxPrim3(), boxPrim4(), boxPrim5(), boxReal(), boxRec(), boxSeq(), boxSlot(), boxSplit(), boxSymbolic(), boxTGroup(), boxVBargraph(), boxVGroup(), boxVSlider(), boxWire(), boxWithLocalDef(), calcDeBruijn2Sym(), closure(), codeSimpleType(), codeTableType(), combineDivLeft(), computePrivatisation(), CosPrim::computeSigOutput(), AtanPrim::computeSigOutput(), SinPrim::computeSigOutput(), TanPrim::computeSigOutput(), AcosPrim::computeSigOutput(), AsinPrim::computeSigOutput(), Atan2Prim::computeSigOutput(), FloorPrim::computeSigOutput(), ExpPrim::computeSigOutput(), FmodPrim::computeSigOutput(), CeilPrim::computeSigOutput(), RemainderPrim::computeSigOutput(), PowPrim::computeSigOutput(), AbsPrim::computeSigOutput(), LogPrim::computeSigOutput(), MaxPrim::computeSigOutput(), MinPrim::computeSigOutput(), Log10Prim::computeSigOutput(), SqrtPrim::computeSigOutput(), RintPrim::computeSigOutput(), cons(), declareAutoDoc(), declareMetadata(), divExtendedNums(), divNums(), docDgm(), docEqn(), docLst(), docMtd(), docNtc(), docTxt(), encodeName(), ffunction(), gcd(), ScalarCompiler::generateButton(), ScalarCompiler::generateCheckbox(), ScalarCompiler::generateHBargraph(), ScalarCompiler::generateHSlider(), ScalarCompiler::generateNumEntry(), ScalarCompiler::generateVBargraph(), ScalarCompiler::generateVSlider(), getBoxType(), getEvalProperty(), getPMProperty(), getSigOrder(), importFile(), inverseNum(), iteratePar(), iterateProd(), iterateSeq(), iterateSum(), label2path(), liftn(), main(), makePrivatisationKey(), makePrivatisationLabel(), OccMarkup::mark(), minusNum(), mulNums(), normalizeDelay1Term(), aterm::normalizedTree(), mterm::normalizedTree(), pathCurrent(), pathParent(), pathRoot(), patternSimplification(), printheader(), Klass::printMetadata(), propagate(), pushEnvBarrier(), pushNewLayer(), realeval(), rec(), ref(), property< Loop * >::set(), property< int >::set(), property< double >::set(), setColorProperty(), Occurrences::setCount(), setDefNameProperty(), setDefProp(), setEvalProperty(), OccMarkup::setOcc(), setPMProperty(), ScalarCompiler::setSharingCount(), DocCompiler::setSharingCount(), setSigNickname(), shprkey(), sigAttach(), sigBinOp(), sigButton(), sigCheckbox(), sigDelay1(), sigDocAccessTbl(), sigDocConstantTbl(), sigDocWriteTbl(), sigFConst(), sigFFun(), sigFixDelay(), sigFloatCast(), sigFVar(), sigGen(), sigHBargraph(), sigHSlider(), sigInput(), sigInt(), sigIntCast(), sigIota(), sigMap(), sigMapRename(), sigNumEntry(), sigOutput(), sigPow(), sigPrefix(), sigProj(), sigRDTbl(), sigReal(), sigSelect2(), sigSelect3(), sigTable(), sigTuple(), sigTupleAccess(), sigVBargraph(), sigVSlider(), sigWRTbl(), simplification(), Occurrences::specificKey(), subNums(), subst(), substitute(), substkey(), tmap(), uiFolder(), uiWidget(), unquote(), writeSchemaFile(), and yyparse().
{ Tree br[1]; return CTree::make(n, 0, br); }

Definition at line 186 of file tree.hh.
References CTree::make().
{ Tree br[]= {a}; return CTree::make(n, 1, br); }

Definition at line 187 of file tree.hh.
References CTree::make().
{ Tree br[]= {a,b}; return CTree::make(n, 2, br); }

Definition at line 188 of file tree.hh.
References CTree::make().
{ Tree br[]= {a,b,c}; return CTree::make(n, 3, br); }

| Tree tree | ( | const Node & | n, |
| const Tree & | a, | ||
| const Tree & | b, | ||
| const Tree & | c, | ||
| const Tree & | d | ||
| ) | [inline] |
Definition at line 189 of file tree.hh.
References CTree::make().
{ Tree br[]= {a,b,c,d}; return CTree::make(n, 4, br); }

| Tree tree | ( | const Node & | n, |
| const Tree & | a, | ||
| const Tree & | b, | ||
| const Tree & | c, | ||
| const Tree & | d, | ||
| const Tree & | e | ||
| ) | [inline] |
Definition at line 191 of file tree.hh.
References CTree::make().
{ Tree br[]= {a,b,c,d,e}; return CTree::make(n, 5, br); }

| double tree2double | ( | Tree | t | ) |
if t has a node of type float, return it otherwise error
Definition at line 262 of file tree.cpp.
References ERROR, isDouble(), isInt(), and CTree::node().
Referenced by Description::addWidget().
{
double x;
int i;
if (isInt(t->node(), &i)) {
x = double(i);
} else if (isDouble(t->node(), &x)) {
//nothing to do
} else {
ERROR("the node of the tree is not a float nor an int", t);
}
return double(x);
}


| double tree2float | ( | Tree | t | ) |
if t has a node of type float, return it otherwise error
Definition at line 246 of file tree.cpp.
References ERROR, isDouble(), isInt(), and CTree::node().
Referenced by eval2double(), ScalarCompiler::generateHSlider(), ScalarCompiler::generateNumEntry(), ScalarCompiler::generateVSlider(), Compiler::generateWidgetCode(), Compiler::generateWidgetMacro(), infereSigType(), and DocCompiler::prepareIntervallicUI().
{
double x;
int i;
if (isInt(t->node(), &i)) {
x = double(i);
} else if (isDouble(t->node(), &x)) {
//nothing to do
} else {
ERROR("the node of the tree is not a float nor an int", t);
}
return x;
}


if t has a node of type int, return it otherwise error
Definition at line 230 of file tree.cpp.
References ERROR, isDouble(), isInt(), and CTree::node().
Referenced by Description::addGroup(), annotate(), boxComplexity(), eval2int(), ffargtype(), ffrestype(), Compiler::generateUserInterfaceTree(), getRecursivness(), getSigOrder(), infereFConstType(), infereFVarType(), and isBoxPatternMatcher().
{
double x;
int i;
if (isInt(t->node(), &i)) {
// nothing to do
} else if (isDouble(t->node(), &x)) {
i = int(x);
} else {
ERROR("the node of the tree is not an int nor a float", t);
}
return i;
}


if t has a node of type ptr, return it otherwise error
Definition at line 288 of file tree.cpp.
References ERROR, isPointer(), and CTree::node().
Referenced by getColorProperty(), OccMarkup::getOcc(), and isBoxPatternMatcher().
{
void* x;
if (! isPointer(t->node(), &x)) {
ERROR("the node of the tree is not a pointer", t);
}
return x;
}


if t has a node of type symbol, return its name otherwise error
Definition at line 278 of file tree.cpp.
References ERROR, isSym(), name(), and CTree::node().
Referenced by Description::addGroup(), Description::addWidget(), applyList(), DocCompiler::compileLateq(), declareAutoDoc(), declareMetadata(), SourceReader::expandrec(), extractName(), ffincfile(), fflibfile(), ffname(), ScalarCompiler::generateCode(), DocCompiler::generateCode(), generateDiagramSchema(), generateInputSlotSchema(), generateInsideSchema(), Compiler::generateMacroInterfaceTree(), generateOutputSlotSchema(), Compiler::generateUserInterfaceTree(), Compiler::generateWidgetCode(), Compiler::generateWidgetMacro(), DocCompiler::getUIDir(), DocCompiler::getUIDocInfos(), legalFileName(), main(), mapGetEqName(), ppsig::print(), boxpp::print(), printDocMetadata(), realeval(), and writeSchemaFile().
{
Sym s;
if (!isSym(t->node(), &s)) {
ERROR("the node of the tree is not a symbol", t);
}
return name(s);
}


| void updateAperture | ( | Tree | t | ) |
Definition at line 320 of file recursive-tree.cpp.
References markOpen(), and recomputeAperture().
{
markOpen(t);
recomputeAperture(t, NULL);
}

Definition at line 87 of file tree.cpp.
Referenced by annotationStatistics(), getSigType(), setSigType(), T(), and traced_simplification().
1.8.0