source file of the Flower Library
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "array.hh"
+
+
/**
an array of pointers.
template<class T>
class Link_array : private Array<void *>
{
- static int default_compare (T *const& p1, T *const&p2) {
- /* can't do p1 -p2, since T might be an incomplete type */
- if (p1 < p2)
- return -1 ;
- if (p2 < p1)
- return 1;
- return 0;
- }
+
Link_array (Array<void*> v)
:Array<void*> (v)
{
Link_array ()
{}
+ static int default_compare (T *const& p1, T *const&p2)
+ {
+ /* can't do p1 -p2, since T might be an incomplete type */
+ if (p1 < p2)
+ return -1 ;
+ if (p2 < p1)
+ return 1;
+ return 0;
+ }
Link_array (T * const *tp, int n)
: Array<void*> ((void **)tp, n)
{
Array<void*>::size;
Array<void*>::clear;
Array<void*>::set_size;
- Array<void*>::empty;
+ Array<void*>::is_empty;
Array<void*>::reverse;
Array<void*>::tighten_maxsize;
else
return 0;
}
-
};
template<class T, class V>
}
+template<class T>
+void
+binary_search_bounds (Link_array<T> const &table,
+ T const *key, int (*compare) (T * const& , T *const &),
+ int *lo,
+ int *hi)
+{
+ int cmp;
+ int result;
+
+ /* binary search */
+ do
+ {
+ cmp = (*lo + *hi) / 2;
+
+ result = (*compare) ((T*) key, table[cmp]);
+
+ if (result < 0)
+ *hi = cmp;
+ else
+ *lo = cmp;
+ }
+ while (*hi - *lo > 1);
+}
+
#endif // PARRAY_HH