## Xalan-C++ API Documentation

### The Xalan C++ XSLT Processor Version 1.7

Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members

# XPathExpression Class Reference

`#include <XPathExpression.hpp>`

Collaboration diagram for XPathExpression:

List of all members.

## Public Types

- typedef std::ostream OstreamType
- typedef std::vector<int> OpCodeMapType
- typedef std::vector<XToken> TokenQueueType
- typedef OpCodeMapType::value_type OpCodeMapValueType
- typedef OpCodeMapType::size_type OpCodeMapSizeType
- typedef std::vector<OpCodeMapValueType> OpCodeMapValueVectorType
- typedef std::vector<double> NumberLiteralValueVectorType
- typedef TokenQueueType::value_type TokenQueueValueType
- typedef TokenQueueType::size_type TokenQueueSizeType
- enum eOpCodes {
  eELEMWILDCARD = -3,
  eEMPTY = -2,
  eENDOP = -1,
  eOP_XPATH = 1,
  eOP_OR = 2,
  eOP_AND = 3,
  eOP_NOTEQUALS = 4,
  eOP_EQUALS = 5,
  eOP_LTE = 6,
  eOP_LT = 7,
  eOP_GTE = 8,
  eOP_GT = 9,
  eOP_PLUS = 10,
  eOP_MINUS = 11,
  eOP_MULT = 12,
  eOP_DIV = 13,
  eOP_MOD = 14,
  eOP_NEG = 15,
  eOP_BOOL = 16,
  eOP_UNION = 17,
  eOP_LITERAL = 18,
  eOP_VARIABLE = 19,
  eOP_GROUP = 20,
  eOP_NUMBERLIT = 21,
  eOP_ARGUMENT = 22,
  eOP_EXTFUNCTION = 23,
  eOP_FUNCTION = 24,
  eOP_LOCATIONPATH = 25,
  eOP_PREDICATE = 26,
  eNODETYPE_COMMENT = 27,
  eNODETYPE_TEXT = 28,
  eNODETYPE_PI = 29,
  eNODETYPE_NODE = 30,
  eNODENAME = 31,
  eNODETYPE_ROOT = 32,
  eNODETYPE_ANYELEMENT = 33,
  eFROM_ANCESTORS = 34,
  eFROM_ANCESTORS_OR_SELF = 35,
  eFROM_ATTRIBUTES = 36,
  eFROM_CHILDREN = 37,
  eFROM_DESCENDANTS = 38,
  eFROM_DESCENDANTS_OR_SELF = 39,
  eFROM_FOLLOWING = 40,
  eFROM_FOLLOWING_SIBLINGS = 41,
  eFROM_PARENT = 42,
  eFROM_PRECEDING = 43,
  eFROM_PRECEDING_SIBLINGS = 44,
  eFROM_SELF = 45,
  eFROM_NAMESPACE = 46,
  eFROM_ROOT = 47,
  eOP_MATCHPATTERN = 48,
  eOP_LOCATIONPATHPATTERN = 49,
  eMATCH_ATTRIBUTE = 50,
  eMATCH_ANY_ANCESTOR = 51,
  eMATCH_IMMEDIATE_ANCESTOR = 52,
  eMATCH_ANY_ANCESTOR_WITH_PREDICATE = 53,
  eMATCH_ANY_ANCESTOR_WITH_FUNCTION_CALL = 54,
  eOP_PREDICATE_WITH_POSITION = 55,
  eOP_FUNCTION_POSITION = 56,
  eOP_FUNCTION_LAST = 57,
  eOP_FUNCTION_COUNT = 58,
  eOP_FUNCTION_NOT = 59,
  eOP_FUNCTION_TRUE = 60,
  eOP_FUNCTION_FALSE = 61,
  eOP_FUNCTION_BOOLEAN = 62,
  eOP_FUNCTION_NAME_0 = 63,
  eOP_FUNCTION_NAME_1 = 64,
  eOP_FUNCTION_LOCALNAME_0 = 65,
  eOP_FUNCTION_LOCALNAME_1 = 66,
  eOP_FUNCTION_FLOOR = 67,
  eOP_FUNCTION_CEILING = 68,
  eOP_FUNCTION_ROUND = 69,
  eOP_FUNCTION_NUMBER_0 = 70,
  eOP_FUNCTION_NUMBER_1 = 71,
  eOP_FUNCTION_STRING_0 = 72,
  eOP_FUNCTION_STRING_1 = 73,
  eOP_FUNCTION_STRINGLENGTH_0 = 74,
  eOP_FUNCTION_STRINGLENGTH_1 = 75,
  eOP_FUNCTION_NAMESPACEURI_0 = 76,
  eOP_FUNCTION_NAMESPACEURI_1 = 77,
  eOP_FUNCTION_SUM = 78,
  eOP_FUNCTION_CONCAT = 79,
  eOpCodeNextAvailable
  }
    List of operations codes. More...
