2 (c) 1995--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
4 Distributed under GNU GPL
8 #include "std-vector.hh"
17 functions with loops don't inline
20 template<class T> INLINE void
21 arrcpy (T *dest, T const *src, vsize count)
23 for (vsize i_shadows_local = 0; i_shadows_local < count; i_shadows_local++)
27 urg: wierd egcs-1.1.2-12c (stock LinuxPPC R5) bug on ppc
29 fixed in egcs-1.1.2-12f
30 ftp://dev.linuxppc.org/users/fsirl/R5/RPMS/ppc/
40 template<class T> INLINE void
41 Array<T>::insert (T k, vsize j)
44 assert (j >= 0 && j <= size_);
49 for (vsize i = size_ - 1; i > j; i--)
50 array_[i] = array_[i - 1];
54 template<class T> INLINE void
55 Array<T>::sort (int (*compare) (T const &, T const &), vsize lower, vsize upper)
64 swap (lower, (lower + upper) / 2);
66 for (vsize i = lower +1; i <= upper; i++)
67 if (compare (array_[i], array_[lower]) < 0)
70 sort (compare, lower, last - 1);
71 sort (compare, last + 1, upper);
74 template<class T> INLINE void
78 for (vsize i = 0, j = size_ - 1; i < h; i++, j--)
82 template<class T> INLINE
87 assert (max_ >= size_ && size_ >= 0);
89 assert (max_ >= size_);
95 template<class T> INLINE
97 Array<T>::remove_array ()
106 template<class T> INLINE
107 Array<T>::Array (const_iterator b, const_iterator e)
112 arrcpy (array_, b, n);
117 binary_search_bounds (Array<T> const &table,
118 T const &key, int (*compare) (T const &, T const &),
128 cmp = (*lo + *hi) / 2;
130 result = (*compare) (key, table[cmp]);
137 while (*hi - *lo > 1);
141 lookup with binsearch, return array index.
145 binary_search (Array<T> const &table,
146 T const &key, int (*compare) (T const &, T const &),
153 binary_search_bounds (table, key, compare, &lo, &hi);
155 if (! (*compare) (key, table[lo]))