FAUST compiler  0.9.9.6b8
Classes | Enumerations | Functions
node.hh File Reference

A Node is a tagged unions of int, double, symbol and void* used in the implementation of CTrees. More...

#include <iostream>
#include "symbol.hh"
Include dependency graph for node.hh:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  Node
 Class Node = (type x (int + double + Sym + void*)) More...

Enumerations

enum  { kIntNode, kDoubleNode, kSymNode, kPointerNode }
 Tags used to define the type of a Node. More...

Functions

ostream & operator<< (ostream &s, const Node &n)
bool isInt (const Node &n)
bool isInt (const Node &n, int *x)
bool isDouble (const Node &n)
bool isDouble (const Node &n, double *x)
bool isZero (const Node &n)
bool isGEZero (const Node &n)
bool isGTZero (const Node &n)
bool isOne (const Node &n)
bool isMinusOne (const Node &n)
bool isNum (const Node &n)
bool isSym (const Node &n)
bool isSym (const Node &n, Sym *x)
bool isPointer (const Node &n)
bool isPointer (const Node &n, void **x)
const Node addNode (const Node &x, const Node &y)
const Node subNode (const Node &x, const Node &y)
const Node mulNode (const Node &x, const Node &y)
const Node divNode (const Node &x, const Node &y)
const Node divExtendedNode (const Node &x, const Node &y)
const Node remNode (const Node &x, const Node &y)
const Node minusNode (const Node &x)
const Node inverseNode (const Node &x)
const Node lshNode (const Node &x, const Node &y)
const Node rshNode (const Node &x, const Node &y)
const Node andNode (const Node &x, const Node &y)
const Node orNode (const Node &x, const Node &y)
const Node xorNode (const Node &x, const Node &y)
const Node gtNode (const Node &x, const Node &y)
const Node ltNode (const Node &x, const Node &y)
const Node geNode (const Node &x, const Node &y)
const Node leNode (const Node &x, const Node &y)
const Node eqNode (const Node &x, const Node &y)
const Node neNode (const Node &x, const Node &y)

Detailed Description

A Node is a tagged unions of int, double, symbol and void* used in the implementation of CTrees.

Nodes are completly described by the node.h file, there is no node.cpp file.

API:

Node(symbol("abcd")); : node with symbol content Node(10); : node with int content Node(3.14159); : node with double content

n->type(); : kIntNode or kDoubleNode or kSymNode

n->getInt(); : int content of n n->getDouble(); : double content of n n->getSym(); : symbol content of n

if (isInt(n, &i)) ... : int i = int content of n if (isDouble(n, &f)) ... : double f = double content of n if (isSym(n, &s)) ... : Sym s = Sym content of n

Definition in file node.hh.


Enumeration Type Documentation

anonymous enum

Tags used to define the type of a Node.

Enumerator:
kIntNode 
kDoubleNode 
kSymNode 
kPointerNode 

Definition at line 64 of file node.hh.


Function Documentation

const Node addNode ( const Node x,
const Node y 
) [inline]

Definition at line 235 of file node.hh.

References isDouble().

Referenced by addNums().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)+double(y)) : Node(int(x)+int(y)); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node andNode ( const Node x,
const Node y 
) [inline]

Definition at line 275 of file node.hh.

    { return Node(int(x)&int(y)); }
const Node divExtendedNode ( const Node x,
const Node y 
) [inline]

Definition at line 247 of file node.hh.

References isDouble().

Referenced by divExtendedNums().

    { return  (isDouble(x)||isDouble(y)) ? Node(double(x)/double(y))
            : (double(int(x)/int(y))==double(x)/double(y)) ? Node(int(x)/int(y))
            : Node(double(x)/double(y)); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node divNode ( const Node x,
const Node y 
) [inline]

Definition at line 244 of file node.hh.

References isDouble().

Referenced by divNums(), and inverseNode().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)/double(y)) : Node(int(x)/int(y)); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node eqNode ( const Node x,
const Node y 
) [inline]

Definition at line 299 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)==double(y)) : Node(int(x)==int(y)); }

Here is the call graph for this function:

const Node geNode ( const Node x,
const Node y 
) [inline]

Definition at line 293 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)>=double(y)) : Node(int(x)>=int(y)); }

Here is the call graph for this function:

const Node gtNode ( const Node x,
const Node y 
) [inline]

Definition at line 287 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)>double(y)) : Node(int(x)>int(y)); }

Here is the call graph for this function:

const Node inverseNode ( const Node x) [inline]

Definition at line 260 of file node.hh.

References divNode().

Referenced by inverseNum().

    { return divNode(1.0f, x); }

Here is the call graph for this function:

Here is the caller graph for this function:

bool isDouble ( const Node n) [inline]
bool isDouble ( const Node n,
double *  x 
) [inline]

Definition at line 142 of file node.hh.

References Node::getDouble(), kDoubleNode, and Node::type().

{
    if (n.type() == kDoubleNode) {
        *x = n.getDouble();
        return true;
    } else {
        return false;
    }
}

Here is the call graph for this function:

bool isGEZero ( const Node n) [inline]

Definition at line 160 of file node.hh.

References Node::getDouble(), Node::getInt(), kDoubleNode, kIntNode, and Node::type().

{
    return (n.type() == kDoubleNode) && (n.getDouble() >= 0.0)
        || (n.type() == kIntNode) && (n.getInt() >= 0);
}

Here is the call graph for this function:

bool isGTZero ( const Node n) [inline]

Definition at line 166 of file node.hh.

