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]

Reply via email to