org.apache.xpath.compiler
Class OpMap

java.lang.Object
  extended byorg.apache.xpath.compiler.OpMap
Direct Known Subclasses:
Compiler

public class OpMap
extends Object

This class represents the data structure basics of the XPath object.


Field Summary
(package private) static int BLOCKTOKENQUEUESIZE
           
protected  String m_currentPattern
          The current pattern string, for diagnostics purposes
(package private)  OpMapVector m_opMap
          An operations map is used instead of a proper parse tree.
(package private)  ObjectVector m_tokenQueue
          TokenStack is the queue of used tokens.
static int MAPINDEX_LENGTH
          The length is always the opcode position + 1.
(package private) static int MAXTOKENQUEUESIZE
          The starting size of the token queue.
 
Constructor Summary
OpMap()
           
 
Method Summary
 void error(String msg, Object[] args)
          Tell the user of an error, and probably throw an exception.
 int getArgLength(int opPos)
          Get the length of an operation.
 int getArgLengthOfStep(int opPos)
          Given a location step, get the length of that step.
static int getFirstChildPos(int opPos)
          Go to the first child of a given operation.
static int getFirstChildPosOfStep(int opPos)
          Get the first child position of a given location step.
 int getFirstPredicateOpPos(int opPos)
          Given an FROM_stepType position, return the position of the first predicate, if there is one, or else this will point to the end of the FROM_stepType.
 int getNextOpPos(int opPos)
          Given an operation position, return the end position, i.e. the beginning of the next operation.
static int getNextOpPos(int[] opMap, int opPos)
          Given an operation position, return the end position, i.e. the beginning of the next operation.
 int getNextStepPos(int opPos)
          Given a location step position, return the end position, i.e. the beginning of the next step.
 int getOp(int opPos)
          Given an operation position, return the current op.
 OpMapVector getOpMap()
          Get the opcode list that describes the XPath operations.
 String getPatternString()
          Return the expression as a string for diagnostics.
 String getStepLocalName(int opPosOfStep)
          Get the local name of the step.
 String getStepNS(int opPosOfStep)
          Get the namespace of the step.
 int getStepTestType(int opPosOfStep)
          Get the test type of the step, i.e.
 Object getToken(int pos)
          Get the XPath as a list of tokens.
 ObjectVector getTokenQueue()
          Get the XPath as a list of tokens.
 int getTokenQueueSize()
          Get size of the token queue.
 void setOp(int opPos, int value)
          Set the op at index to the given int.
(package private)  void shrink()
          Replace the large arrays with a small array.
 String toString()
          Return the expression as a string for diagnostics.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

m_currentPattern

protected String m_currentPattern
The current pattern string, for diagnostics purposes


MAXTOKENQUEUESIZE

static final int MAXTOKENQUEUESIZE
The starting size of the token queue.

See Also:
Constant Field Values

BLOCKTOKENQUEUESIZE

static final int BLOCKTOKENQUEUESIZE
See Also:
Constant Field Values

m_tokenQueue

ObjectVector m_tokenQueue
TokenStack is the queue of used tokens. The current token is the token at the end of the m_tokenQueue. The idea is that the queue can be marked and a sequence of tokens can be reused.


m_opMap

OpMapVector m_opMap
An operations map is used instead of a proper parse tree. It contains operations codes and indexes into the m_tokenQueue. I use an array instead of a full parse tree in order to cut down on the number of objects created.


MAPINDEX_LENGTH

public static final int MAPINDEX_LENGTH
The length is always the opcode position + 1. Length is always expressed as the opcode+length bytes, so it is always 2 or greater.

See Also:
Constant Field Values
Constructor Detail

OpMap

public OpMap()
Method Detail

toString

public String toString()
Return the expression as a string for diagnostics.

Overrides:
toString in class Object
Returns:
The expression string.

getPatternString

public String getPatternString()
Return the expression as a string for diagnostics.

Returns:
The expression string.

getTokenQueue

public ObjectVector getTokenQueue()
Get the XPath as a list of tokens.

Returns:
ObjectVector of tokens.

getToken

public Object getToken(int pos)
Get the XPath as a list of tokens.