- enum eDummy {
  s_opCodeMapLengthIndex = 1
  }
    The length is always the opcode position + 1. More...

## Public Methods

- XPathExpression ()
- ~XPathExpression ()
- void reset ()
    Reset the expression.
- void shrink ()
    Shrink internal tables.
- OpCodeMapSizeType opCodeMapSize () const
    Retrieve number of elements in the operations code map. More...
- OpCodeMapValueType opCodeMapLength () const
    Retrieve length of the operations code map stored in the map. More...
- TokenQueueSizeType tokenQueueSize () const
    Retrieve number of elements in the token queue. More...
- OpCodeMapValueType getOpCodeMapValue (OpCodeMapSizeType opPos) const
    Retrieve the value of an operation code at a specified position in the list. More...
- OpCodeMapValueType getOpCodeArgumentLength (OpCodeMapSizeType opPos) const
- OpCodeMapValueType getOpCodeLengthFromOpMap (OpCodeMapSizeType opPos) const
    Retrieve the length of an operation code at a specified position in the op map. More...
- OpCodeMapValueType getNextOpCodePosition (OpCodeMapSizeType opPos) const
    Retrieve the position of the next operation code at a specified position in the list. More...
- void setOpCodeArgs ( eOpCodes theOpCode, OpCodeMapSizeType theIndex, const OpCodeMapValueVectorType& theArgs)
    Set the arguments for an operation code at a specified index in the list. More...
- OpCodeMapSizeType appendOpCode (eOpCodes theOpCode)
    Add an operation code to the list. More...
- OpCodeMapSizeType appendOpCode (eOpCodes theOpCode, const OpCodeMapValueVectorType& theArgs)
    Add an operation code with supplied arguments to the list. More...
- void replaceOpCode ( OpCodeMapSizeType theIndex, eOpCodes theOldOpCode, eOpCodes theNewOpCode)
    Replace an operation code with supplied code. More...
- OpCodeMapValueType insertOpCode ( eOpCodes theOpCode, OpCodeMapSizeType theIndex)
    Insert an operation code at a specified index in the list. More...
- void updateOpCodeLength (OpCodeMapSizeType theIndex)
    Update the length of an operation code at a specified index in the list. More...
- void updateShiftedOpCodeLength ( OpCodeMapValueType theOpCode, OpCodeMapSizeType theOriginalIndex, OpCodeMapSizeType theNewIndex)
    Update the length of an operation code that has moved to a new index in the list. More...
- void updateOpCodeLength ( OpCodeMapValueType theOpCode, OpCodeMapSizeType theIndex)
    Update the length of an operation code at a specified index in the list. More...
- void updateOpCodeLengthAfterNodeTest (OpCodeMapSizeType theIndex)
    Update the length of an operation code after a node test code. More...
- bool hasMoreTokens () const
    Whether there are any more tokens in the token queue. More...
- TokenQueueSizeType getTokenPosition () const
    Retrieve the current position in the token queue. More...
- void resetTokenPosition ()
    Set the current position in the token queue to zero.
- void setTokenPosition (TokenQueueSizeType thePosition)
    Set the current position in the token queue to a specified value. More...
- void setTokenPosition (int thePosition)
    Set the current position in the token queue to a specified value. More...
