You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2005/05/12 06:51:39 UTC

cvs commit: xml-xalan/c/src/xalanc/Include XalanMemMgrAutoPtr.hpp

dbertoni    2005/05/11 21:51:39

  Modified:    c/src/xalanc/Include XalanMemMgrAutoPtr.hpp
  Log:
  Fix for Jira issue XALANC-466.
  
  Revision  Changes    Path
  1.8       +350 -341  xml-xalan/c/src/xalanc/Include/XalanMemMgrAutoPtr.hpp
  
  Index: XalanMemMgrAutoPtr.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/Include/XalanMemMgrAutoPtr.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XalanMemMgrAutoPtr.hpp	10 Nov 2004 23:24:20 -0000	1.7
  +++ XalanMemMgrAutoPtr.hpp	12 May 2005 04:51:39 -0000	1.8
  @@ -37,397 +37,406 @@
   
   
   
  -// We're using our own auto_ptr-like class due to wide
  -// variations amongst the varous platforms we have to
  -// support
  -template<	class	Type, 
  -			bool	toCallDestructor = true>
  +XALAN_USING_XERCES(MemoryManager)
  +
  +// An auto_ptr-like class that supports the MemoryManager class.
  +template<
  +            class   Type, 
  +            bool    toCallDestructor = true>
   class XalanMemMgrAutoPtr
   {
   public:
   
  -	typedef XALAN_STD_QUALIFIER pair<MemoryManagerType*, Type*> AutoPtrPairType;
  +    typedef XALAN_STD_QUALIFIER pair<MemoryManager*, Type*> AutoPtrPairType;
  +
  +    class MemMgrAutoPtrData : public AutoPtrPairType
  +    {
  +    public:
  +        MemMgrAutoPtrData():
  +            AutoPtrPairType(0,0)
  +        {
  +        }
  +
  +        MemMgrAutoPtrData(  
  +                MemoryManager*  memoryManager,
  +                Type*           dataPointer): 
  +            AutoPtrPairType(memoryManager, dataPointer)
  +        {
  +            invariants();
  +        }
  +        
  +        bool
  +        isInitilized()const
  +        {
  +            return this->first != 0 && this->second != 0;
  +        }
  +
  +        void
  +        deallocate()
  +        {
  +            invariants();
  +
  +            if ( isInitilized() )
  +            {       
  +                if ( toCallDestructor ) 
  +                {
  +                    this->second->~Type();
  +                }
  +
  +                this->first->deallocate(this->second);
  +            }
  +        }
  +
  +        void 
  +        reset(
  +                MemoryManager*      memoryManager ,
  +                Type*               dataPointer)
  +        {   
  +            invariants();
  +
  +            this->first = memoryManager;
  +
  +            this->second = dataPointer;
  +
  +            invariants();
  +        }
  +
  +    private:
  +
  +        void
  +        invariants() const
  +        {
  +            assert(
  +                isInitilized() ||
  +                (this->first == 0 && this->second == 0));
  +        }
  +    };
  +
  +
  +    XalanMemMgrAutoPtr(
  +            MemoryManager&  theManager, 
  +            Type*           ptr) : 
  +        m_pointerInfo(&theManager, ptr)
  +    {
  +    }
  +
  +    XalanMemMgrAutoPtr() :
  +        m_pointerInfo()
  +    {
  +    }
   
  -	class MemMgrAutoPtrData : public AutoPtrPairType
  -	{
  -	public:
  -		MemMgrAutoPtrData():
  -			AutoPtrPairType(0,0)
  -		{
  -		}
  -
  -		MemMgrAutoPtrData(	
  -			MemoryManagerType* memoryManager,
  -			Type* dataPointer): 
  -			AutoPtrPairType(memoryManager, dataPointer)
  -		{
  -			invariants();
  -		}
  -		
  -	
  -		bool
  -		isInitilized()const
  -		{
  -			return ( (this->first != 0) && (this->second != 0) )? true : false;
  -		}
  -	
  -		void
  -		deallocate()
  -		{
  -			invariants();
  -
  -			if ( isInitilized() )
  -			{		
  -				if ( toCallDestructor ) 
  -				{
  -					this->second->~Type();
  -				}
  -
  -				this->first->deallocate(this->second);
  -			}
  -		}
  -		
  -		void 
  -		reset(	MemoryManagerType* m_memoryManager ,
  -				Type*	m_dataPointer )
  -		{	
  -			invariants();
  -
  -			this->first = m_memoryManager;
  -			
  -			this->second = m_dataPointer;
  -
  -			invariants();
  -		}	
  -	private:
  -		void
  -		invariants()const
  -		{
  -			assert( isInitilized() ||
  -					( (this->first == 0) && (this->second ==0) ) );
  -		}
  -		
  -	};
  -	
  -	
  -	XalanMemMgrAutoPtr(
  -			MemoryManagerType&  theManager, 
  -			Type* ptr  ) : 
  -		m_pointerInfo(&theManager, ptr)
  -	{
  -	}	
  -
  -	XalanMemMgrAutoPtr() :
  -		m_pointerInfo()
  -	{
  -	}
  -	
  -	XalanMemMgrAutoPtr(const XalanMemMgrAutoPtr<Type,toCallDestructor>&	theSource) :
  -		m_pointerInfo(((XalanMemMgrAutoPtr<Type>&)theSource).release())
  -	{
  -	}
  -
  -	XalanMemMgrAutoPtr<Type,toCallDestructor>&
  -	operator=(XalanMemMgrAutoPtr<Type,toCallDestructor>&	theRHS)
  -	{		
  -		if (this != &theRHS)
  -		{
  -			m_pointerInfo.deallocate();
  -
  -			m_pointerInfo = theRHS.release();
  -		}
  -
  -		return *this;
  -	}
  -
  -	~XalanMemMgrAutoPtr()
  -	{
  -		m_pointerInfo.deallocate();
  -	}
  -
  -	Type&
  -	operator*() const
  -	{
  -		return *m_pointerInfo.second;
  -	}
  -
  -	Type*
  -	operator->() const
  -	{
  -		return m_pointerInfo.second;
  -	}
  -
  -	Type*
  -	get() const
  -	{
  -		return m_pointerInfo.second;
  -	}
  +    XalanMemMgrAutoPtr(const XalanMemMgrAutoPtr<Type, toCallDestructor>&    theSource) :
  +        m_pointerInfo(((XalanMemMgrAutoPtr<Type>&)theSource).release())
  +    {
  +    }
   
  -    MemoryManagerType*
  +    XalanMemMgrAutoPtr<Type,toCallDestructor>&
  +    operator=(XalanMemMgrAutoPtr<Type,toCallDestructor>&    theRHS)
  +    {       
  +        if (this != &theRHS)
  +        {
  +            m_pointerInfo.deallocate();
  +
  +            m_pointerInfo = theRHS.release();
  +        }
  +
  +        return *this;
  +    }
  +
  +    ~XalanMemMgrAutoPtr()
  +    {
  +        m_pointerInfo.deallocate();
  +    }
  +
  +    Type&
  +    operator*() const
  +    {
  +        return *m_pointerInfo.second;
  +    }
  +
  +    Type*
  +    operator->() const
  +    {
  +        return m_pointerInfo.second;
  +    }
  +
  +    Type*
  +    get() const
  +    {
  +        return m_pointerInfo.second;
  +    }
  +
  +    MemoryManager*
       getMemoryManager()
       {
           return m_pointerInfo.first;
       }
   
  -    const MemoryManagerType*
  +    const MemoryManager*
       getMemoryManager() const
       {
           return m_pointerInfo.first;
       }
   
  -	MemMgrAutoPtrData
  -	release()
  -	{		
  -		MemMgrAutoPtrData tmp = m_pointerInfo;
  -	
  -		m_pointerInfo.reset( 0 , 0 ); 
  -		
  -		return MemMgrAutoPtrData(tmp);
  -	}
  -
  -	Type*
  -	releasePtr()
  -	{		
  -		MemMgrAutoPtrData tmp = release();
  -	
  -		return tmp.second;
  -	}	
  -	
  -	void
  -	reset(	MemoryManagerType*  theManager = 0,
  -			Type*		thePointer = 0 )
  -	{		
  -		m_pointerInfo.deallocate();
  +    MemMgrAutoPtrData
  +    release()
  +    {       
  +        MemMgrAutoPtrData tmp = m_pointerInfo;
  +    
  +        m_pointerInfo.reset(0, 0); 
  +        
  +        return MemMgrAutoPtrData(tmp);
  +    }
   
  -		m_pointerInfo.reset ( theManager , thePointer );
  -	}
  +    Type*
  +    releasePtr()
  +    {       
  +        MemMgrAutoPtrData tmp = release();
  +    
  +        return tmp.second;
  +    }   
  +    
  +    void
  +    reset(
  +            MemoryManager*  theManager = 0,
  +            Type*           thePointer = 0)
  +    {       
  +        m_pointerInfo.deallocate();
   
  -private:
  +        m_pointerInfo.reset(theManager, thePointer);
  +    }
   
  +private:
   
  -// data member
  -	MemMgrAutoPtrData m_pointerInfo;
  +    // data member
  +    MemMgrAutoPtrData   m_pointerInfo;
   };
   
   
   
   
  -template<	class Type>
  +template<class Type>
   class XalanMemMgrAutoPtrArray
   {
   public:
   
  -	typedef unsigned int size_type;
  +    typedef unsigned int size_type;
   
  -	class MemMgrAutoPtrArrayData 
  -	{
  -	public:
  -		MemMgrAutoPtrArrayData():
  -			m_memoryManager(0),
  -			m_dataArray(0),
  -			m_size(0)
  -		{
  -		}
  -
  -		MemMgrAutoPtrArrayData(	
  -				MemoryManagerType*	memoryManager,
  -				Type*				dataPointer,
  -				size_type				size): 
  -			m_memoryManager(memoryManager),
  -			m_dataArray(dataPointer),
  -			m_size(size)
  -		{
  -			invariants();
  -		}
  -		
  -	
  -		bool
  -		isInitilized()const
  -		{
  -			return ( (m_memoryManager != 0) && (m_dataArray != 0)  && (m_size != 0) )? true : false;
  -		}
  -	
  -		void
  -		deallocate()
  -		{
  -			invariants();
  -
  -			if ( isInitilized() )
  -			{			
  -				assert ( m_dataArray != 0 );
  -
  -				for ( size_type i = 0; i < m_size ; ++i )
  -				{
  -					m_dataArray[i].~Type();
  -				}
  -				m_memoryManager->deallocate ( m_dataArray);
  -			}
  -		}
  -		
  -		void 
  -		reset(	MemoryManagerType*	memoryManager ,
  -				Type*				dataPointer,
  -				size_type				size)
  -		{	
  -			invariants();
  -
  -			m_memoryManager = memoryManager;
  -			
  -			m_dataArray =	dataPointer;
  -
  -			m_size = size;
  -
  -			invariants();
  -		}	
  -
  -
  -		MemoryManagerType*		m_memoryManager;
  -		Type*					m_dataArray;
  -		size_type					m_size;
  -
  -	private:
  -		void
  -		invariants()const
  -		{
  -			assert( isInitilized() ||
  -					( (m_memoryManager == 0) && (m_dataArray ==0) && (m_size == 0)) );
  -		}		
  -	};
  -	
  -	XalanMemMgrAutoPtrArray(
  -			MemoryManagerType&  theManager, 
  -			Type*				ptr,
  -			size_type			size) : 
  -		m_pointerInfo(&theManager, ptr, size)
  -	{
  -	}	
  -
  -	XalanMemMgrAutoPtrArray() :
  -		m_pointerInfo()
  -	{
  -	}
  -	
  -	XalanMemMgrAutoPtrArray(const XalanMemMgrAutoPtrArray<Type>&	theSource) :
  -		m_pointerInfo(((XalanMemMgrAutoPtr<Type>&)theSource).release())
  -	{
  -	}
  -
  -
  -	XalanMemMgrAutoPtrArray<Type>&
  -	operator=(XalanMemMgrAutoPtrArray<Type>&	theRHS)
  -	{		
  -		if (this != &theRHS)
  -		{
  -			m_pointerInfo.deallocate();
  -
  -			m_pointerInfo = theRHS.release();
  -		}
  -
  -		return *this;
  -	}
  -
  -	~XalanMemMgrAutoPtrArray()
  -	{
  -		m_pointerInfo.deallocate();
  -	}
  -
  -	Type&
  -	operator*() const
  -	{
  -		return *m_pointerInfo.m_dataArray;
  -	}
  -
  -	Type*
  -	operator->() const
  -	{
  -		return m_pointerInfo.m_dataArray;
  -	}
  -
  -	Type*
  -	get() const
  -	{
  -		return m_pointerInfo.m_dataArray;
  -	}
  -
  -	size_type
  -	getSize()const
  -	{
  -		return m_pointerInfo.m_size;
  -	}
  +    class MemMgrAutoPtrArrayData 
  +    {
  +    public:
  +
  +        MemMgrAutoPtrArrayData():
  +            m_memoryManager(0),
  +            m_dataArray(0),
  +            m_size(0)
  +        {
  +        }
  +
  +        MemMgrAutoPtrArrayData( 
  +                MemoryManager*  memoryManager,
  +                Type*           dataPointer,
  +                size_type       size): 
  +            m_memoryManager(memoryManager),
  +            m_dataArray(dataPointer),
  +            m_size(size)
  +        {
  +            invariants();
  +        }
  +    
  +        bool
  +        isInitilized()const
  +        {
  +            return m_memoryManager != 0 && m_dataArray != 0  && m_size != 0;
  +        }
  +
  +        void
  +        deallocate()
  +        {
  +            invariants();
  +
  +            if ( isInitilized() )
  +            {           
  +                assert ( m_dataArray != 0 );
  +
  +                for ( size_type i = 0; i < m_size ; ++i )
  +                {
  +                    m_dataArray[i].~Type();
  +                }
  +
  +                m_memoryManager->deallocate(m_dataArray);
  +            }
  +        }
  +
  +        void 
  +        reset(  
  +                MemoryManager*  theMemoryManager,
  +                Type*           thePointer,
  +                size_type       size)
  +        {   
  +            invariants();
  +
  +            m_memoryManager = theMemoryManager;
  +
  +            m_dataArray =   thePointer;
  +
  +            m_size = size;
  +
  +            invariants();
  +        }   
  +
  +        MemoryManager*  m_memoryManager;
  +
  +        Type*           m_dataArray;
  +
  +        size_type       m_size;
  +
  +    private:
  +
  +        void
  +        invariants()const
  +        {
  +            assert(
  +                isInitilized() ||
  +                (m_memoryManager == 0 && m_dataArray == 0 && m_size == 0));
  +        }
  +    };
  +
  +    XalanMemMgrAutoPtrArray(
  +            MemoryManager&  theManager, 
  +            Type*           ptr,
  +            size_type       size) : 
  +        m_pointerInfo(
  +            &theManager,
  +            ptr,
  +            size)
  +    {
  +    }   
   
  -    MemoryManagerType*
  +    XalanMemMgrAutoPtrArray() :
  +        m_pointerInfo()
  +    {
  +    }
  +
  +    XalanMemMgrAutoPtrArray(const XalanMemMgrAutoPtrArray<Type>&    theSource) :
  +        m_pointerInfo(((XalanMemMgrAutoPtr<Type>&)theSource).release())
  +    {
  +    }
  +
  +    XalanMemMgrAutoPtrArray<Type>&
  +    operator=(XalanMemMgrAutoPtrArray<Type>&    theRHS)
  +    {       
  +        if (this != &theRHS)
  +        {
  +            m_pointerInfo.deallocate();
  +
  +            m_pointerInfo = theRHS.release();
  +        }
  +
  +        return *this;
  +    }
  +
  +    ~XalanMemMgrAutoPtrArray()
  +    {
  +        m_pointerInfo.deallocate();
  +    }
  +
  +    Type&
  +    operator*() const
  +    {
  +        return *m_pointerInfo.m_dataArray;
  +    }
  +
  +    Type*
  +    operator->() const
  +    {
  +        return m_pointerInfo.m_dataArray;
  +    }
  +
  +    Type*
  +    get() const
  +    {
  +        return m_pointerInfo.m_dataArray;
  +    }
  +
  +    size_type
  +    getSize()const
  +    {
  +        return m_pointerInfo.m_size;
  +    }
  +
  +    MemoryManager*
       getMemoryManager()
       {
           return m_pointerInfo.m_memoryManager;
       }
   
  -    const MemoryManagerType*
  +    const MemoryManager*
       getMemoryManager() const
       {
           return m_pointerInfo.m_memoryManager;
       }
   
  -	XalanMemMgrAutoPtrArray<Type>&
  -	operator++ ()
  -	{
  -		++m_pointerInfo.m_size;
  +    XalanMemMgrAutoPtrArray<Type>&
  +    operator++ ()
  +    {
  +        ++m_pointerInfo.m_size;
   
  -		return *this;
  -	}
  +        return *this;
  +    }
   
       /* Since this class is not reference-counted, I don't see how this
          could work, since the destruction of the temporary will free
          the controlled pointer.
  -	XalanMemMgrAutoPtrArray<Type>
  -	operator++ (int)
  -	{
  -		XalanMemMgrAutoPtrArray<Type> temp = *this;
  -		++*this;
  +    XalanMemMgrAutoPtrArray<Type>
  +    operator++ (int)
  +    {
  +        XalanMemMgrAutoPtrArray<Type> temp = *this;
  +        ++*this;
   
  -		return temp;
  -	}
  +        return temp;
  +    }
       */
   
  -	MemMgrAutoPtrArrayData
  -	release()
  -	{		
  -		MemMgrAutoPtrArrayData tmp = m_pointerInfo;
  -	
  -		m_pointerInfo.reset( 0 , 0 , 0); 
  -		
  -		return MemMgrAutoPtrArrayData(tmp);
  -	}
  -
  -	Type*
  -	releasePtr()
  -	{		
  -		MemMgrAutoPtrArrayData tmp = release();
  -	
  -		
  -		return tmp.dataPointer;
  -	}
  -	
  -	void
  -	reset(	MemoryManagerType*  theManager = 0,
  -			Type*				thePointer = 0 ,
  -			size_type				size = 0)
  -	{		
  -		m_pointerInfo.deallocate();
  -
  -		m_pointerInfo.reset ( theManager , thePointer , size );
  -	}
  -	
  -	Type&
  -	operator[](size_type	index) const
  -	{
  -		return m_pointerInfo.m_dataArray[index];
  -	}
  -	
  -private:
  +    MemMgrAutoPtrArrayData
  +    release()
  +    {       
  +        MemMgrAutoPtrArrayData tmp = m_pointerInfo;
  +    
  +        m_pointerInfo.reset( 0 , 0 , 0); 
  +        
  +        return MemMgrAutoPtrArrayData(tmp);
  +    }
   
  +    Type*
  +    releasePtr()
  +    {       
  +        MemMgrAutoPtrArrayData  tmp = release();
  +
  +        return tmp.m_dataPointer;
  +    }
  +
  +    void
  +    reset( 
  +            MemoryManager*  theManager = 0,
  +            Type*           thePointer = 0 ,
  +            size_type       size = 0)
  +    {       
  +        m_pointerInfo.deallocate();
  +
  +        m_pointerInfo.reset(theManager, thePointer, size);
  +    }
  +    
  +    Type&
  +    operator[](size_type    index) const
  +    {
  +        return m_pointerInfo.m_dataArray[index];
  +    }
  +
  +private:
   
  -	// data member
  -	MemMgrAutoPtrArrayData m_pointerInfo;
  +    // data member
  +    MemMgrAutoPtrArrayData m_pointerInfo;
   };
   
   
  @@ -437,4 +446,4 @@
   
   
   
  -#endif	// if !defined(XALANMEMMGRAUTOPTR_HEADER_GUARD_1357924680)
  +#endif  // if !defined(XALANMEMMGRAUTOPTR_HEADER_GUARD_1357924680)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org