schmitzm.lang.tree
Class OperationTree

java.lang.Object
  extended by schmitzm.lang.tree.OperationTree
Direct Known Subclasses:
FeatureOperationTree, RasterOperationTree

public class OperationTree
extends Object

Diese Klasse stellt einen Operator-Baum dar. Dieser unterstuetzt folgende Knoten:

Damit boolesche Operatoren und arithmetische Ausdruecke kombiniert werden koennen, werden die Operanden und das Ergebis einer booleschen Operation nicht als TRUE oder FALSE, sondern numerisch codiert:
Operanden: op > 0 entspricht TRUE; op = 0 entspricht FALSE.
Ergebnis: TRUE wird als 1 codiert; FALSE wird als 0 codiert.

Version:
1.0
Author:
Martin Schmitz (University of Bonn/Germany)

Nested Class Summary
static class OperationTree.ConstantAliasNode
          Diese Knoten repraesentiert einen konstanten numerischen Wert im Operatorbaum, der jedoch nicht direkt, sondern durch einen Alias dargestellt wird (z.B.
static class OperationTree.ConstantNode
          Diese Knoten repraesentiert einen konstanten Wert im Operatorbaum.
static class OperationTree.ITENode
          Diese Knoten repraesentiert den speziellen Operator ITE (If-Then-Else) im Operatorbaum.
static class OperationTree.MultiParamOperatorNode
          Diese Knoten repraesentiert den speziellen Operator mit mehr als 2 Operanden.
static class OperationTree.OperatorNode
          Diese Knoten repraesentiert einen 2-stelligen Operator im Operatorbaum.
static class OperationTree.UnaryOperatorNode
          Diese Knoten repraesentiert einen 1-stelligen Operator im Operatorbaum.
 
Field Summary
protected  Logger LOGGER
          Logger fuer Debug-Ausgaben
protected  TreeNode rootNode
          Speichert den Wurzel-Knoten des Operator-Baums.
 
Constructor Summary
  OperationTree(OperationTree.ConstantNode root)
          Erzeugt einen neuen Operator-Baum.
  OperationTree(OperationTree.OperatorNode root)
          Erzeugt einen neuen Operator-Baum.
protected OperationTree(TreeNode root)
          Erzeugt einen neuen Operator-Baum.
 
Method Summary
 Object evaluate()
          Wertet den Operator-Baum aus.
protected  Object evaluate(TreeNode opTreeNode)
          Wertet einen Knoten des Operator-Baums aus.
 TreeNode getRoot()
          Liefert den Wurzelknoten des Operator-Baums.
protected  Object performOperation(String operator)
          Wertet einen 0-stelligen Operator (Alias oder Variable) aus.
protected  Object performOperation(String operator, Object operand)
          Wertet einen 1-stelligen Operator aus.
protected  Object performOperation(String operator, Object[] operand)
          Wertet einen n-stelligen Operator aus.
protected  Object performOperation(String operator, Object operand1, Object operand2)
          Wertet einen 2-stelligen Operator aus.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LOGGER

protected Logger LOGGER
Logger fuer Debug-Ausgaben


rootNode

protected TreeNode rootNode
Speichert den Wurzel-Knoten des Operator-Baums.

Constructor Detail

OperationTree

protected OperationTree(TreeNode root)
Erzeugt einen neuen Operator-Baum.

Parameters:
root - Wurzelknoten des Baums

OperationTree

public OperationTree(OperationTree.OperatorNode root)
Erzeugt einen neuen Operator-Baum.

Parameters:
root - Wurzelknoten des Baums

OperationTree

public OperationTree(OperationTree.ConstantNode root)
Erzeugt einen neuen Operator-Baum.

Parameters:
root - Wurzelknoten des Baums
Method Detail

getRoot

public TreeNode getRoot()
Liefert den Wurzelknoten des Operator-Baums.


evaluate

public Object evaluate()
Wertet den Operator-Baum aus.


evaluate

protected Object evaluate(TreeNode opTreeNode)
Wertet einen Knoten des Operator-Baums aus.

Parameters:
opTreeNode - BinaryTreeNode

performOperation

protected Object performOperation(String operator,
                                  Object[] operand)
Wertet einen n-stelligen Operator aus. Als Operator unterstuetzt diese Methode

Parameters:
operator - n-stelliger Operator
operand - Operanden auf die der Operator angewandt wird
Throws:
UnsupportedOperationException - falls der Operator null ist, unbekannt ist, oder auf die Operanden nicht angewendet werden kann

performOperation

protected Object performOperation(String operator,
                                  Object operand1,
                                  Object operand2)
Wertet einen 2-stelligen Operator aus. Als Operator unterstuetzt diese Methode Die boolesche Logik wird im Ergebnis als 1 (TRUE) oder 0 (FALSE) codiert. Operanden op werden als FALSE interpretiert, gdw. op == 0.

Parameters:
operator - 2-stelliger Operator
operand1 - linker Operand, auf den der Operator angewendet wird
operand2 - linker Operand, auf den der Operator angewendet wird
Returns:
op1 operator op2 oder null, wenn beide Operanden null sind
Throws:
UnsupportedOperationException - falls der Operator null ist, unbekannt ist, oder auf die Operanden nicht angewendet werden kann

performOperation

protected Object performOperation(String operator,
                                  Object operand)
Wertet einen 1-stelligen Operator aus. Als Operator unterstuetzt diese Methode Die boolesche Logik wird im Ergebnis als 1 (TRUE) oder 0 (FALSE) codiert. Operanden op werden als FALSE interpretiert, gdw. op == 0.

Parameters:
operator - 1-stelliger Operator
operand - Operand auf den der Operator angewendet wird
Returns:
operator( operand )
Throws:
UnsupportedOperationException - falls der Operator null ist, unbekannt ist, oder auf den Operanden nicht angewendet werden kann

performOperation

protected Object performOperation(String operator)
Wertet einen 0-stelligen Operator (Alias oder Variable) aus. Als Operator unterstuetzt diese Methode
  • Zufallszahl zwischen 0 und 1: "rand" oder "random"

Parameters:
operator - 0-stelliger Operator