Index: /trunk/psLib/src/collections/psArray.c
===================================================================
--- /trunk/psLib/src/collections/psArray.c	(revision 494)
+++ /trunk/psLib/src/collections/psArray.c	(revision 495)
@@ -8,6 +8,6 @@
  *  @author Ross Harman, MHPCC
  *   
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-21 18:53:10 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-04-21 21:05:39 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -48,5 +48,28 @@
 /*****************************************************************************/
 
-// None
+static psVoidPtrArray *p_psVoidPtrArrayRealloc(psVoidPtrArray *restrict psArr, int nalloc)
+{
+    if(psArr == NULL) {
+        return psVoidPtrArrayAlloc(nalloc);
+    }
+    if(nalloc <= psArr->nalloc) {
+        if (psArr->n < nalloc) {
+            psArr->n = nalloc;
+        }
+    } else {
+        psArr->arr = p_psRealloc(psArr->arr, nalloc*sizeof(void*), __FILE__, __LINE__);
+        psArr->nalloc = nalloc;
+    }
+    return psArr;
+}
+
+static void p_psVoidPtrArrayFree(psVoidPtrArray *restrict psArr)
+{
+    if (psArr == NULL) {
+        return;
+    }
+    p_psFree(psArr->arr, __FILE__, __LINE__);
+    p_psFree(psArr, __FILE__, __LINE__);
+}
 
 /*****************************************************************************/
@@ -239,26 +262,39 @@
 }
 
-psVoidPtrArray *psVoidPtrArrayRealloc(psVoidPtrArray *psArr, int nalloc)
-{
-    if(psArr == NULL) {
-        return psVoidPtrArrayAlloc(nalloc);
-    }
-    if(nalloc <= psArr->nalloc) {
-        if (psArr->n < nalloc) {
-            psArr->n = nalloc;
-        }
-    } else {
-        psArr->arr = p_psRealloc(psArr->arr, nalloc*sizeof(void*), __FILE__, __LINE__);
-        psArr->nalloc = nalloc;
-    }
-    return psArr;
+psVoidPtrArray *psVoidPtrArrayRealloc(psVoidPtrArray *restrict psArr, int nalloc, void (*elemFree)(void *))
+{
+    int i = 0;
+
+    if(psArr == NULL) {
+        return psArr;
+    }
+
+    for (i = nalloc; i < psArr->n; i++) {
+        if(elemFree == NULL) {
+            psMemDecrRefCounter(psArr->arr[i]);
+        } else {
+            elemFree(psMemDecrRefCounter(psArr->arr[i]));
+        }
+    }
+
+    return p_psVoidPtrArrayRealloc(psArr, nalloc);
 }
 
 void psVoidPtrArrayFree(psVoidPtrArray *restrict psArr, void (*elemFree)(void *))
 {
-    if (psArr == NULL) {
-        return;
-    }
-    p_psFree(psArr->arr, __FILE__, __LINE__);
-    p_psFree(psArr, __FILE__, __LINE__);
-}
+    int i = 0;
+
+    if(psArr == NULL) {
+        return;
+    }
+
+    for(i = 0; i < psArr->nalloc; i++) {
+        if(elemFree == NULL) {
+            psMemDecrRefCounter(psArr->arr[i]);
+        } else {
+            elemFree(psMemDecrRefCounter(psArr->arr[i]));
+        }
+    }
+    p_psVoidPtrArrayFree(psArr);
+}
+
Index: /trunk/psLib/src/collections/psArray.h
===================================================================
--- /trunk/psLib/src/collections/psArray.h	(revision 494)
+++ /trunk/psLib/src/collections/psArray.h	(revision 495)
@@ -8,6 +8,6 @@
  *  @author Ross Harman, MHPCC
  *   
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-21 18:53:10 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-04-21 21:05:39 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -198,5 +198,5 @@
  */
 psFloatArray *psFloatArrayRealloc(
-    psFloatArray *psArr,  ///< Array to reallocate.
+    psFloatArray *psArr,    ///< Array to reallocate.
     int nalloc              ///< Total number of elements to make available.
 );
@@ -229,5 +229,5 @@
  */
 psDoubleArray *psDoubleArrayRealloc(
-    psDoubleArray *psArr, ///< Array to reallocate.
+    psDoubleArray *psArr,   ///< Array to reallocate.
     int nalloc              ///< Total number of elements to make available.
 );
@@ -290,6 +290,7 @@
  */
 psVoidPtrArray *psVoidPtrArrayRealloc(
-    psVoidPtrArray *psArr,  ///< Array to reallocate.
-    int nalloc              ///< Number of elements.
+    psVoidPtrArray *restrict psArr, ///< Array to reallocate.
+    int nalloc,                     ///< Number of elements.
+    void (*elemFree)(void *)        ///< Callback function responsible for removing array data.
 );
 