- const XObject* getToken (TokenQueueSizeType thePosition) const
    Retrieve a token at the specified position in the token queue. More...
- const XObject* getNextToken ()
    Retrieve the next token in the token queue. More...
- const XObject* getPreviousToken ()
    Retrieve the previous token in the token queue. More...
- const XObject* getRelativeToken (int theOffset) const
    Retrieve a token at the specified offset relative to the current position in the token queue. More...
- void pushToken (const XalanDOMString& theToken)
    Push a token onto the token queue. More...
- void pushToken ( double theNumber, const XalanDOMString& theString)
    Push a token onto the token queue. More...
- void insertToken (const XalanDOMString& theToken)
    Insert a token onto the token queue at the current position. More...
- void insertToken ( double theNumber, const XalanDOMString& theString)
    Insert a token onto the token queue at the current position. More...
- void replaceRelativeToken ( int theOffset, const XToken& theToken)
    Replace a token in the token queue. More...
- void replaceRelativeToken ( int theOffset, const XalanDOMString& theString)
    Replace a token in the token queue. More...
- void dumpOpCodeMap ( PrintWriter& thePrintWriter, OpCodeMapSizeType theStartPosition = 0) const
    Diagnostic function to output the operation code map. More...
- void dumpOpCodeMap ( OstreamType& theStream, OpCodeMapSizeType theStartPosition = 0) const
    Diagnostic function to output the operation code map. More...
- void dumpTokenQueue ( PrintWriter& thePrintWriter, TokenQueueSizeType theStartPosition = 0) const
    Diagnostic function to output the token queue. More...
- void dumpTokenQueue ( OstreamType& theStream, TokenQueueSizeType theStartPosition = 0) const
    Diagnostic function to output the token queue. More...
- void dumpRemainingTokenQueue (PrintWriter& thePrintWriter) const
    Diagnostic function to output the remaining tokens in the token queue. More...
- void dumpRemainingTokenQueue (OstreamType& theStream) const
    Diagnostic function to output the remaining tokens in the token queue. More...
- void pushValueOnOpCodeMap (const OpCodeMapType::value_type& theValue)
    Push a value onto the operations code map. More...
- void pushArgumentOnOpCodeMap (const XToken& theXToken)
    Push a token onto the token queue and its index onto the operations code map. More...
- void pushArgumentOnOpCodeMap (const XalanDOMString& theString)
    Push a token onto the token queue and its index onto the operations code map. More...
- void pushArgumentOnOpCodeMap ( double theNumber, const XalanDOMString& theString)
    Push a token onto the token queue and its index onto the operations code map. More...
- void pushNumberLiteralOnOpCodeMap (double theNumber)
    Push a number literal onto the vector of number literals and its index onto the operations code map. More...
- double getNumberLiteral (int theIndex) const
    Get a number literal from the vector of number literals. More...
- void pushCurrentTokenOnOpCodeMap ()
    Push the current position in the token queue onto the operations code map.
- void setCurrentPattern (const XalanDOMString& thePattern)
    Change the current pattern in the pattern map. More...
- const XalanDOMString& getCurrentPattern () const
    Retrieve the current pattern in the pattern map. More...

## Public Attributes

- OpCodeMapType m_opMap
    An operations map is used instead of a proper parse tree. More...
- OpCodeMapSizeType m_lastOpCodeIndex
    The index of the last opcode that was appended or inserted.
- TokenQueueType m_tokenQueue
    The queue of used tokens. More...
- TokenQueueSizeType m_currentPosition
    The current position in the token queue.
- const XalanDOMString* m_currentPattern
    The current pattern string, for diagnostics purposes.

## Static Public Methods

- bool isNodeTestOpCode (OpCodeMapValueType theOpCode)
    Whether the operation code is one of the node test types, for example, "ancestor::" or "child::". More...

## Member Typedef Documentation

typedef std::vector<double> XPathExpression::NumberLiteralValueVectorType

typedef OpCodeMapType::size_type XPathExpression::OpCodeMapSizeType

typedef std::vector<int> XPathExpression::OpCodeMapType

typedef OpCodeMapType::value_type XPathExpression::OpCodeMapValueType

