You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by jb...@locus.apache.org on 2000/10/09 20:32:34 UTC

cvs commit: xml-xerces/c/src/util Janitor.c Janitor.hpp

jberry      00/10/09 11:32:33

  Modified:    c/src/util Janitor.c Janitor.hpp
  Log:
  Add some auto_ptr functionality to allow modification of monitored
  pointer value. This eases use of Janitor in some situations.
  
  Revision  Changes    Path
  1.4       +93 -8     xml-xerces/c/src/util/Janitor.c
  
  Index: Janitor.c
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/Janitor.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Janitor.c	2000/03/02 19:54:40	1.3
  +++ Janitor.c	2000/10/09 18:32:31	1.4
  @@ -56,6 +56,10 @@
   
   /**
    * $Log: Janitor.c,v $
  + * Revision 1.4  2000/10/09 18:32:31  jberry
  + * Add some auto_ptr functionality to allow modification of monitored
  + * pointer value. This eases use of Janitor in some situations.
  + *
    * Revision 1.3  2000/03/02 19:54:40  roddey
    * This checkin includes many changes done while waiting for the
    * 1.1.0 code to be finished. I can't list them all here, but a list is
  @@ -86,46 +90,126 @@
   //  Janitor: Constructors and Destructor
   // ---------------------------------------------------------------------------
   template <class T> Janitor<T>::Janitor(T* const toDelete) :
  -
       fData(toDelete)
   {
   }
   
  +
   template <class T> Janitor<T>::~Janitor()
   {
  -    delete fData;
  +    reset();
   }
   
   
   // ---------------------------------------------------------------------------
   //  Janitor: Public, non-virtual methods
   // ---------------------------------------------------------------------------
  -template <class T> void Janitor<T>::orphan()
  +template <class T> void
  +Janitor<T>::orphan()
  +{
  +   release();
  +}
  +
  +
  +template <class T> T&
  +Janitor<T>::operator*() const
   {
  -    fData = 0;
  +	return *fData;
   }
   
   
  +template <class T> T*
  +Janitor<T>::operator->() const
  +{
  +	return fData;
  +}
  +
   
  +template <class T> T*
  +Janitor<T>::get() const
  +{
  +	return fData;
  +}
  +
  +
  +template <class T> T*
  +Janitor<T>::release()
  +{
  +	T* p = fData;
  +	fData = 0;
  +	return p;
  +}
  +
  +
  +template <class T> void Janitor<T>::reset(T* p)
  +{
  +	delete fData;
  +	fData = p;
  +}
  +
  +
   // -----------------------------------------------------------------------
   //  ArrayJanitor: Constructors and Destructor
   // -----------------------------------------------------------------------
   template <class T> ArrayJanitor<T>::ArrayJanitor(T* const toDelete) :
  -
       fData(toDelete)
   {
   }
   
  +
   template <class T> ArrayJanitor<T>::~ArrayJanitor()
   {
  -    delete [] fData;
  +	reset();
   }
   
   
   // -----------------------------------------------------------------------
   //  ArrayJanitor: Public, non-virtual methods
   // -----------------------------------------------------------------------
  -template <class T> void ArrayJanitor<T>::orphan()
  +template <class T> void
  +ArrayJanitor<T>::orphan()
  +{
  +   release();
  +}
  +
  +
  +//	Look, Ma! No hands! Don't call this with null data!
  +template <class T> T&
  +ArrayJanitor<T>::operator[](int index) const
  +{
  +	//	TODO: Add appropriate exception
  +	return fData[index];
  +}
  +
  +
  +template <class T> T*
  +ArrayJanitor<T>::operator->() const
   {
  -    fData = 0;
  +	return fData;
   }
  +
  +
  +template <class T> T*
  +ArrayJanitor<T>::get() const
  +{
  +	return fData;
  +}
  +
  +
  +template <class T> T*
  +ArrayJanitor<T>::release()
  +{
  +	T* p = fData;
  +	fData = 0;
  +	return p;
  +}
  +
  +
  +template <class T> void
  +ArrayJanitor<T>::reset(T* p)
  +{
  +	delete [] fData;
  +	fData = p;
  +}
  +
  +
  
  
  
  1.5       +20 -6     xml-xerces/c/src/util/Janitor.hpp
  
  Index: Janitor.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/util/Janitor.hpp,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Janitor.hpp	2000/03/02 19:54:40	1.4
  +++ Janitor.hpp	2000/10/09 18:32:31	1.5
  @@ -56,6 +56,10 @@
   
   /*
    * $Log: Janitor.hpp,v $
  + * Revision 1.5  2000/10/09 18:32:31  jberry
  + * Add some auto_ptr functionality to allow modification of monitored
  + * pointer value. This eases use of Janitor in some situations.
  + *
    * Revision 1.4  2000/03/02 19:54:40  roddey
    * This checkin includes many changes done while waiting for the
    * 1.1.0 code to be finished. I can't list them all here, but a list is
  @@ -91,21 +95,25 @@
       Janitor(T* const toDelete);
       ~Janitor();
   
  -
       // -----------------------------------------------------------------------
       //  Public, non-virtual methods
       // -----------------------------------------------------------------------
       void orphan();
   
  +	//	small amount of auto_ptr compatibility
  +	T&	operator*() const;
  +	T*	operator->() const;
  +	T*	get() const;
  +	T*	release();
  +	void reset(T* p = 0);
   
   private :
       // -----------------------------------------------------------------------
       //  Unimplemented constructors and operators
       // -----------------------------------------------------------------------
  -    Janitor();
  +	Janitor();
       Janitor(const Janitor<T>&);
   
  -
       // -----------------------------------------------------------------------
       //  Private data members
       //
  @@ -133,14 +141,19 @@
       // -----------------------------------------------------------------------
       void orphan();
   
  +	//	small amount of auto_ptr compatibility
  +	T&	operator[](int index) const;
  +	T*	operator->() const;
  +	T*	get() const;
  +	T*	release();
  +	void reset(T* p = 0);
   
   private :
       // -----------------------------------------------------------------------
       //  Unimplemented constructors and operators
       // -----------------------------------------------------------------------
  -    ArrayJanitor();
  -    ArrayJanitor(const ArrayJanitor<T>&);
  -
  +	ArrayJanitor();
  +    ArrayJanitor(const ArrayJanitor<T>& copy);
   
       // -----------------------------------------------------------------------
       //  Private data members