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<typename T> INLINE void
55 vector_sort (Array<T> &v, int (*compare) (T const &, T const &),
56 vsize lower=-1, vsize upper=-1)
61 upper = v.size () - 1;
65 v.swap (lower, (lower + upper) / 2);
67 for (vsize i = lower +1; i <= upper; i++)
68 if (compare (v.array_[i], v.array_[lower]) < 0)
71 vector_sort (v, compare, lower, last - 1);
72 vector_sort (v, compare, last + 1, upper);
75 template<class T> INLINE void
79 for (vsize i = 0, j = size_ - 1; i < h; i++, j--)
83 template<class T> INLINE
88 assert (max_ >= size_ && size_ >= 0);
90 assert (max_ >= size_);
96 template<class T> INLINE
98 Array<T>::remove_array ()
107 template<class T> INLINE
108 Array<T>::Array (const_iterator b, const_iterator e)
113 arrcpy (array_, b, n);
118 binary_search_bounds (Array<T> const &table,
119 T const &key, int (*compare) (T const &, T const &),
129 cmp = (*lo + *hi) / 2;
131 result = (*compare) (key, table[cmp]);
138 while (*hi - *lo > 1);
142 lookup with binsearch, return array index.
146 binary_search (Array<T> const &table,
147 T const &key, int (*compare) (T const &, T const &),
154 binary_search_bounds (table, key, compare, &lo, &hi);
156 if (! (*compare) (key, table[lo]))