You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2002/09/06 08:10:33 UTC
cvs commit: xml-xalan/c/src/XSLT ElemNumber.cpp ElemNumber.hpp
dbertoni 2002/09/05 23:10:33
Modified: c/src/XSLT ElemNumber.cpp ElemNumber.hpp
Log:
Reduced dynamic memory allocation in initialization.
Revision Changes Path
1.58 +59 -73 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.57
retrieving revision 1.58
diff -u -r1.57 -r1.58
--- ElemNumber.cpp 6 Sep 2002 01:39:17 -0000 1.57
+++ ElemNumber.cpp 6 Sep 2002 06:10:33 -0000 1.58
@@ -2,7 +2,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -460,9 +460,9 @@
{
StylesheetExecutionContext::GetAndReleaseCachedString theMatchPatternString(executionContext);
- assign(theMatchPatternString.get(), s_piString);
+ theMatchPatternString.get() = s_piString;
append(theMatchPatternString.get(), contextNode->getNodeName());
- append(theMatchPatternString.get(), s_leftParenString);
+ append(theMatchPatternString.get(), XalanUnicode::charRightParenthesis);
countMatchPattern = executionContext.createMatchPattern(
theMatchPatternString.get(),
@@ -1013,7 +1013,7 @@
}
else
{
- theResult += s_defaultSeparatorString;
+ theResult += XalanUnicode::charFullStop;
}
clear(theIntermediateResult);
@@ -1328,11 +1328,11 @@
switch(numberType)
{
case XalanUnicode::charLetter_A:
- int2alphaCount(listElement, s_alphaCountTable, theResult);
+ int2alphaCount(listElement, s_alphaCountTable, s_alphaCountTableSize, theResult);
break;
case XalanUnicode::charLetter_a:
- int2alphaCount(listElement, s_alphaCountTable, theResult);
+ int2alphaCount(listElement, s_alphaCountTable, s_alphaCountTableSize, theResult);
theResult = toLowerCaseASCII(theResult);
break;
@@ -1384,7 +1384,7 @@
}
else if (equals(letterVal, s_alphabeticString) == true)
{
- int2alphaCount(listElement, s_elalphaCountTable, theResult);
+ int2alphaCount(listElement, s_elalphaCountTable, s_elalphaCountTableSize, theResult);
}
else
{
@@ -1454,13 +1454,14 @@
void
ElemNumber::int2alphaCount(
- int val,
- const XalanDOMString& table,
- XalanDOMString& theResult)
+ int val,
+ const XalanDOMChar table[],
+ XalanDOMString::size_type length,
+ XalanDOMString& theResult)
{
- assert(int(length(table)) == length(table));
+ assert(int(length) == length);
- const int radix = int(length(table));
+ const int radix = int(length);
// Create a buffer to hold the result
// TODO: size of the table can be determined by computing
@@ -1529,7 +1530,7 @@
break;
// put out the next character of output
- buf[charPos--] = charAt(table, lookupIndex);
+ buf[charPos--] = table[lookupIndex];
}
while (val > 0);
@@ -1743,8 +1744,10 @@
}
+#define ELEMNUMBER_SIZE(str) ((sizeof(str) / sizeof(str[0]) - 1))
-static const XalanDOMChar alphaCountTable[] =
+
+const XalanDOMChar ElemNumber::s_alphaCountTable[] =
{
XalanUnicode::charLetter_Z,
XalanUnicode::charLetter_A,
@@ -1775,9 +1778,12 @@
0
};
+const XalanDOMString::size_type ElemNumber::s_alphaCountTableSize =
+ ELEMNUMBER_SIZE(s_alphaCountTable);
+
-static const XalanDOMChar elalphaCountTable[] =
+const XalanDOMChar ElemNumber::s_elalphaCountTable[] =
{
0x03c9,
0x03b1,
@@ -1808,8 +1814,9 @@
};
+const XalanDOMString::size_type ElemNumber::s_elalphaCountTableSize =
+ ELEMNUMBER_SIZE(s_elalphaCountTable);
-static XalanDOMString s_atString;
static XalanDOMString s_textString;
@@ -1817,20 +1824,6 @@
static XalanDOMString s_slashString;
-static XalanDOMString s_piString;
-
-static XalanDOMString s_leftParenString;
-
-static XalanDOMString s_dotString;
-
-static XalanDOMString s_oneString;
-
-static XalanDOMString s_defaultSeparatorString;
-
-static XalanDOMString s_alphaCountTable;
-
-static XalanDOMString s_elalphaCountTable;
-
static ElemNumber::DecimalToRomanVectorType s_romanConvertTable;
@@ -1838,7 +1831,11 @@
static ElemNumber::NumberingResourceBundleMapType s_resourceBundles;
-const XalanDOMString& ElemNumber::s_atString = ::s_atString;
+const XalanDOMChar ElemNumber::s_atString[] =
+{
+ XalanUnicode::charAmpersand,
+ 0
+};
const XalanDOMString& ElemNumber::s_textString = ::s_textString;
@@ -1846,19 +1843,33 @@
const XalanDOMString& ElemNumber::s_slashString = ::s_slashString;
-const XalanDOMString& ElemNumber::s_piString = ::s_piString;
-
-const XalanDOMString& ElemNumber::s_leftParenString = ::s_leftParenString;
-
-const XalanDOMString& ElemNumber::s_dotString = ::s_dotString;
-
-const XalanDOMString& ElemNumber::s_oneString = ::s_oneString;
-
-const XalanDOMString& ElemNumber::s_defaultSeparatorString = ::s_defaultSeparatorString;
-
-const XalanDOMString& ElemNumber::s_alphaCountTable = ::s_alphaCountTable;
-
-const XalanDOMString& ElemNumber::s_elalphaCountTable = ::s_elalphaCountTable;
+const XalanDOMChar ElemNumber::s_piString[] =
+{
+ XalanUnicode::charLetter_p,
+ XalanUnicode::charLetter_r,
+ XalanUnicode::charLetter_o,
+ XalanUnicode::charLetter_c,
+ XalanUnicode::charLetter_e,
+ XalanUnicode::charLetter_s,
+ XalanUnicode::charLetter_s,
+ XalanUnicode::charLetter_i,
+ XalanUnicode::charLetter_n,
+ XalanUnicode::charLetter_g,
+ XalanUnicode::charHyphenMinus,
+ XalanUnicode::charLetter_i,
+ XalanUnicode::charLetter_n,
+ XalanUnicode::charLetter_s,
+ XalanUnicode::charLetter_t,
+ XalanUnicode::charLetter_r,
+ XalanUnicode::charLetter_u,
+ XalanUnicode::charLetter_c,
+ XalanUnicode::charLetter_t,
+ XalanUnicode::charLetter_i,
+ XalanUnicode::charLetter_o,
+ XalanUnicode::charLetter_n,
+ XalanUnicode::charLeftParenthesis,
+ 0
+};
const XalanDOMChar ElemNumber::s_levelString[] =
{
@@ -2022,7 +2033,8 @@
const XalanDOMString theLanguageString("el");
- const XalanNumberingResourceBundle theElaphaBundle(
+ // Create an instance...
+ XalanNumberingResourceBundle theElaphaBundle(
theLanguageString,
theLanguageString,
theLanguageString,
@@ -2039,9 +2051,8 @@
theElalphaDigitsTable,
theDigitsTableTable);
- typedef ElemNumber::NumberingResourceBundleMapType::value_type value_type;
-
- theBundleMap[elalphaNumberType] = theElaphaBundle;
+ // Swap it with the one in the map (this avoids making a copy...)
+ theBundleMap[elalphaNumberType].swap(theElaphaBundle);
}
@@ -2049,28 +2060,12 @@
void
ElemNumber::initialize()
{
- ::s_atString = XALAN_STATIC_UCODE_STRING("@");
-
::s_textString = XALAN_STATIC_UCODE_STRING("text()");
::s_commentString = XALAN_STATIC_UCODE_STRING("comment()");
::s_slashString = XALAN_STATIC_UCODE_STRING("/");
- ::s_piString = XALAN_STATIC_UCODE_STRING("pi(");
-
- ::s_leftParenString = XALAN_STATIC_UCODE_STRING(")");
-
- ::s_dotString = XALAN_STATIC_UCODE_STRING(".");
-
- ::s_oneString = XALAN_STATIC_UCODE_STRING("1");
-
- ::s_defaultSeparatorString = XALAN_STATIC_UCODE_STRING(".");
-
- ::s_alphaCountTable = alphaCountTable;
-
- ::s_elalphaCountTable = elalphaCountTable;
-
::s_romanConvertTable.reserve(7);
::s_romanConvertTable.push_back(
@@ -2130,18 +2125,9 @@
void
ElemNumber::terminate()
{
- releaseMemory(::s_atString);
releaseMemory(::s_textString);
releaseMemory(::s_commentString);
releaseMemory(::s_slashString);
- releaseMemory(::s_piString);
- releaseMemory(::s_leftParenString);
- releaseMemory(::s_dotString);
- releaseMemory(::s_oneString);
- releaseMemory(::s_defaultSeparatorString);
-
- releaseMemory(::s_alphaCountTable);
- releaseMemory(::s_elalphaCountTable);
DecimalToRomanVectorType().swap(::s_romanConvertTable);
1.37 +15 -30 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.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- ElemNumber.hpp 6 Sep 2002 03:02:37 -0000 1.36
+++ ElemNumber.hpp 6 Sep 2002 06:10:33 -0000 1.37
@@ -2,7 +2,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 1999 The Apache Software Foundation. All rights
+ * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -297,6 +297,7 @@
* count using the sequence A B C ... Z AA AB AC.... etc.
* @param val Value to convert -- must be greater than zero.
* @param table a table containing one character for each digit in the radix
+ * @param length the table length
* @param result returns the stringrepresenting alpha count of number.
* @see XSLTEngineImpl#DecimalToRoman
*
@@ -305,9 +306,10 @@
*/
static void
int2alphaCount(
- int val,
- const XalanDOMString& table,
- XalanDOMString& theResult);
+ int val,
+ const XalanDOMChar table[],
+ XalanDOMString::size_type length,
+ XalanDOMString& theResult);
/**
* Convert a long integer into traditional alphabetic counting, in other words
@@ -396,7 +398,7 @@
/**
* The string "@".
*/
- static const XalanDOMString& s_atString;
+ static const XalanDOMChar s_atString[];
/**
* The string "text()".
@@ -414,29 +416,9 @@
static const XalanDOMString& s_slashString;
/**
- * The string "pi(".
- */
- static const XalanDOMString& s_piString;
-
- /**
- * The string ")".
- */
- static const XalanDOMString& s_leftParenString;
-
- /**
- * The string ".".
+ * The string "processing-instruction(".
*/
- static const XalanDOMString& s_dotString;
-
- /**
- * The string "1".
- */
- static const XalanDOMString& s_oneString;
-
- /**
- * The string ".".
- */
- static const XalanDOMString& s_defaultSeparatorString;
+ static const XalanDOMChar s_piString[];
/**
* The string "level".
@@ -470,11 +452,14 @@
/**
* Chars for converting integers into alpha counts.
- * @see XSLTEngineImpl#int2alphaCount
*/
- static const XalanDOMString& s_alphaCountTable;
+ static const XalanDOMChar s_alphaCountTable[];
+
+ static const XalanDOMString::size_type s_alphaCountTableSize;
+
+ static const XalanDOMChar s_elalphaCountTable[];
- static const XalanDOMString& s_elalphaCountTable;
+ static const XalanDOMString::size_type s_elalphaCountTableSize;
/**
* Table to help in converting decimals to roman numerals.
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org