dbertoni 2002/09/23 23:57:43
Modified: c/src/XSLT CountersTable.cpp CountersTable.hpp
ElemNumber.cpp ElemNumber.hpp
StylesheetExecutionContextDefault.cpp
StylesheetHandler.cpp StylesheetRoot.cpp
StylesheetRoot.hpp
Log:
Use vector for xsl:number counters table.
Revision Changes Path
1.4 +7 -5 xml-xalan/c/src/XSLT/CountersTable.cpp
Index: CountersTable.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/CountersTable.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CountersTable.cpp 26 Sep 2001 21:30:23 -0000 1.3
+++ CountersTable.cpp 24 Sep 2002 06:57:42 -0000 1.4
@@ -90,16 +90,18 @@
int
CountersTable::countNode(
StylesheetExecutionContext& support,
- const ElemNumber*
numberElem,
+ const ElemNumber&
numberElem,
XalanNode*
node)
{
+ assert(numberElem.getID() < m_countersVector.size());
+
int count = 0;
- CounterVectorType& counters = m_counterMap[numberElem];
+ CounterVectorType& counters = m_countersVector[numberElem.getID()];
const CounterVectorType::size_type nCounters = counters.size();
- XalanNode* target = numberElem->getTargetNode(support, node);
+ XalanNode* target = numberElem.getTargetNode(support, node);
if(0 != target)
{
@@ -121,7 +123,7 @@
// the backwards list (m_newFound) to the forwards list
// (counter.m_countNodes).
count = 0;
- for(; 0 != target; target =
numberElem->getPreviousNode(support, target))
+ for(; 0 != target; target = numberElem.getPreviousNode(support,
target))
{
// First time in, we should not have to check for
previous counts,
// since the original target node was already checked
in the
@@ -157,7 +159,7 @@
// If we got to this point, then we didn't find a counter, so
make
// one and add it to the list.
- counters.push_back(Counter(numberElem));
+ counters.push_back(Counter(&numberElem));
Counter& counter = counters.back();
1.6 +24 -13 xml-xalan/c/src/XSLT/CountersTable.hpp
Index: CountersTable.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/CountersTable.hpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- CountersTable.hpp 1 Aug 2002 18:09:27 -0000 1.5
+++ CountersTable.hpp 24 Sep 2002 06:57:42 -0000 1.6
@@ -182,13 +182,10 @@
#if defined(XALAN_NO_NAMESPACES)
typedef vector<Counter>
CounterVectorType;
- typedef map<const ElemNumber*,
- CounterVectorType,
- less<const ElemNumber*> >
ElemToCounterVectorMapType;
+ typedef vector<CounterVectorType>
ElemCounterVectorVectorType;
#else
typedef std::vector<Counter> CounterVectorType;
- typedef std::map<const ElemNumber*,
- CounterVectorType>
ElemToCounterVectorMapType;
+ typedef std::vector<CounterVectorType> ElemCounterVectorVectorType;
#endif
typedef Counter::NodeVectorType NodeVectorType;
@@ -196,14 +193,28 @@
/**
* Construct a CountersTable.
*/
- CountersTable() :
- m_counterMap(),
+ CountersTable(unsigned long theSize = 0) :
+ m_countersVector(),
m_newFound()
{
+ resize(theSize);
};
/**
+ * Resize the table. The must be done prior
+ * to using the table, if the size was not past
+ * in the constructor.
+ *
+ * @theSize The new size
+ */
+ void
+ resize(unsigned long theSize)
+ {
+ m_countersVector.resize(theSize);
+ }
+
+ /**
* Count forward until the given node is found, or until
* we have looked to the given amount.
*
@@ -215,7 +226,7 @@
int
countNode(
StylesheetExecutionContext&
executionContext,
- const ElemNumber*
numberElem,
+ const ElemNumber&
numberElem,
XalanNode*
node);
/**
@@ -226,21 +237,21 @@
{
m_newFound.clear();
- m_counterMap.clear();
+ m_countersVector.clear();
}
private:
/**
- * A map which holds counters for ElemNumber instances.
+ * A vector which holds counters for ElemNumber instances.
*/
- ElemToCounterVectorMapType m_counterMap;
+ ElemCounterVectorVectorType m_countersVector;
/**
* A vector to use as a temporary buffer.
*/
- NodeVectorType m_newFound;
+ NodeVectorType m_newFound;
};
1.65 +6 -4 xml-xalan/c/src/XSLT/ElemNumber.cpp
Index: ElemNumber.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemNumber.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- ElemNumber.cpp 24 Sep 2002 01:42:34 -0000 1.64
+++ ElemNumber.cpp 24 Sep 2002 06:57:42 -0000 1.65
@@ -107,7 +107,8 @@
Stylesheet&
stylesheetTree,
const AttributeList& atts,
int
lineNumber,
- int
columnNumber) :
+ int
columnNumber,
+ unsigned long id) :
ElemTemplateElement(constructionContext,
stylesheetTree,
lineNumber,
@@ -121,7 +122,8 @@
m_lang_avt(0),
m_lettervalue_avt(0),
m_groupingSeparator_avt(0),
- m_groupingSize_avt(0)
+ m_groupingSize_avt(0),
+ m_id(id)
{
const unsigned int nAttrs = atts.getLength();
@@ -499,7 +501,7 @@
numberList[i] = ctable.countNode(
executionContext,
- this,
+ *this,
target);
}
@@ -550,7 +552,7 @@
if(eAny == m_level)
{
const int theNumber =
- ctable.countNode(executionContext, this,
sourceNode);
+ ctable.countNode(executionContext, *this,
sourceNode);
formatNumberList(
executionContext,
1.41 +11 -1 xml-xalan/c/src/XSLT/ElemNumber.hpp
Index: ElemNumber.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/ElemNumber.hpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -r1.40 -r1.41
--- ElemNumber.hpp 9 Sep 2002 18:39:49 -0000 1.40
+++ ElemNumber.hpp 24 Sep 2002 06:57:42 -0000 1.41
@@ -132,13 +132,15 @@
* @param atts list of attributes for element
* @param lineNumber line number in document
* @param columnNumber column number in document
+ * @param id The unique ID within the
stylesheet for this xsl:number element
*/
ElemNumber(
StylesheetConstructionContext& constructionContext,
Stylesheet&
stylesheetTree,
const AttributeList& atts,
int
lineNumber,
- int
columnNumber);
+ int
columnNumber,
+ unsigned long id);
virtual
~ElemNumber();
@@ -151,6 +153,12 @@
virtual void
execute(StylesheetExecutionContext& executionContext) const;
+ unsigned long
+ getID() const
+ {
+ return m_id;
+ }
+
/**
* Get the previous node to be counted.
*/
@@ -392,6 +400,8 @@
const AVT* m_lettervalue_avt;
const AVT* m_groupingSeparator_avt;
const AVT* m_groupingSize_avt;
+
+ const unsigned long m_id;
/**
* The string "@".
1.102 +2 -0
xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp
Index: StylesheetExecutionContextDefault.cpp
===================================================================
RCS file:
/home/cvs/xml-xalan/c/src/XSLT/StylesheetExecutionContextDefault.cpp,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- StylesheetExecutionContextDefault.cpp 24 Sep 2002 05:59:38 -0000
1.101
+++ StylesheetExecutionContextDefault.cpp 24 Sep 2002 06:57:42 -0000
1.102
@@ -297,6 +297,8 @@
{
m_xsltProcessor->setExecutionContext(this);
}
+
+ m_countersTable.resize(theStylesheet->getElemNumberCount());
}
1.89 +7 -3 xml-xalan/c/src/XSLT/StylesheetHandler.cpp
Index: StylesheetHandler.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetHandler.cpp,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -r1.88 -r1.89
--- StylesheetHandler.cpp 24 Sep 2002 05:59:38 -0000 1.88
+++ StylesheetHandler.cpp 24 Sep 2002 06:57:42 -0000 1.89
@@ -513,9 +513,13 @@
break;
case
StylesheetConstructionContext::ELEMNAME_NUMBER:
- elem = new
ElemNumber(m_constructionContext,
-
m_stylesheet,
-
atts, lineNumber, columnNumber);
+ elem = new ElemNumber(
+ m_constructionContext,
+ m_stylesheet,
+ atts,
+ lineNumber,
+ columnNumber,
+
m_stylesheet.getStylesheetRoot().getNextElemNumberID());
break;
case
StylesheetConstructionContext::ELEMNAME_VARIABLE:
1.63 +2 -1 xml-xalan/c/src/XSLT/StylesheetRoot.cpp
Index: StylesheetRoot.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetRoot.cpp,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -r1.62 -r1.63
--- StylesheetRoot.cpp 21 Sep 2002 01:24:41 -0000 1.62
+++ StylesheetRoot.cpp 24 Sep 2002 06:57:42 -0000 1.63
@@ -142,7 +142,8 @@
m_needToBuildKeysTable(false),
m_outputEscapeURLs(true),
m_indentAmount(-1),
- m_omitMETATag(false)
+ m_omitMETATag(false),
+ m_elemNumberNextID(0)
{
// Our base class has already resolved the URI and pushed it on
// the back of the include stack, so get it from there...
1.21 +16 -0 xml-xalan/c/src/XSLT/StylesheetRoot.hpp
Index: StylesheetRoot.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XSLT/StylesheetRoot.hpp,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- StylesheetRoot.hpp 21 Sep 2002 01:24:41 -0000 1.20
+++ StylesheetRoot.hpp 24 Sep 2002 06:57:42 -0000 1.21
@@ -443,6 +443,18 @@
StylesheetExecutionContext&
executionContext,
KeyTablesTableType&
theKeysTable) const;
+ unsigned long
+ getNextElemNumberID()
+ {
+ return m_elemNumberNextID++;
+ }
+
+ unsigned long
+ getElemNumberCount() const
+ {
+ return m_elemNumberNextID;
+ }
+
private:
/**
@@ -509,6 +521,10 @@
*/
bool m_omitMETATag;
+ /**
+ * This is set to true if we should omit the META tag in HTML output
(the default is false)
+ */
+ unsigned long m_elemNumberNextID;
// Not implemented...
StylesheetRoot(const StylesheetRoot&);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]