lilypond-0.0.5
[lilypond.git] / flower / tsmat.cc
blob0e5407ae70ff392af6c70117d9be87f7eb2ae857
1 #include "smat.hh"
3 template<class T>
4 void
5 Full_storage<T>::operator=(Full_storage const &fs)
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];
13 template<class T>
14 void
15 Full_storage<T>::OK() const
17 assert(maxh >= h && maxw >= w);
18 assert(h >= 0 && w >= 0);
20 template<class T>
21 void
22 Full_storage<T>::resize_cols(int newh)
24 if (newh <= maxh) {
25 h=newh;
26 return;
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;
40 template<class T>
41 void
42 Full_storage<T>::resize_rows(int neww)
44 if (neww <= maxw) {
45 w=neww;
46 return;
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];
53 delete[] els[i];
54 els[i] = newa;
55 maxw = neww;
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;
66 template<class T>
67 void
68 Full_storage<T>::resize(int i, int j)
70 resize_cols(i);
71 resize_rows(j);
74 template<class T>
75 void
76 Full_storage<T>::set_size(int i, int j)
78 resize(i,j)
81 template<class T>
82 bool
83 Full_storage<T>::mult_ok(int i, int j) const
85 return valid(i,j);
88 template<class T>
89 bool
90 Full_storage<T>::trans_ok(int i, int j) const
92 return valid(i,j);
96 template<class T>
97 void
98 Full_storage<T>::trans_next(int &i, int &j) const
100 assert(trans_ok(i,j));
101 i++;
102 if (i >= h) {
103 i=0;
104 j ++;
108 template<class T>
109 void
110 Full_storage<T>::mult_next(int &i, int &j) const
112 assert(mult_ok(i,j));
113 j++;
114 if (j >= w) {
115 j=0;
116 i++;
120 template<class T>
121 void
122 Full_storage<T>::delete_row(int k)
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];
130 template<class T>
131 void
132 Full_storage<T>::insert_row(int k)
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];
141 /****************************************************************/
143 template<class T>
144 virtual_smat<T> *
145 virtual_smat<T>::get_full(int n, int m)
147 return new Full_storage<T>(n,m);
149 #include "real.hh"
151 template Full_storage<Real>;