typedef std::vector<OpCodeMapValueType> XPathExpression::OpCodeMapValueVectorType

typedef std::ostream XPathExpression::OstreamType

typedef TokenQueueType::size_type XPathExpression::TokenQueueSizeType

typedef std::vector<XToken> XPathExpression::TokenQueueType

typedef TokenQueueType::value_type XPathExpression::TokenQueueValueType

## Member Enumeration Documentation

enum XPathExpression::eDummy

The length is always the opcode position + 1.

Length is always expressed as the opcode+length bytes, so it is always 2 or greater. This is the offset from the op code where the length is stored. It will always remain one.

Enumeration values:

  s_opCodeMapLengthIndex |

enum XPathExpression::eOpCodes

List of operations codes.

Code for the descriptions of the operations codes: [UPPER CASE] indicates a literal value, [lower case] is a description of a value, ([length] always indicates the length of the operation, including the operations code and the length integer.) {UPPER CASE} indicates the given production, {description} is the description of a new production, (For instance, {boolean expression} means some expression that should be resolved to a boolean.) * means that it occurs zero or more times, + means that it occurs one or more times, ? means that it is optional.

returns: indicates what the production should return.

Enumeration values:

  eELEMWILDCARD | [ELEMWILDCARD] Means ELEMWILDCARD ("*"), used instead of string index in some places.
  eEMPTY | [EMPTY] Empty slot to indicate NULL.
  eENDOP | [ENDOP] Some operators may like to have a terminator.
  eOP_XPATH | [OP_XPATH] [length] {expression}. returns: XNodeSet XNumber XString XBoolean XRTree XObject
  eOP_OR | [OP_OR] [length] {boolean expression} {boolean expression}. returns: XBoolean
  eOP_AND | [OP_AND] [length] {boolean expression} {boolean expression}. returns: XBoolean
  eOP_NOTEQUALS | [OP_NOTEQUALS] [length] {expression} {expression}. returns: XBoolean
  eOP_EQUALS | [OP_EQUALS] [length] {expression} {expression}. returns: XBoolean
  eOP_LTE | [OP_LTE] (less-than-or-equals) [length] {number expression} {number expression}. returns: XBoolean
  eOP_LT | [OP_LT] (less-than) [length] {number expression} {number expression}. returns: XBoolean
  eOP_GTE | [OP_GTE] (greater-than-or-equals) [length] {number expression} {number expression}. returns: XBoolean
  eOP_GT | [OP_GT] (greater-than) [length] {number expression} {number expression}. returns: XBoolean
  eOP_PLUS | [OP_PLUS] [length] {number expression} {number expression}. returns: XNumber
  eOP_MINUS | [OP_MINUS] [length] {number expression} {number expression}. returns: XNumber
  eOP_MULT | [OP_MULT] [length] {number expression} {number expression}. returns: XNumber
  eOP_DIV | [OP_DIV] [length] {number expression} {number expression}. returns: XNumber
  eOP_MOD | [OP_MOD] [length] {number expression} {number expression}. returns: XNumber
  eOP_NEG | [OP_NEG] [length] {number expression}. returns: XNumber
  eOP_BOOL | [OP_BOOL] (cast operation) [length] {expression}. returns: XBoolean
  eOP_UNION | [OP_UNION] [length] {PathExpr}+. returns: XNodeSet
  eOP_LITERAL | [OP_LITERAL] [3] [index to token]. returns: XString
  eOP_VARIABLE | [OP_VARIABLE] [3] [index to token]. returns: XString
  eOP_GROUP | [OP_GROUP] [length] {expression}. returns: XNodeSet XNumber XString XBoolean XRTree XObject
  eOP_NUMBERLIT | [OP_NUMBERLIT] (Number literal.) [3] [index to token]. returns: XString
  eOP_ARGUMENT | [OP_ARGUMENT] (Function argument.) [length] {expression}. returns: XNodeSet XNumber XString XBoolean XRTree XObject
  eOP_EXTFUNCTION | [OP_EXTFUNCTION] (Extension function.) [length] [index to namespace token] [index to function name token] {OP_ARGUMENT}*. returns: XNodeSet XNumber XString XBoolean XRTree XObject
  eOP_FUNCTION | [OP_FUNCTION] [length] [FUNC_ID] [arg count] {OP_ARGUMENT}* [ENDOP]. returns: XNodeSet XNumber XString XBoolean XRTree XObject
  eOP_LOCATIONPATH | [OP_LOCATIONPATH] [length] {FROM_stepType} | {function}{predicate}* [ENDOP]. (Note that element and attribute namespaces and names can be wildcarded '*'.) returns: XNodeSet
  eOP_PREDICATE | [OP_PREDICATE] [length] {expression} [ENDOP] (For safety). returns: XBoolean or XNumber
  eNODETYPE_COMMENT | [NODETYPE_COMMENT] No size or arguments. returns: XBoolean
  eNODETYPE_TEXT | [NODETYPE_TEXT] No size or arguments. returns: XBoolean
  eNODETYPE_PI | [NODETYPE_PI] [index to token]. returns: XBoolean
  eNODETYPE_NODE | [NODETYPE_NODE] No size or arguments. returns: XBoolean
  eNODENAME | [NODENAME] [index to ns token or EMPTY] [index to name token]. returns: XBoolean
  eNODETYPE_ROOT | [NODETYPE_ROOT] No size or arguments. returns: XBoolean
  eNODETYPE_ANYELEMENT | [NODETYPE_ANY] No size or arguments. returns: XBoolean
  eFROM_ANCESTORS | [FROM_stepType] [length, including predicates] [length of just the step, without the predicates] {node test} {predicates}? returns: XBoolean
  eFROM_ANCESTORS_OR_SELF |
  eFROM_ATTRIBUTES |
  eFROM_CHILDREN |
  eFROM_DESCENDANTS |
  eFROM_DESCENDANTS_OR_SELF |
  eFROM_FOLLOWING |
  eFROM_FOLLOWING_SIBLINGS |
  eFROM_PARENT |
  eFROM_PRECEDING |
  eFROM_PRECEDING_SIBLINGS |
  eFROM_SELF |
  eFROM_NAMESPACE |
  eFROM_ROOT |
  eOP_MATCHPATTERN | [OP_UNION] [length] {PathExpr}+. returns: XNodeSet
  eOP_LOCATIONPATHPATTERN | [OP_UNION] [length] {PathExpr}+. returns: XNodeSet
  eMATCH_ATTRIBUTE |
  eMATCH_ANY_ANCESTOR |
  eMATCH_IMMEDIATE_ANCESTOR |
  eMATCH_ANY_ANCESTOR_WITH_PREDICATE |
  eMATCH_ANY_ANCESTOR_WITH_FUNCTION_CALL |
  eOP_PREDICATE_WITH_POSITION | [OP_PREDICATE_WITH_POSITION] [length] {expression} [ENDOP] (For safety). returns: XBoolean or XNumber
  eOP_FUNCTION_POSITION | These are values for intrinsic functions which have been compiled directly into the op map.
  eOP_FUNCTION_LAST |
  eOP_FUNCTION_COUNT |
  eOP_FUNCTION_NOT |
  eOP_FUNCTION_TRUE |
  eOP_FUNCTION_FALSE |
  eOP_FUNCTION_BOOLEAN |
  eOP_FUNCTION_NAME_0 |
  eOP_FUNCTION_NAME_1 |
  eOP_FUNCTION_LOCALNAME_0 |
  eOP_FUNCTION_LOCALNAME_1 |
  eOP_FUNCTION_FLOOR |
  eOP_FUNCTION_CEILING |
  eOP_FUNCTION_ROUND |
  eOP_FUNCTION_NUMBER_0 |
  eOP_FUNCTION_NUMBER_1 |
  eOP_FUNCTION_STRING_0 |
  eOP_FUNCTION_STRING_1 |
  eOP_FUNCTION_STRINGLENGTH_0 |
  eOP_FUNCTION_STRINGLENGTH_1 |
  eOP_FUNCTION_NAMESPACEURI_0 |
  eOP_FUNCTION_NAMESPACEURI_1 |
  eOP_FUNCTION_SUM |
  eOP_FUNCTION_CONCAT |
  eOpCodeNextAvailable |

