Author: sewardj
Date: 2008-02-17 00:25:49 +0000 (Sun, 17 Feb 2008)
New Revision: 7415

Log:
Add a new method, VG_(cloneXA), which clones an existing XArray.


Modified:
   branches/DATASYMS/coregrind/m_xarray.c
   branches/DATASYMS/include/pub_tool_xarray.h


Modified: branches/DATASYMS/coregrind/m_xarray.c
===================================================================
--- branches/DATASYMS/coregrind/m_xarray.c      2008-02-17 00:24:22 UTC (rev 
7414)
+++ branches/DATASYMS/coregrind/m_xarray.c      2008-02-17 00:25:49 UTC (rev 
7415)
@@ -76,6 +76,32 @@
    return xa;
 }
 
+XArray* VG_(cloneXA)( XArray* xao )
+{
+   struct _XArray* xa = (struct _XArray*)xao;
+   struct _XArray* nyu;
+   vg_assert(xa);
+   vg_assert(xa->alloc);
+   vg_assert(xa->free);
+   vg_assert(xa->elemSzB >= 1);
+   nyu = xa->alloc( sizeof(struct _XArray) );
+   if (!nyu)
+      return NULL;
+   /* Copy everything verbatim ... */
+   *nyu = *xa;
+   /* ... except we have to clone the contents-array */
+   if (nyu->arr) {
+      nyu->arr = nyu->alloc( nyu->totsizeE * nyu->elemSzB );
+      if (!nyu->arr) {
+         nyu->free(nyu);
+         return NULL;
+      }
+      VG_(memcpy)( nyu->arr, xa->arr, nyu->totsizeE * nyu->elemSzB );
+   }
+   /* We're done! */
+   return nyu;
+}
+
 void VG_(deleteXA) ( XArray* xao )
 {
    struct _XArray* xa = (struct _XArray*)xao;

Modified: branches/DATASYMS/include/pub_tool_xarray.h
===================================================================
--- branches/DATASYMS/include/pub_tool_xarray.h 2008-02-17 00:24:22 UTC (rev 
7414)
+++ branches/DATASYMS/include/pub_tool_xarray.h 2008-02-17 00:25:49 UTC (rev 
7415)
@@ -99,6 +99,11 @@
    than n elements in the array. */
 extern void VG_(dropTailXA) ( XArray*, Word );
 
+/* Make a new, completely independent copy of the given XArray, using
+   the existing allocation function to allocate the new space.
+   Returns NULL if the allocation function didn't manage to allocate
+   space (but did return NULL rather than merely abort.) */
+extern XArray* VG_(cloneXA)( XArray* xa );
 
 #endif   // __PUB_TOOL_XARRAY_H
 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to