]> git.donarmstrong.com Git - lilypond.git/blob - flower/tsmat.cc
0e5407ae70ff392af6c70117d9be87f7eb2ae857
[lilypond.git] / flower / tsmat.cc
1 #include "smat.hh"
2
3 template<class T>
4 void
5 Full_storage<T>::operator=(Full_storage const &fs)
6 {
7     resize(fs.h, fs.w);
8     for (int i=0; i<h; i++)
9         for (int j=0; i<w; j++)
10             els[i][j]= fs.els[i][j];
11 }
12
13 template<class T>
14 void
15 Full_storage<T>::OK() const
16 {
17     assert(maxh >= h && maxw >= w);
18     assert(h >= 0 && w >= 0);
19 }
20 template<class T>
21 void
22 Full_storage<T>::resize_cols(int newh)
23 {
24     if (newh <= maxh) {
25         h=newh;
26         return;
27     }
28    
29     T** newa=new T*[newh];
30     int j=0;
31     for (; j < h; j++)
32         newa[j] = els[j];
33     for (; j < newh; j++)
34         newa[j] = new T[w];
35     delete[] els;
36     els=newa;
37     maxh = newh;
38 }
39
40 template<class T>
41 void
42 Full_storage<T>::resize_rows(int neww)
43 {
44     if (neww <= maxw) {
45         w=neww;
46         return;
47     }
48     for (int i=0; i < h ; i++) {
49         T* newa=new T[neww];
50         for (int k=0; k < w; k++)
51             newa[k] = els[i][k];
52
53         delete[] els[i];
54         els[i] = newa;
55         maxw = neww;
56     }
57 }
58
59 template<class T>
60 Full_storage<T>::~Full_storage() {
61     for (int i=0; i < maxh; i++)
62         delete [] els[i];
63     delete[] els;
64 }
65
66 template<class T>
67 void
68 Full_storage<T>::resize(int i, int j)
69 {
70     resize_cols(i);
71     resize_rows(j);
72 }
73
74 template<class T>
75 void
76 Full_storage<T>::set_size(int i, int j)
77 {    
78     resize(i,j)
79 }
80
81 template<class T>
82 bool
83 Full_storage<T>::mult_ok(int i, int j) const
84 {
85     return valid(i,j);
86 }
87
88 template<class T>
89 bool
90 Full_storage<T>::trans_ok(int i, int j) const
91 {
92        return valid(i,j);
93
94
95
96 template<class T>
97 void
98 Full_storage<T>::trans_next(int &i, int &j) const
99 {
100     assert(trans_ok(i,j));
101     i++;
102     if (i >= h) {
103         i=0;
104         j ++;
105     }
106 }
107
108 template<class T>
109 void
110 Full_storage<T>::mult_next(int &i, int &j) const
111 {
112     assert(mult_ok(i,j));
113     j++;
114     if (j >= w) {
115         j=0;
116         i++;
117     }
118 }
119
120 template<class T>
121 void
122 Full_storage<T>::delete_row(int k)
123 {
124     assert(0 <= k <h);
125     for (int i=h-1; i > k ; i++)
126         for (int j=0; j < w; j++)
127             els[i-1][j]=els[i][j];
128 }
129
130 template<class T>
131 void
132 Full_storage<T>::insert_row(int k)
133 {
134     assert(0 <= k <=h);
135     resize_cols(h+1);
136     for (int i=h-1; i > k ; i++)
137         for (int j=0; j <w; j++)
138             els[i][j]=els[i-1][j];
139 }
140
141 /****************************************************************/
142
143 template<class T>
144 virtual_smat<T> *
145 virtual_smat<T>::get_full(int n, int m)
146 {
147     return new Full_storage<T>(n,m);
148 }
149 #include "real.hh"
150
151 template Full_storage<Real>;