dbertoni 2003/04/02 22:19:14
Modified: c/src/XalanDOM XalanDOMString.cpp XalanDOMString.hpp
Log:
Fixed bugs with insert and assign.
Revision Changes Path
1.37 +67 -14 xml-xalan/c/src/XalanDOM/XalanDOMString.cpp
Index: XalanDOMString.cpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanDOM/XalanDOMString.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -r1.36 -r1.37
--- XalanDOMString.cpp 22 Jan 2003 18:35:07 -0000 1.36
+++ XalanDOMString.cpp 3 Apr 2003 06:19:14 -0000 1.37
@@ -292,14 +292,14 @@
{
invariants();
-#if __SGI_STL_PORT <= 0x400
+#if defined(__SGI_STL_PORT) && __SGI_STL_PORT <= 0x400
XalanDOMString temp;
- temp.reserve(theLastPosition - theFirstPosition + 1);
+ temp.m_data.reserve(theLastPosition - theFirstPosition + 1);
while(theFirstPosition != theLastPosition)
{
- temp.push_back(*theFirstPosition);
+ temp.m_data.push_back(*theFirstPosition);
++theFirstPosition;
}
@@ -310,6 +310,8 @@
swap(temp);
#else
+ m_data.reserve(theLastPosition - theFirstPosition + 1);
+
m_data.assign(theFirstPosition, theLastPosition);
m_data.push_back(XalanDOMChar(0));
@@ -461,9 +463,20 @@
{
invariants();
- m_data.insert(getIteratorForPosition(thePosition), theString, theString
+ theCount);
+ if (m_data.empty() == true)
+ {
+ assert(thePosition == 0);
+
+ append(theString, theCount);
+
+ assert(length() == theCount);
+ }
+ else
+ {
+ m_data.insert(getIteratorForPosition(thePosition), theString,
theString + theCount);
- m_size += theCount;
+ m_size += theCount;
+ }
invariants();
@@ -480,9 +493,18 @@
{
invariants();
- m_data.insert(getIteratorForPosition(thePosition), theCount, theChar);
+ if (m_data.empty() == true)
+ {
+ assert(thePosition == 0);
- m_size += theCount;
+ assign(theCount, theChar);
+ }
+ else
+ {
+ m_data.insert(getIteratorForPosition(thePosition), theCount,
theChar);
+
+ m_size += theCount;
+ }
invariants();
@@ -498,9 +520,20 @@
{
invariants();
- m_data.insert(thePosition, theChar);
+ if (m_data.empty() == true)
+ {
+ assert(thePosition == m_data.end() || thePosition ==
m_data.begin());
- ++m_size;
+ assign(1, theChar);
+
+ assert(length() == 1);
+ }
+ else
+ {
+ m_data.insert(thePosition, theChar);
+
+ ++m_size;
+ }
invariants();
@@ -517,9 +550,20 @@
{
invariants();
- m_data.insert(thePosition, theCount, theChar);
+ if (m_data.empty() == true)
+ {
+ assert(thePosition == m_data.end() || thePosition ==
m_data.begin());
+
+ assign(theCount, theChar);
+
+ assert(length() == theCount);
+ }
+ else
+ {
+ m_data.insert(thePosition, theCount, theChar);
- m_size += theCount;
+ m_size += theCount;
+ }
invariants();
}
@@ -534,11 +578,20 @@
{
invariants();
- m_data.insert(theInsertPosition, theFirstPosition, theLastPosition);
+ if (m_data.empty() == true)
+ {
+ assert(theInsertPosition == m_data.end() || theInsertPosition
== m_data.begin());
- m_size = m_data.size() - 1;
+ assign(theFirstPosition, theLastPosition);
+ }
+ else
+ {
+ m_data.insert(theInsertPosition, theFirstPosition,
theLastPosition);
- assert(m_size == m_data.size() - 1);
+ m_size = m_data.size() - 1;
+
+ assert(m_size == m_data.size() - 1);
+ }
invariants();
}
1.30 +18 -4 xml-xalan/c/src/XalanDOM/XalanDOMString.hpp
Index: XalanDOMString.hpp
===================================================================
RCS file: /home/cvs/xml-xalan/c/src/XalanDOM/XalanDOMString.hpp,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- XalanDOMString.hpp 20 Jan 2003 22:23:30 -0000 1.29
+++ XalanDOMString.hpp 3 Apr 2003 06:19:14 -0000 1.30
@@ -187,7 +187,7 @@
{
invariants();
- return m_data.end();
+ return m_data.empty() == true ? m_data.end() : m_data.end() - 1;
}
const_iterator
@@ -195,7 +195,7 @@
{
invariants();
- return m_data.end();
+ return m_data.empty() == true ? m_data.end() : m_data.end() - 1;
}
reverse_iterator
@@ -203,7 +203,14 @@
{
invariants();
- return m_data.rbegin();
+ reverse_iterator i = m_data.rbegin();
+
+ if (m_data.empty() == false)
+ {
+ ++i;
+ }
+
+ return i;
}
const_reverse_iterator
@@ -211,7 +218,14 @@
{
invariants();
- return m_data.rbegin();
+ const_reverse_iterator i = m_data.rbegin();
+
+ if (m_data.empty() == false)
+ {
+ ++i;
+ }
+
+ return i;
}
reverse_iterator
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]