From d4a18f87cce181926b3e444b7d2b27b97c8a9ffa Mon Sep 17 00:00:00 2001 From: Julian Seward Date: Wed, 5 May 2010 09:23:41 +0000 Subject: [PATCH] Add a method to get the contents of an XArray so we can index in it really fast, or iterate over it. This is dangerous and breaks the nice abstraction (sigh). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11122 --- coregrind/m_xarray.c | 10 ++++++++++ include/pub_tool_xarray.h | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/coregrind/m_xarray.c b/coregrind/m_xarray.c index 9b2baee40e..cdcf978615 100644 --- a/coregrind/m_xarray.c +++ b/coregrind/m_xarray.c @@ -306,6 +306,16 @@ void VG_(dropHeadXA) ( XArray* xao, Word n ) xa->usedsizeE -= n; } +void VG_(getContentsXA_UNSAFE)( XArray* xao, + /*OUT*/void** ctsP, + /*OUT*/Word* usedP ) +{ + struct _XArray* xa = (struct _XArray*)xao; + vg_assert(xa); + *ctsP = (void*)xa->arr; + *usedP = xa->usedsizeE; +} + /* --------- Printeffery --------- */ static void add_char_to_XA ( HChar c, void* opaque ) diff --git a/include/pub_tool_xarray.h b/include/pub_tool_xarray.h index 8d2d32b4eb..cd1b02e43b 100644 --- a/include/pub_tool_xarray.h +++ b/include/pub_tool_xarray.h @@ -125,6 +125,16 @@ extern void VG_(dropHeadXA) ( XArray*, Word ); is NULL, in which case the parent's cost-center is used. */ extern XArray* VG_(cloneXA)( HChar* cc, XArray* xa ); +/* Get the raw array and size so callers can index it really fast. + This is dangerous in the sense that there's no range or + anything-else checking. It's also dangerous in that if + VG_(addToXA) is used, the contents may be re-located without + warning, hence making the contents address returned here + invalid. */ +extern void VG_(getContentsXA_UNSAFE)( XArray* sr, + /*OUT*/void** ctsP, + /*OUT*/Word* usedP ); + /* Convenience function: printf into an XArray of HChar, adding stuff at the end. This is very convenient for concocting arbitrary length printf output in an XArray. Note that the resulting string -- 2.47.2