## Constructor & Destructor Documentation

XPathExpression::XPathExpression ( | )`[explicit]`

XPathExpression::~XPathExpression ( | )

## Member Function Documentation

OpCodeMapSizeType XPathExpression::appendOpCode ( | eOpCodes theOpCode,
| const OpCodeMapValueVectorType & theArgs )`[]`

Add an operation code with supplied arguments to the list.

Parameters:

  theOpCode | operation code
  theArgs | vector or arguments to supply

OpCodeMapSizeType XPathExpression::appendOpCode ( | eOpCodes theOpCode )

Add an operation code to the list.

Parameters:

  theOpCode | operation code

Returns:
  the position of the op code

void XPathExpression::dumpOpCodeMap ( | OstreamType & theStream,
| OpCodeMapSizeType theStartPosition = 0 ) const

Diagnostic function to output the operation code map.

Parameters:

  theStream | output stream
  theStartPosition | starting position in map

void XPathExpression::dumpOpCodeMap ( | PrintWriter & thePrintWriter,
| OpCodeMapSizeType theStartPosition = 0 ) const

Diagnostic function to output the operation code map.

Parameters:

  thePrintWriter | output device
  theStartPosition | starting position in map

void XPathExpression::dumpRemainingTokenQueue ( | OstreamType & theStream ) const

