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
This commit is contained in:
Julian Seward 2010-05-05 09:23:41 +00:00
parent 9b0574dff8
commit d4a18f87cc
2 changed files with 20 additions and 0 deletions

View File

@ -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 )

View File

@ -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