| <HTML><HEAD><TITLE>Xalan-C++ API Documentation</TITLE></HEAD>
|
| <BODY>
|
| <h2 align="center">Xalan-C++ API Documentation</h2>
|
| <h3 align="center">The Xalan C++ XSLT Processor Version 1.10</h3>
|
| </BODY> |
| <!-- Generated by Doxygen 1.2.8.1 --> |
| <center> |
| <a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> </center> |
| <hr><h1>XPathExpression.hpp</h1><a href="XPathExpression_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/*</font> |
| 00002 <font class="comment"> * Copyright 1999-2004 The Apache Software Foundation.</font> |
| 00003 <font class="comment"> *</font> |
| 00004 <font class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</font> |
| 00005 <font class="comment"> * you may not use this file except in compliance with the License.</font> |
| 00006 <font class="comment"> * You may obtain a copy of the License at</font> |
| 00007 <font class="comment"> *</font> |
| 00008 <font class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</font> |
| 00009 <font class="comment"> *</font> |
| 00010 <font class="comment"> * Unless required by applicable law or agreed to in writing, software</font> |
| 00011 <font class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</font> |
| 00012 <font class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</font> |
| 00013 <font class="comment"> * See the License for the specific language governing permissions and</font> |
| 00014 <font class="comment"> * limitations under the License.</font> |
| 00015 <font class="comment"> */</font> |
| 00016 <font class="preprocessor">#if !defined(XPATHEXPRESSION_HEADER_GUARD_1357924680)</font> |
| <a name="l00017"></a><a class="code" href="XPathExpression_8hpp.html#a0">00017</a> <font class="preprocessor"></font><font class="preprocessor">#define XPATHEXPRESSION_HEADER_GUARD_1357924680</font> |
| 00018 <font class="preprocessor"></font> |
| 00019 |
| 00020 |
| 00021 <font class="comment">// Base header file. Must be first.</font> |
| 00022 <font class="preprocessor">#include <<a class="code" href="XPathDefinitions_8hpp.html">xalanc/XPath/XPathDefinitions.hpp</a>></font> |
| 00023 |
| 00024 |
| 00025 |
| 00026 <font class="preprocessor">#include <<a class="code" href="XalanVector_8hpp.html">xalanc/Include/XalanVector.hpp</a>></font> |
| 00027 |
| 00028 |
| 00029 |
| 00030 <font class="preprocessor">#if defined(XALAN_CLASSIC_IOSTREAMS)</font> |
| 00031 <font class="preprocessor"></font><font class="preprocessor">#include <iostream.h></font> |
| 00032 <font class="preprocessor">#else</font> |
| 00033 <font class="preprocessor"></font><font class="preprocessor">#include <iosfwd></font> |
| 00034 <font class="preprocessor">#endif</font> |
| 00035 <font class="preprocessor"></font> |
| 00036 |
| 00037 |
| 00038 <font class="preprocessor">#include <<a class="code" href="XalanDOMString_8hpp.html">xalanc/XalanDOM/XalanDOMString.hpp</a>></font> |
| 00039 |
| 00040 |
| 00041 |
| 00042 <font class="preprocessor">#include <<a class="code" href="DOMStringHelper_8hpp.html">xalanc/PlatformSupport/DOMStringHelper.hpp</a>></font> |
| 00043 <font class="preprocessor">#include <<a class="code" href="PrintWriter_8hpp.html">xalanc/PlatformSupport/PrintWriter.hpp</a>></font> |
| 00044 |
| 00045 |
| 00046 |
| 00047 <font class="preprocessor">#include <<a class="code" href="XToken_8hpp.html">xalanc/XPath/XToken.hpp</a>></font> |
| 00048 <font class="preprocessor">#include <<a class="code" href="XalanXPathException_8hpp.html">xalanc/XPath/XalanXPathException.hpp</a>></font> |
| 00049 |
| 00050 |
| 00051 |
| 00052 XALAN_CPP_NAMESPACE_BEGIN |
| 00053 |
| 00054 |
| 00055 |
| <a name="l00056"></a><a class="code" href="XPathExpression_8hpp.html#a3">00056</a> <a class="code" href="XSLTInputSource_8hpp.html#a3">XALAN_USING_XERCES</a>(MemoryManager) |
| 00057 |
| 00058 |
| 00059 |
| 00060 <font class="keyword">class </font>XALAN_XPATH_EXPORT XPathExpression |
| 00061 { |
| 00062 <font class="keyword">public</font>: |
| 00063 |
| 00064 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER ostream OstreamType; |
| 00065 |
| 00066 <font class="keyword">typedef</font> XalanVector<int> OpCodeMapType; |
| 00067 <font class="keyword">typedef</font> XalanVector<XToken> TokenQueueType; |
| 00068 |
| 00069 <font class="keyword">typedef</font> OpCodeMapType::value_type OpCodeMapValueType; |
| 00070 <font class="keyword">typedef</font> OpCodeMapValueType OpCodeMapSizeType; |
| 00071 |
| 00072 <font class="keyword">typedef</font> XalanVector<OpCodeMapValueType> OpCodeMapValueVectorType; |
| 00073 |
| 00074 <font class="keyword">typedef</font> XalanVector<double> NumberLiteralValueVectorType; |
| 00075 |
| 00076 <font class="preprocessor">#define XALAN_XPATH_EXPRESSION_USE_ITERATORS</font> |
| 00077 <font class="preprocessor"></font> |
| 00078 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00079 <font class="preprocessor"></font> <font class="keyword">typedef</font> OpCodeMapType::const_iterator OpCodeMapPositionType; |
| 00080 <font class="preprocessor">#else</font> |
| 00081 <font class="preprocessor"></font> <font class="keyword">typedef</font> OpCodeMapSizeType OpCodeMapPositionType; |
| 00082 <font class="preprocessor">#endif</font> |
| 00083 <font class="preprocessor"></font> <font class="keyword">typedef</font> OpCodeMapType::difference_type OpCodeMapDifferenceType; |
| 00084 <font class="keyword">typedef</font> TokenQueueType::value_type TokenQueueValueType; |
| 00085 <font class="keyword">typedef</font> <font class="keywordtype">int</font> TokenQueueSizeType; |
| 00086 <font class="keyword">typedef</font> TokenQueueSizeType TokenQueuePositionType; |
| 00087 |
| 00106 <font class="keyword">enum</font> eOpCodes |
| 00107 { |
| 00113 eELEMWILDCARD = -3, |
| 00114 |
| 00119 eEMPTY = -2, |
| 00120 |
| 00125 eENDOP = -1, |
| 00126 |
| 00140 eOP_XPATH = 1, |
| 00141 |
| 00151 eOP_OR = 2, |
| 00152 |
| 00162 eOP_AND = 3, |
| 00163 |
| 00173 eOP_NOTEQUALS = 4, |
| 00174 |
| 00184 eOP_EQUALS = 5, |
| 00185 |
| 00195 eOP_LTE = 6, |
| 00196 |
| 00206 eOP_LT = 7, |
| 00207 |
| 00217 eOP_GTE = 8, |
| 00218 |
| 00228 eOP_GT = 9, |
| 00229 |
| 00239 eOP_PLUS = 10, |
| 00240 |
| 00250 eOP_MINUS = 11, |
| 00251 |
| 00261 eOP_MULT = 12, |
| 00262 |
| 00272 eOP_DIV = 13, |
| 00273 |
| 00283 eOP_MOD = 14, |
| 00284 |
| 00293 eOP_NEG = 15, |
| 00294 |
| 00303 eOP_BOOL = 16, |
| 00304 |
| 00313 eOP_UNION = 17, |
| 00314 |
| 00323 eOP_LITERAL = 18, |
| 00324 |
| 00333 eOP_VARIABLE = 19, |
| 00334 |
| 00348 eOP_GROUP = 20, |
| 00349 |
| 00358 eOP_NUMBERLIT = 21, |
| 00359 |
| 00373 eOP_ARGUMENT = 22, |
| 00374 |
| 00390 eOP_EXTFUNCTION = 23, |
| 00391 |
| 00408 eOP_FUNCTION = 24, |
| 00409 |
| 00423 eOP_LOCATIONPATH = 25, |
| 00424 |
| 00434 eOP_PREDICATE = 26, |
| 00435 |
| 00443 eNODETYPE_COMMENT = 27, |
| 00444 |
| 00452 eNODETYPE_TEXT = 28, |
| 00453 |
| 00461 eNODETYPE_PI = 29, |
| 00462 |
| 00470 eNODETYPE_NODE = 30, |
| 00471 |
| 00480 eNODENAME = 31, |
| 00481 |
| 00489 eNODETYPE_ROOT = 32, |
| 00490 |
| 00498 eNODETYPE_ANYELEMENT = 33, |
| 00499 |
| 00510 eFROM_ANCESTORS = 34, |
| 00511 eFROM_ANCESTORS_OR_SELF = 35, |
| 00512 eFROM_ATTRIBUTES = 36, |
| 00513 eFROM_CHILDREN = 37, |
| 00514 eFROM_DESCENDANTS = 38, |
| 00515 eFROM_DESCENDANTS_OR_SELF = 39, |
| 00516 eFROM_FOLLOWING = 40, |
| 00517 eFROM_FOLLOWING_SIBLINGS = 41, |
| 00518 eFROM_PARENT = 42, |
| 00519 eFROM_PRECEDING = 43, |
| 00520 eFROM_PRECEDING_SIBLINGS = 44, |
| 00521 eFROM_SELF = 45, |
| 00522 eFROM_NAMESPACE = 46, |
| 00523 eFROM_ROOT = 47, |
| 00524 |
| 00533 eOP_MATCHPATTERN = 48, |
| 00534 |
| 00543 eOP_LOCATIONPATHPATTERN = 49, |
| 00544 |
| 00545 <font class="comment">// For match patterns</font> |
| 00546 eMATCH_ATTRIBUTE = 50, |
| 00547 eMATCH_ANY_ANCESTOR = 51, |
| 00548 eMATCH_IMMEDIATE_ANCESTOR = 52, |
| 00549 eMATCH_ANY_ANCESTOR_WITH_PREDICATE = 53, |
| 00550 eMATCH_ANY_ANCESTOR_WITH_FUNCTION_CALL = 54, |
| 00551 |
| 00561 eOP_PREDICATE_WITH_POSITION = 55, |
| 00562 |
| 00567 eOP_FUNCTION_POSITION = 56, |
| 00568 eOP_FUNCTION_LAST = 57, |
| 00569 eOP_FUNCTION_COUNT = 58, |
| 00570 eOP_FUNCTION_NOT = 59, |
| 00571 eOP_FUNCTION_TRUE = 60, |
| 00572 eOP_FUNCTION_FALSE = 61, |
| 00573 eOP_FUNCTION_BOOLEAN = 62, |
| 00574 eOP_FUNCTION_NAME_0 = 63, |
| 00575 eOP_FUNCTION_NAME_1 = 64, |
| 00576 eOP_FUNCTION_LOCALNAME_0 = 65, |
| 00577 eOP_FUNCTION_LOCALNAME_1 = 66, |
| 00578 eOP_FUNCTION_FLOOR = 67, |
| 00579 eOP_FUNCTION_CEILING = 68, |
| 00580 eOP_FUNCTION_ROUND = 69, |
| 00581 eOP_FUNCTION_NUMBER_0 = 70, |
| 00582 eOP_FUNCTION_NUMBER_1 = 71, |
| 00583 eOP_FUNCTION_STRING_0 = 72, |
| 00584 eOP_FUNCTION_STRING_1 = 73, |
| 00585 eOP_FUNCTION_STRINGLENGTH_0 = 74, |
| 00586 eOP_FUNCTION_STRINGLENGTH_1 = 75, |
| 00587 eOP_FUNCTION_NAMESPACEURI_0 = 76, |
| 00588 eOP_FUNCTION_NAMESPACEURI_1 = 77, |
| 00589 eOP_FUNCTION_SUM = 78, |
| 00590 eOP_FUNCTION_CONCAT = 79, |
| 00591 |
| 00592 <font class="comment">// Always add _before_ this one and update</font> |
| 00593 <font class="comment">// s_opCodeLengthArray.</font> |
| 00594 eOpCodeNextAvailable |
| 00595 }; <font class="comment">// enum eOpCodes</font> |
| 00596 |
| 00600 <font class="keyword">class </font>XALAN_XPATH_EXPORT XPathExpressionException : <font class="keyword">public</font> <a class="code" href="classXalanXPathException.html">XalanXPathException</a> |
| 00601 { |
| 00602 <font class="keyword">public</font>: |
| 00603 |
| 00609 XPathExpressionException(<font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theMessage, |
| 00610 MemoryManagerType& theManager); |
| 00611 |
| 00612 <font class="keyword">virtual</font>~ |
| 00613 XPathExpressionException(); |
| 00614 }; |
| 00615 |
| 00619 <font class="keyword">class </font>XALAN_XPATH_EXPORT InvalidOpCodeException : <font class="keyword">public</font> XPathExpressionException |
| 00620 { |
| 00621 <font class="keyword">public</font>: |
| 00622 |
| 00628 InvalidOpCodeException(OpCodeMapValueType theOpCode, |
| 00629 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00630 |
| 00631 <font class="keyword">virtual</font>~ |
| 00632 InvalidOpCodeException(); |
| 00633 |
| 00634 <font class="keyword">private</font>: |
| 00635 |
| 00636 <font class="keyword">static</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& |
| 00637 FormatErrorMessage(OpCodeMapValueType theOpCode, |
| 00638 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00639 }; |
| 00640 |
| 00645 <font class="keyword">class </font>XALAN_XPATH_EXPORT InvalidArgumentCountException : <font class="keyword">public</font> XPathExpressionException |
| 00646 { |
| 00647 <font class="keyword">public</font>: |
| 00648 |
| 00656 InvalidArgumentCountException( |
| 00657 OpCodeMapValueType theOpCode, |
| 00658 OpCodeMapValueType theExpectedCount, |
| 00659 OpCodeMapValueType theSuppliedCount, |
| 00660 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00661 |
| 00662 <font class="keyword">virtual</font>~ |
| 00663 InvalidArgumentCountException(); |
| 00664 |
| 00665 <font class="keyword">private</font>: |
| 00666 |
| 00667 <font class="keyword">static</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& |
| 00668 FormatErrorMessage( |
| 00669 OpCodeMapValueType theOpCode, |
| 00670 OpCodeMapValueType theExpectedCount, |
| 00671 OpCodeMapValueType theSuppliedCount, |
| 00672 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00673 }; |
| 00674 |
| 00678 <font class="keyword">class </font>XALAN_XPATH_EXPORT InvalidArgumentException : <font class="keyword">public</font> XPathExpressionException |
| 00679 { |
| 00680 <font class="keyword">public</font>: |
| 00681 |
| 00688 InvalidArgumentException( |
| 00689 OpCodeMapValueType theOpCode, |
| 00690 OpCodeMapValueType theValue, |
| 00691 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00692 |
| 00693 <font class="keyword">virtual</font>~ |
| 00694 InvalidArgumentException(); |
| 00695 |
| 00696 <font class="keyword">private</font>: |
| 00697 |
| 00698 <font class="keyword">static</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& |
| 00699 FormatErrorMessage( |
| 00700 OpCodeMapValueType theOpCode, |
| 00701 OpCodeMapValueType theValue, |
| 00702 <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theResult); |
| 00703 }; |
| 00704 |
| 00705 |
| 00712 <font class="preprocessor">#if defined(XALAN_INLINE_INITIALIZATION)</font> |
| 00713 <font class="preprocessor"></font> <font class="keyword">static</font> <font class="keyword">const</font> TokenQueueSizeType s_opCodeMapLengthIndex = 1; |
| 00714 <font class="preprocessor">#else</font> |
| 00715 <font class="preprocessor"></font> <font class="keyword">enum</font> eDummy |
| 00716 { |
| 00717 s_opCodeMapLengthIndex = 1 |
| 00718 }; |
| 00719 <font class="preprocessor">#endif</font> |
| 00720 <font class="preprocessor"></font> |
| 00721 <font class="keyword">explicit</font> |
| 00722 XPathExpression(MemoryManagerType& theManager); |
| 00723 |
| 00724 ~XPathExpression(); |
| 00725 |
| 00726 MemoryManagerType& |
| 00727 getMemoryManager()<font class="keyword"></font> |
| 00728 <font class="keyword"> </font>{ |
| 00729 <font class="keywordflow">return</font> m_opMap.getMemoryManager(); |
| 00730 } |
| 00734 <font class="keywordtype">void</font> |
| 00735 reset(); |
| 00736 |
| 00740 <font class="keywordtype">void</font> |
| 00741 shrink(); |
| 00742 |
| 00748 OpCodeMapSizeType |
| 00749 opCodeMapSize()<font class="keyword"> const</font> |
| 00750 <font class="keyword"> </font>{ |
| 00751 <font class="keywordflow">return</font> OpCodeMapSizeType(m_opMap.size()); |
| 00752 } |
| 00753 |
| 00765 OpCodeMapValueType |
| 00766 opCodeMapLength()<font class="keyword"> const</font> |
| 00767 <font class="keyword"> </font>{ |
| 00768 <font class="keyword">const</font> OpCodeMapSizeType theSize = opCodeMapSize(); |
| 00769 |
| 00770 <font class="keywordflow">if</font> (theSize > s_opCodeMapLengthIndex) |
| 00771 { |
| 00772 assert(theSize == OpCodeMapSizeType(m_opMap[s_opCodeMapLengthIndex])); |
| 00773 |
| 00774 <font class="keywordflow">return</font> m_opMap[s_opCodeMapLengthIndex]; |
| 00775 } |
| 00776 <font class="keywordflow">else</font> |
| 00777 { |
| 00778 assert(theSize == OpCodeMapValueType(theSize)); |
| 00779 |
| 00780 <font class="keywordflow">return</font> OpCodeMapValueType(theSize); |
| 00781 } |
| 00782 } |
| 00783 |
| 00784 OpCodeMapPositionType |
| 00785 getInitialOpCodePosition()<font class="keyword"> const</font> |
| 00786 <font class="keyword"> </font>{ |
| 00787 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00788 <font class="preprocessor"></font> <font class="keywordflow">return</font> m_opMap.begin(); |
| 00789 <font class="preprocessor">#else</font> |
| 00790 <font class="preprocessor"></font> <font class="keywordflow">return</font> 0; |
| 00791 <font class="preprocessor">#endif</font> |
| 00792 <font class="preprocessor"></font> } |
| 00793 |
| 00794 <font class="keywordtype">bool</font> |
| 00795 isValidOpCodePosition(OpCodeMapPositionType opPos)<font class="keyword"> const</font> |
| 00796 <font class="keyword"> </font>{ |
| 00797 <font class="keyword">const</font> OpCodeMapDifferenceType theDifference = |
| 00798 OpCodeMapDifferenceType(opPos - getInitialOpCodePosition()); |
| 00799 |
| 00800 <font class="keywordflow">return</font> theDifference >= 0 && |
| 00801 theDifference < opCodeMapSize(); |
| 00802 } |
| 00803 |
| 00804 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00805 <font class="preprocessor"></font> <font class="keywordtype">bool</font> |
| 00806 isValidOpCodePosition(OpCodeMapSizeType theIndex)<font class="keyword"> const</font> |
| 00807 <font class="keyword"> </font>{ |
| 00808 <font class="keywordflow">return</font> theIndex >= 0 && theIndex < opCodeMapSize(); |
| 00809 } |
| 00810 |
| 00818 OpCodeMapValueType |
| 00819 getOpCodeMapValue(OpCodeMapSizeType theIndex)<font class="keyword"> const</font> |
| 00820 <font class="keyword"> </font>{ |
| 00821 assert(theIndex < opCodeMapLength()); |
| 00822 |
| 00823 <font class="keywordflow">return</font> m_opMap[theIndex]; |
| 00824 } |
| 00825 <font class="preprocessor">#endif</font> |
| 00826 <font class="preprocessor"></font> |
| 00834 OpCodeMapValueType |
| 00835 getOpCodeMapValue(OpCodeMapPositionType opPos)<font class="keyword"> const</font> |
| 00836 <font class="keyword"> </font>{ |
| 00837 assert(opPos < getInitialOpCodePosition() + opCodeMapLength()); |
| 00838 |
| 00839 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00840 <font class="preprocessor"></font> <font class="keywordflow">return</font> *opPos; |
| 00841 <font class="preprocessor">#else</font> |
| 00842 <font class="preprocessor"></font> |
| 00843 <font class="keywordflow">return</font> m_opMap[opPos]; |
| 00844 <font class="preprocessor">#endif</font> |
| 00845 <font class="preprocessor"></font> } |
| 00846 |
| 00854 <font class="keywordtype">void</font> |
| 00855 setOpCodeMapValue( |
| 00856 OpCodeMapSizeType theOpCodeMapIndex, |
| 00857 <font class="keyword">const</font> OpCodeMapValueType& theValue)<font class="keyword"></font> |
| 00858 <font class="keyword"> </font>{ |
| 00859 assert(theOpCodeMapIndex < opCodeMapLength()); |
| 00860 |
| 00861 m_opMap[theOpCodeMapIndex] = theValue; |
| 00862 } |
| 00863 |
| 00864 OpCodeMapValueType |
| 00865 getOpCodeArgumentLength(OpCodeMapPositionType opPos)<font class="keyword"> const</font> |
| 00866 <font class="keyword"> </font>{ |
| 00867 <font class="keywordflow">return</font> getOpCodeMapValue(opPos + XPathExpression::s_opCodeMapLengthIndex + 1) - 3; |
| 00868 } |
| 00869 |
| 00877 OpCodeMapValueType |
| 00878 getOpCodeLengthFromOpMap(OpCodeMapPositionType opPos, |
| 00879 MemoryManagerType& theManager) <font class="keyword">const</font>; |
| 00880 |
| 00881 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00882 <font class="preprocessor"></font> |
| 00889 OpCodeMapValueType |
| 00890 getOpCodeLengthFromOpMap(OpCodeMapSizeType theIndex, |
| 00891 MemoryManagerType& theManager) <font class="keyword">const</font>; |
| 00892 <font class="preprocessor">#endif</font> |
| 00893 <font class="preprocessor"></font> |
| 00894 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00895 <font class="preprocessor"></font> |
| 00902 OpCodeMapPositionType |
| 00903 getNextOpCodePosition(OpCodeMapPositionType opPos)<font class="keyword"> const</font> |
| 00904 <font class="keyword"> </font>{ |
| 00905 assert(opPos < getInitialOpCodePosition() + opCodeMapLength()); |
| 00906 |
| 00907 <font class="keywordflow">return</font> opPos + *(opPos + s_opCodeMapLengthIndex); |
| 00908 } |
| 00909 <font class="preprocessor">#endif</font> |
| 00910 <font class="preprocessor"></font> |
| 00918 OpCodeMapSizeType |
| 00919 <font class="preprocessor">#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)</font> |
| 00920 <font class="preprocessor"></font> getNextOpCodePosition(OpCodeMapSizeType theIndex) <font class="keyword">const</font> |
| 00921 <font class="preprocessor">#else</font> |
| 00922 <font class="preprocessor"></font> getNextOpCodePosition(OpCodeMapPositionType theIndex) <font class="keyword">const</font> |
| 00923 <font class="preprocessor">#endif</font> |
| 00924 <font class="preprocessor"></font> { |
| 00925 assert(theIndex < opCodeMapLength()); |
| 00926 |
| 00927 assert(theIndex + m_opMap[theIndex + s_opCodeMapLengthIndex] == |
| 00928 OpCodeMapSizeType(theIndex + m_opMap[theIndex + s_opCodeMapLengthIndex])); |
| 00929 |
| 00930 <font class="keywordflow">return</font> OpCodeMapSizeType(theIndex + m_opMap[theIndex + s_opCodeMapLengthIndex]); |
| 00931 } |
| 00932 |
| 00942 <font class="keywordtype">void</font> |
| 00943 setOpCodeArgs( |
| 00944 eOpCodes theOpCode, |
| 00945 OpCodeMapSizeType theIndex, |
| 00946 <font class="keyword">const</font> OpCodeMapValueVectorType& theArgs); |
| 00947 |
| 00954 OpCodeMapSizeType |
| 00955 appendOpCode(eOpCodes theOpCode); |
| 00956 |
| 00963 OpCodeMapSizeType |
| 00964 appendOpCode( |
| 00965 eOpCodes theOpCode, |
| 00966 <font class="keyword">const</font> OpCodeMapValueVectorType& theArgs)<font class="keyword"></font> |
| 00967 <font class="keyword"> </font>{ |
| 00968 <font class="keyword">const</font> OpCodeMapSizeType thePosition = appendOpCode(theOpCode); |
| 00969 |
| 00970 setOpCodeArgs(theOpCode, |
| 00971 thePosition, |
| 00972 theArgs); |
| 00973 |
| 00974 <font class="keywordflow">return</font> thePosition; |
| 00975 } |
| 00976 |
| 00984 <font class="keywordtype">void</font> |
| 00985 replaceOpCode( |
| 00986 OpCodeMapSizeType theIndex, |
| 00987 eOpCodes theOldOpCode, |
| 00988 eOpCodes theNewOpCode); |
| 00989 |
| 00996 OpCodeMapValueType |
| 00997 insertOpCode( |
| 00998 eOpCodes theOpCode, |
| 00999 OpCodeMapSizeType theIndex); |
| 01000 |
| 01010 <font class="keywordtype">void</font> |
| 01011 updateOpCodeLength(OpCodeMapSizeType theIndex)<font class="keyword"></font> |
| 01012 <font class="keyword"> </font>{ |
| 01013 assert(theIndex < opCodeMapSize()); |
| 01014 |
| 01015 updateOpCodeLength(m_opMap[theIndex], theIndex); |
| 01016 } |
| 01017 |
| 01026 <font class="keywordtype">void</font> |
| 01027 updateShiftedOpCodeLength( |
| 01028 OpCodeMapValueType theOpCode, |
| 01029 OpCodeMapSizeType theOriginalIndex, |
| 01030 OpCodeMapSizeType theNewIndex); |
| 01031 |
| 01042 <font class="keywordtype">void</font> |
| 01043 updateOpCodeLength( |
| 01044 OpCodeMapValueType theOpCode, |
| 01045 OpCodeMapSizeType theIndex); |
| 01046 |
| 01054 <font class="keyword">static</font> <font class="keywordtype">bool</font> |
| 01055 isNodeTestOpCode(OpCodeMapValueType theOpCode); |
| 01056 |
| 01062 <font class="keywordtype">void</font> |
| 01063 updateOpCodeLengthAfterNodeTest(OpCodeMapSizeType theIndex); |
| 01064 |
| 01070 <font class="keywordtype">bool</font> |
| 01071 hasMoreTokens()<font class="keyword"> const</font> |
| 01072 <font class="keyword"> </font>{ |
| 01073 <font class="keywordflow">return</font> tokenQueueSize() > m_currentPosition ? <font class="keyword">true</font> : <font class="keyword">false</font>; |
| 01074 } |
| 01075 |
| 01081 TokenQueueSizeType |
| 01082 tokenQueueSize()<font class="keyword"> const</font> |
| 01083 <font class="keyword"> </font>{ |
| 01084 <font class="keywordflow">return</font> TokenQueueSizeType(m_tokenQueue.size()); |
| 01085 } |
| 01086 |
| 01087 <font class="keywordtype">bool</font> |
| 01088 isValidTokenQueuePosition(TokenQueueSizeType thePosition)<font class="keyword"> const</font> |
| 01089 <font class="keyword"> </font>{ |
| 01090 <font class="keywordflow">return</font> thePosition < tokenQueueSize(); |
| 01091 } |
| 01092 |
| 01098 TokenQueueSizeType |
| 01099 getTokenPosition()<font class="keyword"> const</font> |
| 01100 <font class="keyword"> </font>{ |
| 01101 <font class="keywordflow">return</font> m_currentPosition; |
| 01102 } |
| 01103 |
| 01107 <font class="keywordtype">void</font> |
| 01108 resetTokenPosition()<font class="keyword"></font> |
| 01109 <font class="keyword"> </font>{ |
| 01110 m_currentPosition = 0; |
| 01111 } |
| 01112 |
| 01119 <font class="keyword">const</font> <a class="code" href="classXToken.html">XToken</a>* |
| 01120 getToken(TokenQueuePositionType thePosition)<font class="keyword"> const</font> |
| 01121 <font class="keyword"> </font>{ |
| 01122 assert(thePosition < tokenQueueSize()); |
| 01123 |
| 01124 <font class="keywordflow">return</font> &m_tokenQueue[thePosition]; |
| 01125 } |
| 01126 |
| 01132 <font class="keyword">const</font> <a class="code" href="classXToken.html">XToken</a>* |
| 01133 getNextToken()<font class="keyword"></font> |
| 01134 <font class="keyword"> </font>{ |
| 01135 <font class="keywordflow">if</font> (hasMoreTokens() == <font class="keyword">true</font>) |
| 01136 { |
| 01137 <font class="keywordflow">return</font> getToken(m_currentPosition++); |
| 01138 } |
| 01139 <font class="keywordflow">else</font> |
| 01140 { |
| 01141 <font class="keywordflow">return</font> 0; |
| 01142 } |
| 01143 } |
| 01144 |
| 01150 <font class="keyword">const</font> <a class="code" href="classXToken.html">XToken</a>* |
| 01151 getPreviousToken()<font class="keyword"></font> |
| 01152 <font class="keyword"> </font>{ |
| 01153 <font class="keywordflow">if</font> (m_currentPosition > 0) |
| 01154 { |
| 01155 <font class="keywordflow">return</font> getToken(--m_currentPosition); |
| 01156 } |
| 01157 <font class="keywordflow">else</font> |
| 01158 { |
| 01159 <font class="keywordflow">return</font> 0; |
| 01160 } |
| 01161 } |
| 01162 |
| 01163 <font class="keyword">enum</font> eRelativeDirection |
| 01164 { |
| 01165 eRelativeBackward, |
| 01166 eRelativeForward |
| 01167 }; |
| 01168 |
| 01177 <font class="keyword">const</font> <a class="code" href="classXToken.html">XToken</a>* |
| 01178 getRelativeToken( |
| 01179 TokenQueuePositionType theOffset, |
| 01180 eRelativeDirection theDirection)<font class="keyword"> const</font> |
| 01181 <font class="keyword"> </font>{ |
| 01182 <font class="keyword">const</font> TokenQueuePositionType thePosition = |
| 01183 calculateRelativePosition(theOffset, theDirection); |
| 01184 |
| 01185 <font class="keywordflow">if</font> (thePosition == tokenQueueSize()) |
| 01186 { |
| 01187 <font class="keywordflow">return</font> 0; |
| 01188 } |
| 01189 <font class="keywordflow">else</font> |
| 01190 { |
| 01191 <font class="keywordflow">return</font> getToken(thePosition); |
| 01192 } |
| 01193 } |
| 01194 |
| 01200 <font class="keywordtype">void</font> |
| 01201 pushToken(<font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theToken)<font class="keyword"></font> |
| 01202 <font class="keyword"> </font>{ |
| 01203 m_tokenQueue.push_back(<a class="code" href="XTokenStringAdapter_8hpp.html#a1">XToken</a>(theToken, getMemoryManager())); |
| 01204 } |
| 01205 |
| 01212 <font class="keywordtype">void</font> |
| 01213 pushToken( |
| 01214 <font class="keywordtype">double</font> theNumber, |
| 01215 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theString)<font class="keyword"></font> |
| 01216 <font class="keyword"> </font>{ |
| 01217 m_tokenQueue.push_back(<a class="code" href="XTokenStringAdapter_8hpp.html#a1">XToken</a>(theNumber, theString)); |
| 01218 } |
| 01219 |
| 01226 <font class="keywordtype">void</font> |
| 01227 insertToken(<font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theToken)<font class="keyword"></font> |
| 01228 <font class="keyword"> </font>{ |
| 01229 m_tokenQueue.insert(m_tokenQueue.begin() + (m_currentPosition - 1), <a class="code" href="XTokenStringAdapter_8hpp.html#a1">XToken</a>(theToken, getMemoryManager())); |
| 01230 } |
| 01231 |
| 01239 <font class="keywordtype">void</font> |
| 01240 insertToken( |
| 01241 <font class="keywordtype">double</font> theNumber, |
| 01242 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theString)<font class="keyword"></font> |
| 01243 <font class="keyword"> </font>{ |
| 01244 m_tokenQueue.insert(m_tokenQueue.begin() + (m_currentPosition - 1), <a class="code" href="XTokenStringAdapter_8hpp.html#a1">XToken</a>(theNumber, theString)); |
| 01245 } |
| 01246 |
| 01253 <font class="keywordtype">void</font> |
| 01254 replaceRelativeToken( |
| 01255 TokenQueuePositionType theOffset, |
| 01256 eRelativeDirection theDirection, |
| 01257 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theString)<font class="keyword"></font> |
| 01258 <font class="keyword"> </font>{ |
| 01259 <font class="keyword">const</font> TokenQueuePositionType thePosition = |
| 01260 calculateRelativePosition(theOffset, theDirection); |
| 01261 assert(thePosition < tokenQueueSize()); |
| 01262 |
| 01263 m_tokenQueue[thePosition].set(theString, getMemoryManager()); |
| 01264 } |
| 01265 |
| 01272 <font class="keywordtype">void</font> |
| 01273 dumpOpCodeMap( |
| 01274 <a class="code" href="classPrintWriter.html">PrintWriter</a>& thePrintWriter, |
| 01275 OpCodeMapSizeType theStartPosition = 0) <font class="keyword">const</font>; |
| 01276 |
| 01283 <font class="keywordtype">void</font> |
| 01284 dumpOpCodeMap( |
| 01285 OstreamType& theStream, |
| 01286 OpCodeMapSizeType theStartPosition = 0) <font class="keyword">const</font>; |
| 01287 |
| 01294 <font class="keywordtype">void</font> |
| 01295 dumpTokenQueue( |
| 01296 <a class="code" href="classPrintWriter.html">PrintWriter</a>& thePrintWriter, |
| 01297 TokenQueueSizeType theStartPosition = 0) <font class="keyword">const</font>; |
| 01298 |
| 01305 <font class="keywordtype">void</font> |
| 01306 dumpTokenQueue( |
| 01307 OstreamType& theStream, |
| 01308 TokenQueueSizeType theStartPosition = 0) <font class="keyword">const</font>; |
| 01309 |
| 01315 <font class="keywordtype">void</font> |
| 01316 dumpRemainingTokenQueue(<a class="code" href="classPrintWriter.html">PrintWriter</a>& thePrintWriter) <font class="keyword">const</font>; |
| 01317 |
| 01324 <font class="keywordtype">void</font> |
| 01325 dumpRemainingTokenQueue( |
| 01326 OstreamType& theStream, |
| 01327 MemoryManager& theMemoryManager) <font class="keyword">const</font>; |
| 01328 |
| 01335 <font class="keywordtype">void</font> |
| 01336 pushValueOnOpCodeMap(<font class="keyword">const</font> OpCodeMapType::value_type& theValue)<font class="keyword"></font> |
| 01337 <font class="keyword"> </font>{ |
| 01338 <font class="comment">// Push the index onto the op map.</font> |
| 01339 m_opMap.push_back(theValue); |
| 01340 |
| 01341 <font class="comment">// Update the op map length.</font> |
| 01342 ++m_opMap[s_opCodeMapLengthIndex]; |
| 01343 } |
| 01344 |
| 01351 <font class="keywordtype">void</font> |
| 01352 pushArgumentOnOpCodeMap(<font class="keyword">const</font> <a class="code" href="classXToken.html">XToken</a>& theXToken); |
| 01353 |
| 01360 <font class="keywordtype">void</font> |
| 01361 pushArgumentOnOpCodeMap(<font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theString); |
| 01362 |
| 01370 <font class="keywordtype">void</font> |
| 01371 pushArgumentOnOpCodeMap( |
| 01372 <font class="keywordtype">double</font> theNumber, |
| 01373 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& theString); |
| 01374 |
| 01381 <font class="keywordtype">void</font> |
| 01382 pushNumberLiteralOnOpCodeMap(<font class="keywordtype">double</font> theNumber); |
| 01383 |
| 01389 <font class="keywordtype">double</font> |
| 01390 getNumberLiteral(<font class="keywordtype">int</font> theIndex)<font class="keyword"> const</font> |
| 01391 <font class="keyword"> </font>{ |
| 01392 assert(theIndex >= 0 && |
| 01393 NumberLiteralValueVectorType::size_type(theIndex) < m_numberLiteralValues.size()); |
| 01394 |
| 01395 <font class="keywordflow">return</font> m_numberLiteralValues[<a class="code" href="XalanMap_8hpp.html#a1">NumberLiteralValueVectorType::size_type</a>(theIndex)]; |
| 01396 } |
| 01397 |
| 01402 <font class="keywordtype">void</font> |
| 01403 pushCurrentTokenOnOpCodeMap(); |
| 01404 |
| 01410 <font class="keywordtype">void</font> |
| 01411 setCurrentPattern(<font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& thePattern)<font class="keyword"></font> |
| 01412 <font class="keyword"> </font>{ |
| 01413 m_currentPattern = &thePattern; |
| 01414 } |
| 01415 |
| 01421 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>& |
| 01422 getCurrentPattern()<font class="keyword"> const</font> |
| 01423 <font class="keyword"> </font>{ |
| 01424 assert(m_currentPattern != 0); |
| 01425 |
| 01426 <font class="keywordflow">return</font> *m_currentPattern; |
| 01427 } |
| 01428 |
| 01429 <font class="keyword">private</font>: |
| 01430 |
| 01440 TokenQueuePositionType |
| 01441 calculateRelativePosition( |
| 01442 TokenQueuePositionType theOffset, |
| 01443 eRelativeDirection theDirection)<font class="keyword"> const</font> |
| 01444 <font class="keyword"> </font>{ |
| 01445 <font class="keywordflow">if</font> (theDirection == eRelativeBackward && |
| 01446 theOffset <= m_currentPosition) |
| 01447 { |
| 01448 <font class="keywordflow">return</font> m_currentPosition - theOffset; |
| 01449 } |
| 01450 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (theDirection == eRelativeForward && |
| 01451 m_currentPosition + theOffset < tokenQueueSize()) |
| 01452 { |
| 01453 <font class="keywordflow">return</font> m_currentPosition + theOffset; |
| 01454 } |
| 01455 <font class="keywordflow">else</font> |
| 01456 { |
| 01457 <font class="keywordflow">return</font> tokenQueueSize(); |
| 01458 } |
| 01459 } |
| 01460 |
| 01467 OpCodeMapType m_opMap; |
| 01468 |
| 01473 OpCodeMapSizeType m_lastOpCodeIndex; |
| 01474 |
| 01480 TokenQueueType m_tokenQueue; |
| 01481 |
| 01485 TokenQueueSizeType m_currentPosition; |
| 01486 |
| 01490 <font class="keyword">const</font> <a class="code" href="classXalanDOMString.html">XalanDOMString</a>* m_currentPattern; |
| 01491 |
| 01492 <font class="comment">// Default vector allocation sizes.</font> |
| 01493 <font class="keyword">enum</font> |
| 01494 { |
| 01495 eDefaultOpMapSize = 100, |
| 01496 eDefaultTokenQueueSize = 30 |
| 01497 }; |
| 01498 |
| 01499 NumberLiteralValueVectorType m_numberLiteralValues; |
| 01500 }; |
| 01501 |
| 01502 |
| 01503 |
| 01504 XALAN_CPP_NAMESPACE_END |
| 01505 |
| 01506 |
| 01507 |
| 01508 <font class="preprocessor">#endif // XPATHEXPRESSION_HEADER_GUARD_1357924680</font> |
| </font></pre></div><p align="center"><a href="diagramnotes.html">Interpreting class diagrams</a></p>
|
| <p><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
|
| <i><A href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</A> and
|
| <A href="http://www.research.att.com/sw/tools/graphviz/">GraphViz</A> are used to generate this API documentation from the Xalan-C header files.</I></FONT></p>
|
|
|
| <TABLE border="0" cellpadding="0" cellspacing="0" width="820"><TR><TD bgcolor="#0086b2"><IMG height="1" src="../resources/dot.gif" width="1" alt="dot"></TD></TR></TABLE>
|
| <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="80%">
|
| <TR>
|
| <TD WIDTH="80%" VALIGN="TOP">
|
| <P ALIGN="CENTER"><B>Xalan-C++ XSLT Processor Version 1.10</B><BR>
|
| Copyright © 1999-2004 The Apache Software Foundation. All Rights Reserved.</i></p>
|
| </TD>
|
| </TR>
|
| <TR>
|
| <TD WIDTH="100%">
|
| <P ALIGN="CENTER"><IMG SRC="ApacheLogo.jpg" WIDTH="387" HEIGHT="100" ALIGN="BOTTOM" BORDER="0" ALT="Apache Logo">
|
| </TD>
|
| </TR>
|
| </TABLE>
|