Diagnostic function to output the remaining tokens in the token queue.

Parameters:

  theStream | The output stream

void XPathExpression::dumpRemainingTokenQueue ( | PrintWriter & thePrintWriter ) const

Diagnostic function to output the remaining tokens in the token queue.

Parameters:

  thePrintWriter | output device

void XPathExpression::dumpTokenQueue ( | OstreamType & theStream,
| TokenQueueSizeType theStartPosition = 0 ) const

Diagnostic function to output the token queue.

Parameters:

  thePrintWriter | output device
  theStartPosition | starting position in token queue

void XPathExpression::dumpTokenQueue ( | PrintWriter & thePrintWriter,
| TokenQueueSizeType theStartPosition = 0 ) const

Diagnostic function to output the token queue.

Parameters:

  thePrintWriter | output device
  theStartPosition | starting position in token queue

const XalanDOMString & XPathExpression::getCurrentPattern ( | ) const`[]`

Retrieve the current pattern in the pattern map.

Returns:
  string for current match pattern

OpCodeMapValueType XPathExpression::getNextOpCodePosition ( | OpCodeMapSizeType opPos ) const`[]`

Retrieve the position of the next operation code at a specified position in the list.

Parameters:

  opPos | position in list

Returns:
  position of next operation code

const XObject * XPathExpression::getNextToken ( | )`[]`

Retrieve the next token in the token queue.

Returns:
  pointer to XObject token

double XPathExpression::getNumberLiteral ( | int theIndex ) const`[]`

Get a number literal from the vector of number literals.

Parameters:

  theIndex | The index of the desired value.

OpCodeMapValueType XPathExpression::getOpCodeArgumentLength ( | OpCodeMapSizeType opPos ) const`[]`

OpCodeMapValueType XPathExpression::getOpCodeLengthFromOpMap ( | OpCodeMapSizeType opPos ) const

Retrieve the length of an operation code at a specified position in the op map.

Parameters:

  opPos | position in the op map

Returns:
  length of operation code

OpCodeMapValueType XPathExpression::getOpCodeMapValue ( | OpCodeMapSizeType opPos ) const`[]`

Retrieve the value of an operation code at a specified position in the list.

Parameters:

  opPos | position in list

Returns:
  value of operation code

const XObject * XPathExpression::getPreviousToken ( | )`[]`

Retrieve the previous token in the token queue.

Returns:
  pointer to XObject token

const XObject * XPathExpression::getRelativeToken ( | int theOffset ) const`[]`

Retrieve a token at the specified offset relative to the current position in the token queue.

Parameters:

  theOffset | offset from current position

