dbertoni    00/12/20 20:25:34

  Modified:    c/src/Include XalanAutoPtr.hpp
  Log:
  Added some special-case checks for null for better performance under Win32.
  
  Revision  Changes    Path
  1.2       +37 -7     xml-xalan/c/src/Include/XalanAutoPtr.hpp
  
  Index: XalanAutoPtr.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/Include/XalanAutoPtr.hpp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XalanAutoPtr.hpp  2000/11/02 01:42:09     1.1
  +++ XalanAutoPtr.hpp  2000/12/21 04:25:33     1.2
  @@ -91,7 +91,14 @@
        {
                if (this != &theRHS)
                {
  -                     delete m_pointer;
  +                     // This test ought not to be necessary, but
  +                     // MSVC 6.0 calls delete, which checks for 0.
  +                     // The problem with that is the locking is
  +                     // extremely expensive.
  +                     if (m_pointer != 0)
  +                     {
  +                             delete m_pointer;
  +                     }
   
                        m_pointer = theRHS.release();
                }
  @@ -101,7 +108,11 @@
   
        ~XalanAutoPtr()
        {
  -             delete m_pointer;
  +             // See note in operator=() about this...
  +             if (m_pointer != 0)
  +             {
  +                     delete m_pointer;
  +             }
        }
   
        Type&
  @@ -135,7 +146,11 @@
        void
        reset(Type*             thePointer = 0)
        {
  -             delete m_pointer;
  +             // See note in operator=() about this...
  +             if (m_pointer != 0)
  +             {
  +                     delete m_pointer;
  +             }
   
                m_pointer = thePointer;
        }
  @@ -168,7 +183,14 @@
        {
                if (this != &theRHS)
                {
  -                     delete [] m_pointer;
  +                     // This test ought not to be necessary, but
  +                     // MSVC 6.0 calls delete, which checks for 0.
  +                     // The problem with that is the locking is
  +                     // extremely expensive.
  +                     if (m_pointer != 0)
  +                     {
  +                             delete [] m_pointer;
  +                     }
   
                        m_pointer = theRHS.release();
                }
  @@ -178,7 +200,11 @@
   
        ~XalanArrayAutoPtr()
        {
  -             delete [] m_pointer;
  +             // See note in operator=() about this...
  +             if (m_pointer != 0)
  +             {
  +                     delete [] m_pointer;
  +             }
        }
   
        Type&
  @@ -188,7 +214,7 @@
        }
   
        Type&
  -     operator[] (size_t      index) const
  +     operator[](size_t       index) const
        {
                return m_pointer[index];
        }
  @@ -212,7 +238,11 @@
        void
        reset(Type*             thePointer = 0)
        {
  -             delete [] m_pointer;
  +             // See note in operator=() about this...
  +             if (m_pointer != 0)
  +             {
  +                     delete [] m_pointer;
  +             }
   
                m_pointer = thePointer;
        }
  
  
  

Reply via email to