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]