Returns:
  pointer to XObject token

const XObject * XPathExpression::getToken ( | TokenQueueSizeType thePosition ) const`[]`

Retrieve a token at the specified position in the token queue.

Parameters:

  thePosition | position in queue

Returns:
  pointer to XObject token

TokenQueueSizeType XPathExpression::getTokenPosition ( | ) const`[]`

Retrieve the current position in the token queue.

Returns:
  position in queue

bool XPathExpression::hasMoreTokens ( | ) const`[]`

Whether there are any more tokens in the token queue.

Returns:
  true if there are more tokens

OpCodeMapValueType XPathExpression::insertOpCode ( | eOpCodes theOpCode,
| OpCodeMapSizeType theIndex )

Insert an operation code at a specified index in the list.

Parameters:

  theOpCode | operation code
  theIndex | index in list

void XPathExpression::insertToken ( | double theNumber,
| const XalanDOMString & theString )`[]`

Insert a token onto the token queue at the current position.

Parameters:

  theNumber | the number value to push
  theString | the string value to push

void XPathExpression::insertToken ( | const XalanDOMString & theToken )`[]`

Insert a token onto the token queue at the current position.

Parameters:

  theToken | the string value to push

bool XPathExpression::isNodeTestOpCode ( | OpCodeMapValueType theOpCode )`[static]`

Whether the operation code is one of the node test types, for example, "ancestor::" or "child::".

Parameters:

  theOpCode | operation code

Returns:
  true if code represents a node test

OpCodeMapValueType XPathExpression::opCodeMapLength ( | ) const`[]`

Retrieve length of the operations code map stored in the map.

The length of the entire map is stored after the first op code. That offset is determined by this const static member. Note that as expressions are defined recursively, this is really just the length of the first expression in the map, which is the top of the parse tree. Any subexpression will also have a length entry at the same offset from the beginning of the subexpression.

Returns:
  length of operations code map

OpCodeMapSizeType XPathExpression::opCodeMapSize ( | ) const`[]`

Retrieve number of elements in the operations code map.

Returns:
  size of operations code map

void XPathExpression::pushArgumentOnOpCodeMap ( | double theNumber,
| const XalanDOMString & theString )

Push a token onto the token queue and its index onto the operations code map.

Parameters:

  theNumber | The numeric data for the token. This must be consistent with the lexical value in theString.
  theString | The string data for the token. The instance will keep a point to this string, so it must be persistent.

void XPathExpression::pushArgumentOnOpCodeMap ( | const XalanDOMString & theString )

Push a token onto the token queue and its index onto the operations code map.

Parameters:

  theString | The string data for the token. The instance will keep a point to this string, so it must be persistent.

void XPathExpression::pushArgumentOnOpCodeMap ( | const XToken & theXToken )

Push a token onto the token queue and its index onto the operations code map.

Parameters:

  theXToken | the XToken to push

void XPathExpression::pushCurrentTokenOnOpCodeMap ( | )

Push the current position in the token queue onto the operations code map.

void XPathExpression::pushNumberLiteralOnOpCodeMap ( | double theNumber )

Push a number literal onto the vector of number literals and its index onto the operations code map.

Parameters:

  theToken | number value of the token to push

void XPathExpression::pushToken ( | double theNumber,
| const XalanDOMString & theString )`[]`

Push a token onto the token queue.

Parameters:

  theNumber | the number value to push
  theString | the string value to push

void XPathExpression::pushToken ( | const XalanDOMString & theToken )`[]`

Push a token onto the token queue.

Parameters:

  theToken | the string value to push

void XPathExpression::pushValueOnOpCodeMap ( | const OpCodeMapType::value_type & theValue )`[]`

Push a value onto the operations code map.

Parameters:

  theToken | string value of the token to push

void XPathExpression::replaceOpCode ( | OpCodeMapSizeType theIndex,
| eOpCodes theOldOpCode,
| eOpCodes theNewOpCode )

Replace an operation code with supplied code.

Parameters:

  theIndex | The index of the old operation code
  theOldOpCode | The old operation code
  theNewOpCode | The new operation code