References Node::getDouble(), Node::getInt(), kDoubleNode, kIntNode, and Node::type().

{
    return (n.type() == kDoubleNode) && (n.getDouble() > 0.0)
        || (n.type() == kIntNode) && (n.getInt() > 0);
}

Here is the call graph for this function:

bool isInt ( const Node n) [inline]
bool isInt ( const Node n,
int *  x 
) [inline]

Definition at line 125 of file node.hh.

References Node::getInt(), kIntNode, and Node::type().

{
    if (n.type() == kIntNode) {
        *x = n.getInt();
        return true;
    } else {
        return false;
    }
}

Here is the call graph for this function:

bool isMinusOne ( const Node n) [inline]

Definition at line 178 of file node.hh.

References Node::getDouble(), Node::getInt(), kDoubleNode, kIntNode, and Node::type().

{
    return (n.type() == kDoubleNode) && (n.getDouble() == -1.0)
        || (n.type() == kIntNode) && (n.getInt() == -1);
}

Here is the call graph for this function:

bool isNum ( const Node n) [inline]

Definition at line 186 of file node.hh.

References isDouble(), and isInt().

{
    return isInt(n)||isDouble(n);
}

Here is the call graph for this function:

bool isOne ( const Node n) [inline]

Definition at line 172 of file node.hh.

References Node::getDouble(), Node::getInt(), kDoubleNode, kIntNode, and Node::type().

{
    return (n.type() == kDoubleNode) && (n.getDouble() == 1.0)
        || (n.type() == kIntNode) && (n.getInt() == 1);
}

Here is the call graph for this function:

bool isPointer ( const Node n) [inline]

Definition at line 210 of file node.hh.

References kPointerNode, and Node::type().

Referenced by isBoxPrim0(), isBoxPrim1(), isBoxPrim2(), isBoxPrim3(), isBoxPrim4(), isBoxPrim5(), print(), and tree2ptr().

{
    return (n.type() == kPointerNode);
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool isPointer ( const Node n,
void **  x 
) [inline]

Definition at line 215 of file node.hh.

References Node::getPointer(), kPointerNode, and Node::type().

{
    if (n.type() == kPointerNode) {
        *x = n.getPointer();
        return true;
    } else {
        return false;
    }
}

Here is the call graph for this function:

bool isSym ( const Node n) [inline]

Definition at line 193 of file node.hh.

References kSymNode, and Node::type().

Referenced by getUserData(), isBefore(), isBoxIdent(), isDocTxt(), normalizeLabel(), print(), and tree2str().

{
    return (n.type() == kSymNode);
}

Here is the call graph for this function:

Here is the caller graph for this function:

bool isSym ( const Node n,
Sym x 
) [inline]

Definition at line 198 of file node.hh.

References Node::getSym(), kSymNode, and Node::type().

{
    if (n.type() == kSymNode) {
        *x = n.getSym();
        return true;
    } else {
        return false;
    }
}

Here is the call graph for this function:

bool isZero ( const Node n) [inline]

Definition at line 154 of file node.hh.

References Node::getDouble(), Node::getInt(), kDoubleNode, kIntNode, and Node::type().

{
    return (n.type() == kDoubleNode) && (n.getDouble() == 0.0)
        || (n.type() == kIntNode) && (n.getInt() == 0);
}

Here is the call graph for this function:

const Node leNode ( const Node x,
const Node y 
) [inline]

Definition at line 296 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)<=double(y)) : Node(int(x)<=int(y)); }

Here is the call graph for this function:

const Node lshNode ( const Node x,
const Node y 
) [inline]

Definition at line 266 of file node.hh.

    { return Node(int(x)<<int(y)); }
const Node ltNode ( const Node x,
const Node y 
) [inline]

Definition at line 290 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)<double(y)) : Node(int(x)<int(y)); }

Here is the call graph for this function:

const Node minusNode ( const Node x) [inline]

Definition at line 257 of file node.hh.

References subNode().

Referenced by minusNum().

    { return subNode(0, x); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node mulNode ( const Node x,
const Node y 
) [inline]

Definition at line 241 of file node.hh.

References isDouble().

Referenced by mulNums().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)*double(y)) : Node(int(x)*int(y)); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node neNode ( const Node x,
const Node y 
) [inline]

Definition at line 302 of file node.hh.

References isDouble().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)!=double(y)) : Node(int(x)!=int(y)); }

Here is the call graph for this function:

ostream& operator<< ( ostream &  s,
const Node n 
) [inline]

Definition at line 111 of file node.hh.

References Node::print().

{ return n.print(s); }

Here is the call graph for this function:

const Node orNode ( const Node x,
const Node y 
) [inline]

Definition at line 278 of file node.hh.

    { return Node(int(x)|int(y)); }
const Node remNode ( const Node x,
const Node y 
) [inline]

Definition at line 252 of file node.hh.

    { return Node(int(x)%int(y)); }
const Node rshNode ( const Node x,
const Node y 
) [inline]

Definition at line 269 of file node.hh.

    { return Node(int(x)>>int(y)); }
const Node subNode ( const Node x,
const Node y 
) [inline]

Definition at line 238 of file node.hh.

References isDouble().

Referenced by minusNode(), and subNums().

    { return (isDouble(x)||isDouble(y)) ? Node(double(x)-double(y)) : Node(int(x)-int(y)); }

Here is the call graph for this function:

Here is the caller graph for this function:

const Node xorNode ( const Node x,
const Node y 
) [inline]

Definition at line 281 of file node.hh.

    { return Node(int(x)^int(y)); }