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