dbertoni    01/03/29 14:13:06

  Modified:    c/src/XalanDOM XalanDOMString.cpp XalanDOMString.hpp
  Log:
  Enabled caching of size and fixed a few bugs related to caching.
  
  Revision  Changes    Path
  1.9       +126 -3    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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XalanDOMString.cpp        2001/02/08 21:41:01     1.8
  +++ XalanDOMString.cpp        2001/03/29 22:13:05     1.9
  @@ -190,6 +190,109 @@
   
   
   
  +void
  +XalanDOMString::resize(
  +                     size_type               theCount,
  +                     XalanDOMChar    theChar)
  +{
  +     invariants();
  +
  +     const size_type         theOldSize = size();
  +
  +     if (theCount != theOldSize)
  +     {
  +             if (theOldSize == 0)
  +             {
  +                     // If the string is of 0 length, resize but add an
  +                     // extra byte for the terminating byte.
  +                     m_data.resize(theCount + 1, theChar);
  +             }
  +             else
  +             {
  +                     // If the string is not of 0 length, resize but
  +                     // put a copy of theChar where the terminating
  +                     // byte used to be.
  +                     m_data.resize(theCount, theChar);
  +
  +                     m_data[theOldSize] = theChar;
  +             }
  +
  +#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  +             m_size = theCount;
  +#endif
  +
  +             // Terminate...
  +             m_data.back() = 0;
  +     }
  +
  +     invariants();
  +}
  +
  +
  +
  +void
  +XalanDOMString::erase(
  +                     size_type       theStartPosition,
  +                     size_type       theCount)
  +{
  +     invariants();
  +
  +     const size_type         theActualCount =
  +                     theCount == size_type(npos) ? length() : theCount;
  +
  +     if (theStartPosition == 0 && theCount >= size())
  +     {
  +             m_data.erase(m_data.begin(), m_data.end());
  +
  +#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  +             m_size = 0;
  +#endif
  +     }
  +     else
  +     {
  +             const iterator          i = 
getIteratorForPosition(theStartPosition);
  +
  +             m_data.erase(i, i + (theActualCount));
  +
  +#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  +             const size_type         theNewSize = m_data.size();
  +
  +             if (theNewSize < 2)
  +             {
  +                     m_size = 0;
  +             }
  +             else
  +             {
  +                     m_size = theNewSize - 1;
  +             }
  +#endif
  +     }
  +
  +     invariants();
  +}
  +
  +
  +
  +XalanDOMString&
  +XalanDOMString::assign(
  +             const_iterator  theFirstPosition,
  +             const_iterator  theLastPosition)
  +{
  +     invariants();
  +
  +     erase();
  +
  +     invariants();
  +
  +     insert(begin(), theFirstPosition, theLastPosition);
  +
  +     invariants();
  +
  +     return *this;
  +}
  +
  +
  +
   XalanDOMString&
   XalanDOMString::append(
                        const XalanDOMChar*             theString,
  @@ -452,7 +555,7 @@
   
   
   
  -static inline unsigned int
  +static inline XalanDOMString::size_type
   length(const XalanDOMChar*   theString)
   {
        assert(theString != 0);
  @@ -472,9 +575,9 @@
   bool
   XalanDOMString::equals(
                        const XalanDOMChar*             theLHS,
  -                     unsigned int                    theLHSLength,
  +                     size_type                               theLHSLength,
                        const XalanDOMChar*             theRHS,
  -                     unsigned int                    theRHSLength)
  +                     size_type                               theRHSLength)
   {
        if (theLHSLength != theRHSLength)
        {
  @@ -503,6 +606,26 @@
                }
   
                return false;
  +     }
  +}
  +
  +
  +
  +bool
  +XalanDOMString::equals(
  +                     const XalanDOMString&   theLHS,
  +                     const XalanDOMString&   theRHS)
  +{
  +     const XalanDOMString::size_type         theLHSLength = theLHS.size();
  +     const XalanDOMString::size_type         theRHSLength = theRHS.size();
  +
  +     if (theLHSLength != theRHSLength)
  +     {
  +             return false;
  +     }
  +     else
  +     {
  +             return equals(theLHS.c_str(), theLHSLength, theRHS.c_str(), 
theRHSLength);
        }
   }
   
  
  
  
  1.12      +12 -93    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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XalanDOMString.hpp        2001/02/08 21:41:03     1.11
  +++ XalanDOMString.hpp        2001/03/29 22:13:06     1.12
  @@ -72,7 +72,7 @@
   
   
   
  -//#define XALAN_DOMSTRING_CACHE_SIZE
  +#define XALAN_DOMSTRING_CACHE_SIZE
   
   
   
  @@ -233,37 +233,7 @@
        void
        resize(
                        size_type               theCount,
  -                     XalanDOMChar    theChar)
  -     {
  -             invariants();
  -
  -             const size_type         theOldSize = size();
  -
  -             if (theOldSize == 0)
  -             {
  -                     // If the string is of 0 length, resize but add an
  -                     // extra byte for the terminating byte.
  -                     m_data.resize(theCount + 1, theChar);
  -             }
  -             else
  -             {
  -                     // If the string is not of 0 length, resize but
  -                     // put a copy of theChar where the terminating
  -                     // byte used to be.
  -                     m_data.resize(theCount, theChar);
  -
  -                     m_data[theOldSize] = theChar;
  -             }
  -
  -#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  -             m_size += theCount;
  -#endif
  -
  -             // Terminate...
  -             m_data.back() = 0;
  -
  -             invariants();
  -     }
  +                     XalanDOMChar    theChar);
   
        void
        resize(size_type        theCount)
  @@ -306,41 +276,18 @@
        void
        erase(
                        size_type       theStartPosition = 0,
  -                     size_type       theCount = size_type(npos))
  -     {
  -             invariants();
  -
  -             const size_type         theActualCount =
  -                     theCount == size_type(npos) ? length() : theCount;
  -
  -             if (theStartPosition == 0 && theCount == size())
  -             {
  -                     m_data.erase(m_data.begin(), m_data.end());
  -
  -#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  -                     m_size = 0;
  -#endif
  -             }
  -             else
  -             {
  -                     const iterator          i = 
getIteratorForPosition(theStartPosition);
  -
  -                     m_data.erase(i, i + (theActualCount));
  -
  -#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  -                     m_size -= theActualCount;
  -#endif
  -             }
  -
  -             invariants();
  -     }
  +                     size_type       theCount = size_type(npos));
   
        bool
        empty() const
        {
                invariants();
   
  +#if defined(XALAN_DOMSTRING_CACHE_SIZE)
  +             return m_size == 0 ? true : false;
  +#else
                return m_data.size() < 2 ? true : false;
  +#endif
        }
   
        const_reference
  @@ -451,8 +398,6 @@
                invariants();
   
                return append(theSource);
  -
  -             invariants();
        }
   
        XalanDOMString&
  @@ -513,20 +458,7 @@
        XalanDOMString&
        assign(
                const_iterator  theFirstPosition,
  -             const_iterator  theLastPosition)
  -     {
  -             invariants();
  -
  -             erase();
  -
  -             invariants();
  -
  -             insert(begin(), theFirstPosition, theLastPosition);
  -
  -             invariants();
  -
  -             return *this;
  -     }
  +             const_iterator  theLastPosition);
   
        XalanDOMString&
        append(const XalanDOMString&    theSource)
  @@ -719,9 +651,9 @@
        static bool
        equals(
                        const XalanDOMChar*             theLHS,
  -                     unsigned int                    theLHSLength,
  +                     size_type                               theLHSLength,
                        const XalanDOMChar*             theRHS,
  -                     unsigned int                    theRHSLength);
  +                     size_type                               theRHSLength);
   
        static bool
        equals(
  @@ -734,20 +666,7 @@
        static bool
        equals(
                        const XalanDOMString&   theLHS,
  -                     const XalanDOMString&   theRHS)
  -     {
  -             const unsigned int      theLHSLength = theLHS.size();
  -             const unsigned int      theRHSLength = theRHS.size();
  -
  -             if (theLHSLength != theRHSLength)
  -             {
  -                     return false;
  -             }
  -             else
  -             {
  -                     return equals(theLHS.c_str(), theLHSLength, 
theRHS.c_str(), theRHSLength);
  -             }
  -     }
  +                     const XalanDOMString&   theRHS);
   
        static bool
        equals(
  @@ -788,7 +707,7 @@
   #if !defined(NDEBUG)
   
   #if defined(XALAN_DOMSTRING_CACHE_SIZE)
  -             assert(m_data.size() == 0 || m_size == m_data.size() - 1);
  +             assert((m_data.size() == 0 && m_size == 0) || m_size == 
m_data.size() - 1);
   #endif
   
                assert(m_data.size() == 0 || m_data.back() == 0);
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to