void XPathExpression::replaceRelativeToken ( | int theOffset,
| const XalanDOMString & theString )`[]`

Replace a token in the token queue.

Parameters:

  theOffset | the offset at which to replace the token.
  theString | The string data for the token. The instance will keep a point to this string, so it must be persistent.

void XPathExpression::replaceRelativeToken ( | int theOffset,
| const XToken & theToken )`[]`

Replace a token in the token queue.

Parameters:

  theOffset | the offset at which to replace the token.
  theToken | The new token

void XPathExpression::reset ( | )

Reset the expression.

void XPathExpression::resetTokenPosition ( | )`[]`

Set the current position in the token queue to zero.

void XPathExpression::setCurrentPattern ( | const XalanDOMString & thePattern )`[]`

Change the current pattern in the pattern map.

Parameters:

  thePattern | match pattern to make current

void XPathExpression::setOpCodeArgs ( | eOpCodes theOpCode,
| OpCodeMapSizeType theIndex,
| const OpCodeMapValueVectorType & theArgs )

Set the arguments for an operation code at a specified index in the list.

Parameters:

  opPos | position in list
  theOpCode | operation code
  theIndex | index in list
  theArgs | vector or arguments to supply

void XPathExpression::setTokenPosition ( | int thePosition )`[]`

Set the current position in the token queue to a specified value.

Parameters:

  thePosition | value of position to set

void XPathExpression::setTokenPosition ( | TokenQueueSizeType thePosition )`[]`

Set the current position in the token queue to a specified value.

Parameters:

  thePosition | value of position to set

void XPathExpression::shrink ( | )

Shrink internal tables.

TokenQueueSizeType XPathExpression::tokenQueueSize ( | ) const`[]`

Retrieve number of elements in the token queue.

Returns:
  size of token queue

void XPathExpression::updateOpCodeLength ( | OpCodeMapValueType theOpCode,
| OpCodeMapSizeType theIndex )

Update the length of an operation code at a specified index in the list.

This presumes that the other opcodes have been appended to the expression, and that the specified op code's length needs to be set. The size includes the normal length of the opcode, plus the length of its subexpressions.

Parameters:

  theOpCode | operation code at specified index
  theIndex | index in list

void XPathExpression::updateOpCodeLength ( | OpCodeMapSizeType theIndex )`[]`

Update the length of an operation code at a specified index in the list.

This presumes that the other opcodes have been appended to the expression, and that the specified op code's length needs to be set. The size includes the normal length of the opcode, plus the length of its subexpressions.

Parameters:

  theIndex | index in list

void XPathExpression::updateOpCodeLengthAfterNodeTest ( | OpCodeMapSizeType theIndex )

Update the length of an operation code after a node test code.

Parameters:

  theIndex | index in list

void XPathExpression::updateShiftedOpCodeLength ( | OpCodeMapValueType theOpCode,
| OpCodeMapSizeType theOriginalIndex,
| OpCodeMapSizeType theNewIndex )

Update the length of an operation code that has moved to a new index in the list.

Parameters:

  theOpCode | operation code
  theOriginalIndex | original index in list
  theNewIndex | new index in list

## Member Data Documentation

const XalanDOMString * XPathExpression::m_currentPattern

The current pattern string, for diagnostics purposes.

TokenQueueSizeType XPathExpression::m_currentPosition

The current position in the token queue.

OpCodeMapSizeType XPathExpression::m_lastOpCodeIndex

The index of the last opcode that was appended or inserted.

OpCodeMapType XPathExpression::m_opMap

An operations map is used instead of a proper parse tree.

It contains operations codes and indexes into the m_tokenQueue. We use an array instead of a full parse tree in order to cut down on the number of objects created.

TokenQueueType XPathExpression::m_tokenQueue

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.

The documentation for this class was generated from the following file:

- XPathExpression.hpp

Interpreting class diagrams

Doxygen and GraphViz are used to generate this API documentation from the Xalan-C header files.

Xalan-C++ XSLT Processor Version 1.7 Copyright © 1999-2004 The Apache Software Foundation. All Rights Reserved.