Make all the m_xarray functions tool-visible.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@6615 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_xarray.c b/coregrind/m_xarray.c
index b8e11d3..405f4f1 100644
--- a/coregrind/m_xarray.c
+++ b/coregrind/m_xarray.c
@@ -35,7 +35,7 @@
#include "pub_core_xarray.h" /* self */
-/* See pub_core_xarray.h for details of what this is all about. */
+/* See pub_tool_xarray.h for details of what this is all about. */
struct _XArray {
void* (*alloc) ( SizeT ); /* alloc fn (nofail) */
diff --git a/coregrind/pub_core_xarray.h b/coregrind/pub_core_xarray.h
index 86e1d9a..730517e 100644
--- a/coregrind/pub_core_xarray.h
+++ b/coregrind/pub_core_xarray.h
@@ -33,60 +33,14 @@
//--------------------------------------------------------------------
// PURPOSE: Provides a simple but useful structure, which is an array
-// in which elements can be added at the end. The array is expanded
-// as needed by multiplying its size by a constant factor (usually 2).
-// This gives amortised O(1) insertion cost, and, following sorting,
-// the usual O(N log N) binary search cost. Arbitrary element sizes
-// are allowed; the comparison function for sort/lookup can be changed
-// at any time, and duplicates (modulo the comparison function) are
-// allowed.
+// in which elements can be added at the end. See pub_tool_xarray.h
+// for further details.
//--------------------------------------------------------------------
+// No core-only exports; everything in this module is visible to both
+// the core and tools.
-/* It's an abstract type. Bwaha. */
-typedef void XArray;
-
-/* Create new XArray, using given allocation and free function, and
- for elements of the specified size. Alloc fn must not fail (that
- is, if it returns it must have succeeded.) */
-extern XArray* VG_(newXA) ( void*(*alloc_fn)(SizeT),
- void(*free_fn)(void*),
- Word elemSzB );
-
-/* Free all memory associated with an XArray. */
-extern void VG_(deleteXA) ( XArray* );
-
-/* Set the comparison function for this XArray. This clears an
- internal 'array is sorted' flag, which means you must call sortXA
- before making further queries with lookupXA. */
-extern void VG_(setCmpFnXA) ( XArray*, Word (*compar)(void*,void*) );
-
-/* Add an element to an XArray. Element is copied into the XArray. */
-extern void VG_(addToXA) ( XArray*, void* elem );
-
-/* Sort an XArray using its comparison function, if set; else bomb.
- Probably not a stable sort w.r.t. equal elements module cmpFn. */
-extern void VG_(sortXA) ( XArray* );
-
-/* Lookup (by binary search) 'key' in the array. Set *first to be the
- index of the first, and *last to be the index of the last matching
- value found. If any values are found, return True, else return
- False, and don't change *first or *last. Bomb if the array is not
- sorted. */
-extern Bool VG_(lookupXA) ( XArray*, void* key,
- /*OUT*/Word* first, /*OUT*/Word* last );
-
-/* How elements are there in this XArray now? */
-extern Word VG_(sizeXA) ( XArray* );
-
-/* Index into the XArray. Checks bounds and bombs if the index is
- invalid. */
-extern void* VG_(indexXA) ( XArray*, Word );
-
-/* Drop the last n elements of an XArray. Bombs if there are less
- than n elements in the array. */
-extern void VG_(dropTailXA) ( XArray*, Word );
-
+#include "pub_tool_xarray.h"
#endif // __PUB_CORE_XARRAY_H
diff --git a/include/pub_tool_xarray.h b/include/pub_tool_xarray.h
new file mode 100644
index 0000000..bdb75c3
--- /dev/null
+++ b/include/pub_tool_xarray.h
@@ -0,0 +1,100 @@
+
+/*--------------------------------------------------------------------*/
+/*--- An expandable array implementation. pub_tool_xarray.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2007-2007 OpenWorks LLP
+ info@open-works.co.uk
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+#ifndef __PUB_TOOL_XARRAY_H
+#define __PUB_TOOL_XARRAY_H
+
+//--------------------------------------------------------------------
+// PURPOSE: Provides a simple but useful structure, which is an array
+// in which elements can be added at the end. The array is expanded
+// as needed by multiplying its size by a constant factor (usually 2).
+// This gives amortised O(1) insertion cost, and, following sorting,
+// the usual O(log N) binary search cost. Arbitrary element sizes
+// are allowed; the comparison function for sort/lookup can be changed
+// at any time, and duplicates (modulo the comparison function) are
+// allowed.
+//--------------------------------------------------------------------
+
+
+/* It's an abstract type. Bwaha. */
+typedef void XArray;
+
+/* Create new XArray, using given allocation and free function, and
+ for elements of the specified size. Alloc fn must not fail (that
+ is, if it returns it must have succeeded.) */
+extern XArray* VG_(newXA) ( void*(*alloc_fn)(SizeT),
+ void(*free_fn)(void*),
+ Word elemSzB );
+
+/* Free all memory associated with an XArray. */
+extern void VG_(deleteXA) ( XArray* );
+
+/* Set the comparison function for this XArray. This clears an
+ internal 'array is sorted' flag, which means you must call sortXA
+ before making further queries with lookupXA. */
+extern void VG_(setCmpFnXA) ( XArray*, Word (*compar)(void*,void*) );
+
+/* Add an element to an XArray. Element is copied into the XArray. */
+extern void VG_(addToXA) ( XArray*, void* elem );
+
+/* Sort an XArray using its comparison function, if set; else bomb.
+ Probably not a stable sort w.r.t. equal elements module cmpFn. */
+extern void VG_(sortXA) ( XArray* );
+
+/* Lookup (by binary search) 'key' in the array. Set *first to be the
+ index of the first, and *last to be the index of the last matching
+ value found. If any values are found, return True, else return
+ False, and don't change *first or *last. Bomb if the array is not
+ sorted. */
+extern Bool VG_(lookupXA) ( XArray*, void* key,
+ /*OUT*/Word* first, /*OUT*/Word* last );
+
+/* How elements are there in this XArray now? */
+extern Word VG_(sizeXA) ( XArray* );
+
+/* Index into the XArray. Checks bounds and bombs if the index is
+ invalid. What this returns is the address of the specified element
+ in the array, not (of course) the element itself. Note that the
+ element may get moved by subsequent addToXAs/sortXAs, so you should
+ copy it out immediately and not regard its address as unchanging.
+ Note also that indexXA will of course not return NULL if it
+ succeeds. */
+extern void* VG_(indexXA) ( XArray*, Word );
+
+/* Drop the last n elements of an XArray. Bombs if there are less
+ than n elements in the array. */
+extern void VG_(dropTailXA) ( XArray*, Word );
+
+
+#endif // __PUB_TOOL_XARRAY_H
+
+/*--------------------------------------------------------------------*/
+/*--- end pub_tool_xarray.h ---*/
+/*--------------------------------------------------------------------*/