Index: /trunk/psLib/src/types/psArray.c
===================================================================
--- /trunk/psLib/src/types/psArray.c	(revision 494)
+++ /trunk/psLib/src/types/psArray.c	(revision 495)
@@ -8,6 +8,6 @@
  *  @author Ross Harman, MHPCC
  *   
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-21 18:53:10 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-04-21 21:05:39 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -48,5 +48,28 @@
 /*****************************************************************************/
 
-// None
+static psVoidPtrArray *p_psVoidPtrArrayRealloc(psVoidPtrArray *restrict psArr, int nalloc)
+{
+    if(psArr == NULL) {
+        return psVoidPtrArrayAlloc(nalloc);
+    }
+    if(nalloc <= psArr->nalloc) {
+        if (psArr->n < nalloc) {
+            psArr->n = nalloc;
+        }
+    } else {
+        psArr->arr = p_psRealloc(psArr->arr, nalloc*sizeof(void*), __FILE__, __LINE__);
+        psArr->nalloc = nalloc;
+    }
+    return psArr;
+}
+
+static void p_psVoidPtrArrayFree(psVoidPtrArray *restrict psArr)
+{
+    if (psArr == NULL) {
+        return;
+    }
+    p_psFree(psArr->arr, __FILE__, __LINE__);
+    p_psFree(psArr, __FILE__, __LINE__);
+}
 
 /*****************************************************************************/
@@ -239,26 +262,39 @@
 }
 
-psVoidPtrArray *psVoidPtrArrayRealloc(psVoidPtrArray *psArr, int nalloc)
-{
-    if(psArr == NULL) {
-        return psVoidPtrArrayAlloc(nalloc);
-    }
-    if(nalloc <= psArr->nalloc) {
-        if (psArr->n < nalloc) {
-            psArr->n = nalloc;
-        }
-    } else {
-        psArr->arr = p_psRealloc(psArr->arr, nalloc*sizeof(void*), __FILE__, __LINE__);
-        psArr->nalloc = nalloc;
-    }
-    return psArr;
+psVoidPtrArray *psVoidPtrArrayRealloc(psVoidPtrArray *restrict psArr, int nalloc, void (*elemFree)(void *))
+{
+    int i = 0;
+
+    if(psArr == NULL) {
+        return psArr;
+    }
+
+    for (i = nalloc; i < psArr->n; i++) {
+        if(elemFree == NULL) {
+            psMemDecrRefCounter(psArr->arr[i]);
+        } else {
+            elemFree(psMemDecrRefCounter(psArr->arr[i]));
+        }
+    }
+
+    return p_psVoidPtrArrayRealloc(psArr, nalloc);
 }
 
 void psVoidPtrArrayFree(psVoidPtrArray *restrict psArr, void (*elemFree)(void *))
 {
-    if (psArr == NULL) {
-        return;
-    }
-    p_psFree(psArr->arr, __FILE__, __LINE__);
-    p_psFree(psArr, __FILE__, __LINE__);
-}
+    int i = 0;
+
+    if(psArr == NULL) {
+        return;
+    }
+
+    for(i = 0; i < psArr->nalloc; i++) {
+        if(elemFree == NULL) {
+            psMemDecrRefCounter(psArr->arr[i]);
+        } else {
+            elemFree(psMemDecrRefCounter(psArr->arr[i]));
+        }
+    }
+    p_psVoidPtrArrayFree(psArr);
+}
+
Index: /trunk/psLib/src/types/psArray.h
===================================================================
--- /trunk/psLib/src/types/psArray.h	(revision 494)
+++ /trunk/psLib/src/types/psArray.h	(revision 495)
@@ -8,6 +8,6 @@
  *  @author Ross Harman, MHPCC
  *   
- *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2004-04-21 18:53:10 $
+ *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2004-04-21 21:05:39 $
  *
  *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
@@ -198,5 +198,5 @@
  */
 psFloatArray *psFloatArrayRealloc(
-    psFloatArray *psArr,  ///< Array to reallocate.
+    psFloatArray *psArr,    ///< Array to reallocate.
     int nalloc              ///< Total number of elements to make available.
 );
@@ -229,5 +229,5 @@
  */
 psDoubleArray *psDoubleArrayRealloc(
-    psDoubleArray *psArr, ///< Array to reallocate.
+    psDoubleArray *psArr,   ///< Array to reallocate.
     int nalloc              ///< Total number of elements to make available.
 );
@@ -290,6 +290,7 @@
  */
 psVoidPtrArray *psVoidPtrArrayRealloc(
-    psVoidPtrArray *psArr,  ///< Array to reallocate.
-    int nalloc              ///< Number of elements.
+    psVoidPtrArray *restrict psArr, ///< Array to reallocate.
+    int nalloc,                     ///< Number of elements.
+    void (*elemFree)(void *)        ///< Callback function responsible for removing array data.
 );
 
