Package com.igormaznitsa.jcp.expression
Class ExpressionTreeElement
java.lang.Object
com.igormaznitsa.jcp.expression.ExpressionTreeElement
The class describes a wrapper around an expression item to be saved into an expression tree
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ExpressionTreeElement[]The array contains links to the tree element childrenprivate static final ExpressionTreeElement[]Empty array to avoid unnecessary operationsstatic final ExpressionTreeElementprivate final FilePositionInfo[]Current include stack of the preprocessor to the source string.private intBecause I fill children sequentially, the variable contains the index of the first empty child slotprivate static final OperatorSUBInside constant to be used for speed up some operationsprivate ExpressionTreeElementThe link to the parent element, if it is the tree root then it contains nullprivate intThe priority of the tree element, it is very strongly used during tree sortingprivate ExpressionItemThe variable contains the wrapped expression itemprivate final StringContains the source string for the expression. -
Constructor Summary
ConstructorsModifierConstructorDescriptionprivate(package private)ExpressionTreeElement(ExpressionItem item, FilePositionInfo[] callStack, String sourceString) The constructor -
Method Summary
Modifier and TypeMethodDescriptionprivate voidAdd an expression element into the next free child slotaddSubTree(ExpressionTree tree) Add a tree as new child and make the maximum priority for itaddTreeElement(ExpressionTreeElement element) Add tree element with sorting operation depends on priority of the elementsprivate voidvoidfillArguments(List<ExpressionTree> arguments) It fills children slots from a list containing expression treesintgetArity()Get arity for the element (I mean possible children number)getChildForIndex(int index) Get the child element for its index (the first is 0)getItem()Get the wrapped itemGet the parent for the elementintGet the current priority of the elementbooleanAllows to check that the element is EMPTY_SLOTbooleanisFull()It allows to check that all children slots have been filled(package private) voidInside auxiliary function to set the maximum priority the the elementvoidPost-processing after the tree is formed, the unary minus operation will be optimizedbooleanreplaceElement(ExpressionTreeElement oldOne, ExpressionTreeElement newOne) It replaces a child element
-
Field Details
-
OPERATOR_SUB
Inside constant to be used for speed up some operations -
EMPTY_SLOT
-
EMPTY
Empty array to avoid unnecessary operations -
savedItem
The variable contains the wrapped expression item -
childElements
The array contains links to the tree element children -
parentTreeElement
The link to the parent element, if it is the tree root then it contains null -
priority
private int priorityThe priority of the tree element, it is very strongly used during tree sorting -
nextChildSlot
private int nextChildSlotBecause I fill children sequentially, the variable contains the index of the first empty child slot -
sourceString
Contains the source string for the expression. -
includeStack
Current include stack of the preprocessor to the source string.
-
-
Constructor Details
-
ExpressionTreeElement
private ExpressionTreeElement() -
ExpressionTreeElement
ExpressionTreeElement(ExpressionItem item, @MustNotContainNull FilePositionInfo[] callStack, String sourceString) The constructor- Parameters:
item- an expression item to be wrappedcallStack- current call stacksourceString- source string for the expression
-
-
Method Details
-
isEmptySlot
public boolean isEmptySlot()Allows to check that the element is EMPTY_SLOT- Returns:
- true if the element is empty slot, false otherwise
-
assertNotEmptySlot
private void assertNotEmptySlot() -
makeMaxPriority
void makeMaxPriority()Inside auxiliary function to set the maximum priority the the element -
getItem
Get the wrapped item- Returns:
- the item to be wrapped by the object
-
getArity
public int getArity()Get arity for the element (I mean possible children number)- Returns:
- the arity, zero for elements without children
-
getParent
Get the parent for the element- Returns:
- the parent for the element or null if the element is the tree root
-
getPriority
public int getPriority()Get the current priority of the element- Returns:
- the priority
-
addSubTree
Add a tree as new child and make the maximum priority for it- Parameters:
tree- a tree to be added as a child, must not be null- Returns:
- it returns this
-
replaceElement
It replaces a child element- Parameters:
oldOne- the old expression element to be replaced (must not be null)newOne- the new expression element to be used instead the old one (must not be null)- Returns:
- true if the element was found and replaced, else false
-
getChildForIndex
Get the child element for its index (the first is 0)- Parameters:
index- the index of the needed child- Returns:
- the child or EMPTY_SLOT
- Throws:
ArrayIndexOutOfBoundsException- it will be thrown if an impossible index is being used- See Also:
-
addTreeElement
Add tree element with sorting operation depends on priority of the elements- Parameters:
element- the element to be added, must not be null- Returns:
- the element which should be used as the last for the current tree
-
isFull
public boolean isFull()It allows to check that all children slots have been filled- Returns:
- true if there is not any free child slot else false
-
fillArguments
It fills children slots from a list containing expression trees- Parameters:
arguments- the list containing trees to be used as children
-
addElementToNextFreeSlot
Add an expression element into the next free child slot- Parameters:
element- an element to be added, must not be null
-
postProcess
public void postProcess()Post-processing after the tree is formed, the unary minus operation will be optimized
-