]> git.donarmstrong.com Git - lilypond.git/blob - flower/tsmat.hh
release: 0.0.2
[lilypond.git] / flower / tsmat.hh
1 #ifndef SMAT_HH
2 #define SMAT_HH
3 #include "vray.hh"
4 #include "vsmat.hh"
5
6 /// simplest matrix storage. refer to its baseclass for the doco.
7 template<class T>
8 class Full_storage : public virtual_smat<T>
9 {
10     /// height, width
11     int h,w;
12     /// maxima.
13     int maxh, maxw;
14     
15     /// the storage
16     T** els;
17     void
18     init() {
19         els=0;
20         h=w=maxh=maxw=0;
21
22     }
23     
24     bool valid(int i, int j) const {
25         return (i>=0 && i < h)
26             && (j < w && j >=0);
27     }
28     
29
30     void resize_rows(int);
31     void resize_cols(int);
32
33 public:
34     virtual int rows() const {
35         return h;
36     }
37     virtual int cols() const {
38         return w;
39     }
40     
41     
42     virtual void set_size(int i, int j)
43     {
44         resize(i,j); //this could be more efficient.
45     }
46     
47     virtual void set_size(int i) {
48         set_size(i,i);
49     }
50     virtual void resize(int i, int j);
51     virtual void resize(int i) {
52         resize(i,i);
53     }
54     
55     virtual T& elem(int i,int j) {
56         assert(valid(i,j));
57         return els[i][j];
58     }
59     virtual const T& elem(int i, int j) const {
60         assert(valid(i,j));
61         return els[i][j];
62     }
63     virtual svec<T> row(int i) const;
64     virtual svec<T> column(int j) const;
65
66     Full_storage() {
67         init();
68     }
69     Full_storage(int i, int j) {
70         init();
71         set_size(i,j);
72     }
73     Full_storage(int i) {
74         init();
75         set_size(i);
76     }
77     void OK() const;
78     void operator=(Full_storage const &);
79     
80     virtual void insert_row(int k);
81     virtual void delete_row(int k);
82
83     
84     ~Full_storage();
85     virtual bool mult_ok(int i, int j)const;
86     virtual void mult_next(int &i, int &j) const ;
87     virtual bool trans_ok(int i, int j) const;
88     virtual void trans_next(int &i, int &j) const;
89
90 };
91
92 #endif