26 typedef int (CompareFunc)(
const void *a,
const void *b);
33 { list = _list; array = lptr = NULL; }
37 {
return *(++lptr) != 0; }
39 {
return *lptr != 0; }
42 template <
class _list_,
class _iter_>
void rewind(CompareFunc *cmp);
44 static int magic_compare(
const void *_a,
const void *_b);
45 static CompareFunc *actual_compare;
55 template <
class _type_,
class _list_,
class _iter_>
59 typedef int (RealCompareFunc)(
const _type_ *a,
const _type_ *b);
62 WvSorter(_list_ &_list, RealCompareFunc *_cmp)
66 {
return (_type_ *)(*lptr); }
72 { WvSorterBase::rewind<_list_,_iter_>((CompareFunc *)cmp); }
78 template <
class _list_,
class _iter_>
79 void WvSorterBase::rewind(CompareFunc *cmp)
87 _iter_ i(*(_list_ *)list);
91 for (i.rewind(); i.next(); )
94 typedef void *VoidPtr;
95 array =
new VoidPtr[n+2];
100 for (remaining = n, i.rewind(); i.next() && remaining; remaining--)
115 CompareFunc *old_compare = actual_compare;
116 actual_compare = cmp;
117 qsort(array+1, n,
sizeof(
void *), magic_compare);
118 actual_compare = old_compare;
124 #endif // __WVSORTER_H