]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/varray.icc
release: 1.0.1
[lilypond.git] / flower / include / varray.icc
1 #error
2 /*
3   (c) Han-Wen Nienhuys 1995,96,97,98
4
5   Distributed under GNU GPL
6 */
7
8
9 #if 0
10 #include "array.hh"
11 #ifdef INLINE
12 #undef INLINE
13 #endif
14
15 #define INLINE
16 #endif
17
18 /*
19  functions with loops don't inline
20  */
21
22 template<class T> INLINE void 
23 arrcpy (T*dest, T*src, int count)
24 {
25   for (int i_shadows_local=0; i_shadows_local < count ; i_shadows_local++)
26     *dest++ = *src++;
27 }
28
29 template<class T> INLINE void
30 Array<T>::insert (T k, int j) 
31 {
32   assert (j >=0 && j<= size_);
33   set_size (size_+1);
34   for (int i=size_-1; i > j; i--)
35     array_p_[i] = array_p_[i-1];
36   array_p_[j] = k;
37 }
38
39 template<class T> INLINE void
40 Array<T>::sort (int (*compare)(T const&,T const&),
41            int lower = -1, int upper = -1) 
42 {
43   if (lower < 0) 
44     {
45       lower = 0 ;
46       upper = size () - 1;
47     }
48   if (lower >= upper)
49     return;
50   swap (lower, (lower+upper)/2);
51   int last = lower;
52   for (int i= lower +1; i <= upper; i++)
53     if (compare (array_p_[i], array_p_[lower]) < 0)
54       swap (++last,i);
55   swap (lower, last);
56   sort (compare, lower, last-1);
57   sort (compare, last+1, upper);
58 }
59
60 template<class T> INLINE void
61 Array<T>::reverse () 
62 {
63   int h = size_/2;
64   for (int i =0,j = size_-1; i < h; i++,j--)
65     swap (i,j);
66 }
67