Parameters:
pos - index into token queue.
Returns:
The token, normally a string.

getTokenQueueSize

public int getTokenQueueSize()
Get size of the token queue.

Returns:
The size of the token queue.

getOpMap

public OpMapVector getOpMap()
Get the opcode list that describes the XPath operations. It contains operations codes and indexes into the m_tokenQueue. I use an array instead of a full parse tree in order to cut down on the number of objects created.

Returns:
An IntVector that is the opcode list that describes the XPath operations.

shrink

void shrink()
Replace the large arrays with a small array.


getOp

public int getOp(int opPos)
Given an operation position, return the current op.

Parameters:
opPos - index into op map.
Returns:
the op that corresponds to the opPos argument.

setOp

public void setOp(int opPos,
                  int value)
Set the op at index to the given int.

Parameters:
opPos - index into op map.
value - Value to set

getNextOpPos

public int getNextOpPos(int opPos)
Given an operation position, return the end position, i.e. the beginning of the next operation.

Parameters:
opPos - An op position of an operation for which there is a size entry following.
Returns:
position of next operation in m_opMap.

getNextStepPos

public int getNextStepPos(int opPos)
Given a location step position, return the end position, i.e. the beginning of the next step.

Parameters:
opPos - the position of a location step.
Returns:
the position of the next location step.

getNextOpPos

public static int getNextOpPos(int[] opMap,
                               int opPos)
Given an operation position, return the end position, i.e. the beginning of the next operation.

Parameters:
opMap - The operations map.
opPos - index to operation, for which there is a size entry following.
Returns:
position of next operation in m_opMap.

getFirstPredicateOpPos

public int getFirstPredicateOpPos(int opPos)
                           throws javax.xml.transform.TransformerException
Given an FROM_stepType position, return the position of the first predicate, if there is one, or else this will point to the end of the FROM_stepType. Example: int posOfPredicate = xpath.getNextOpPos(stepPos); boolean hasPredicates = OpCodes.OP_PREDICATE == xpath.getOp(posOfPredicate);

Parameters:
opPos - position of FROM_stepType op.
Returns:
position of predicate in FROM_stepType structure.
Throws:
javax.xml.transform.TransformerException

error

public void error(String msg,
                  Object[] args)
           throws javax.xml.transform.TransformerException
Tell the user of an error, and probably throw an exception.

Parameters:
msg - An error msgkey that corresponds to one of the constants found in XPATHErrorResources, which is a key for a format string.
args - An array of arguments represented in the format string, which may be null.
Throws:
TransformerException - if the current ErrorListoner determines to throw an exception.

getFirstChildPos

public static int getFirstChildPos(int opPos)
Go to the first child of a given operation.

Parameters:
opPos - position of operation.
Returns:
The position of the first child of the operation.

getArgLength

public int getArgLength(int opPos)
Get the length of an operation.

Parameters:
opPos - The position of the operation in the op map.
Returns:
The size of the operation.

getArgLengthOfStep

public int getArgLengthOfStep(int opPos)
Given a location step, get the length of that step.

Parameters:
opPos - Position of location step in op map.
Returns:
The length of the step.

getFirstChildPosOfStep

public static int getFirstChildPosOfStep(int opPos)
Get the first child position of a given location step.

Parameters:
opPos - Position of location step in the location map.
Returns:
The first child position of the step.

getStepTestType

public int getStepTestType(int opPosOfStep)
Get the test type of the step, i.e. NODETYPE_XXX value.

Parameters:
opPosOfStep - The position of the FROM_XXX step.
Returns:
NODETYPE_XXX value.

getStepNS

public String getStepNS(int opPosOfStep)
Get the namespace of the step.

Parameters:
opPosOfStep - The position of the FROM_XXX step.
Returns:
The step's namespace, NodeTest.WILD, or null for null namespace.

getStepLocalName

public String getStepLocalName(int opPosOfStep)
Get the local name of the step.

Parameters:
opPosOfStep - The position of the FROM_XXX step.
Returns:
OpCodes.EMPTY, OpCodes.ELEMWILDCARD, or the local name.