FAUST compiler  0.9.9.6b8
Classes | Typedefs | Functions | Variables
tree.hh File Reference

A tree library with hashconsing and maximal sharing capabilities. More...

#include "symbol.hh"
#include "node.hh"
#include <vector>
#include <map>
#include <assert.h>
Include dependency graph for tree.hh:
This graph shows which files directly or indirectly include this file:

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 CTreeTree
typedef map< Tree, Treeplist
typedef vector< Treetvec

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

Detailed Description

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.


Typedef Documentation

typedef map<Tree, Tree> plist

Definition at line 89 of file tree.hh.

typedef CTree* Tree

Definition at line 86 of file tree.hh.

typedef vector<Tree> tvec

Definition at line 90 of file tree.hh.


Function Documentation

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;
}

Here is the call graph for this function:

Here is the caller graph for this function:

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;
    }
}

Here is the call graph for this function:

bool isClosed ( Tree  t) [inline]

t dont contain free de Bruijn ref

Definition at line 237 of file tree.hh.

References CTree::aperture().

Referenced by calcliftn(), and deBruijn2Sym().

Here is the call graph for this function:

Here is the caller graph for this function:

bool isOpen ( Tree  t) [inline]

t contains free de Bruijn references

Definition at line 236 of file tree.hh.

References CTree::aperture().

Here is the call graph for this function:

bool isRec ( Tree  t,
Tree body 
)
bool isRec ( Tree  t,
Tree id,
Tree body 
)

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;
    }
}

Here is the call graph for this function:

bool isRef ( Tree  t,
int &  level 
)

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;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool isRef ( Tree  t,
Tree id 
)

is t a symbolic recursive reference

Definition at line 111 of file recursive-tree.cpp.

References isTree().

{
    return isTree(t, SYMREC, v);
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n 
)

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);
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n,
Tree a 
)

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;
    }
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n,
Tree a,
Tree b 
)

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;
    }
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n,
Tree a,
Tree b,
Tree c 
)

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;
    }
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n,
Tree a,
Tree b,
Tree c,
Tree d 
)

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;
    }
}

Here is the call graph for this function:

bool isTree ( const Tree t,
const Node n,
Tree a,
Tree b,
Tree c,
Tree d,
Tree e 
)

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;
    }
}

Here is the call graph for this function:

Tree lift ( Tree  t)

Definition at line 149 of file recursive-tree.cpp.

References liftn().

Referenced by listLift(), and propagate().

{ return liftn(t, 1); }

Here is the call graph for this function:

Here is the caller graph for this function:

ostream& operator<< ( ostream &  s,
const CTree t 
) [inline]

Definition at line 210 of file tree.hh.

References CTree::print().

{ return t.print(s); }

Here is the call graph for this function:

ostream& operator<< ( ostream &  s,
Tabber t 
) [inline]

Definition at line 262 of file tree.hh.

References Tabber::print().

{ return t.print(s); }

Here is the call graph for this function:

Tree rec ( Tree  body)

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().

{
    return tree(DEBRUIJN, body);
}

Here is the call graph for this function:

Here is the caller graph for this function:

Tree rec ( Tree  id,
Tree  body 
)

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;
}

Here is the call graph for this function:

Tree ref ( int  level)

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
}

Here is the call graph for this function:

Here is the caller graph for this function:

Tree ref ( Tree  id)

create a symbolic recursive reference

Definition at line 106 of file recursive-tree.cpp.

References tree().

{
    return tree(SYMREC, id);            // reference to a symbolic id
}

Here is the call graph for this function:

Tree tree ( const Node n) [inline]

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); }

Here is the call graph for this function:

Tree tree ( const Node n,
const Tree a 
) [inline]

Definition at line 186 of file tree.hh.

References CTree::make().

{ Tree br[]= {a}; return CTree::make(n, 1, br); }

Here is the call graph for this function:

Tree tree ( const Node n,
const Tree a,
const Tree b 
) [inline]

Definition at line 187 of file tree.hh.

References CTree::make().

{ Tree br[]= {a,b}; return CTree::make(n, 2, br); }

Here is the call graph for this function:

Tree tree ( const Node n,
const Tree a,
const Tree b,
const Tree c 
) [inline]

Definition at line 188 of file tree.hh.

References CTree::make().

{ Tree br[]= {a,b,c}; return CTree::make(n, 3, br); }

Here is the call graph for this function:

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); }

Here is the call graph for this function:

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); }

Here is the call graph for this function:

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);
}   

Here is the call graph for this function:

Here is the caller graph for this function:

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;
}   

Here is the call graph for this function:

Here is the caller graph for this function:

int tree2int ( Tree  t)

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;
}   

Here is the call graph for this function:

Here is the caller graph for this function:

void* tree2ptr ( Tree  t)

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;
}   

Here is the call graph for this function:

Here is the caller graph for this function:

const char* tree2str ( Tree  t)
void updateAperture ( Tree  t)

Definition at line 320 of file recursive-tree.cpp.

References markOpen(), and recomputeAperture().

{
    markOpen(t);
    recomputeAperture(t, NULL);
}

Here is the call graph for this function:


Variable Documentation

Definition at line 87 of file tree.cpp.

Referenced by annotationStatistics(), getSigType(), setSigType(), T(), and traced_simplification().