]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/full-storage.hh
78bafab43dc9c292f42fe57cb10ba8533fa0b96b
[lilypond.git] / flower / include / full-storage.hh
1 /*
2   full-storage.hh -- declare Full_storage
3
4   source file of the Flower Library
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #ifndef FULL_STORAGE_HH
11 #define FULL_STORAGE_HH
12
13 #include "varray.hh"
14 #include "matrix-storage.hh"
15 #include "real.hh"
16
17 /// simplest matrix storage. refer to its baseclass for the doco.
18 class Full_storage : public Matrix_storage
19 {
20     /// height, width
21     int height_i_,width_i_;
22     /// maxima.
23     int max_height_i_, max_width_i_;
24     
25     /// the storage
26     Real** els_p_p_;
27
28     void
29     init() {
30         els_p_p_=0;
31         height_i_=width_i_=max_height_i_=max_width_i_=0;
32
33     }
34     
35     bool valid(int i, int j) const {
36         return (i>=0 && i < height_i_)
37             && (j < width_i_ && j >=0);
38     }
39     
40
41     void resize_rows(int);
42     void resize_cols(int);
43
44 public:
45     virtual int rows() const {
46         return height_i_;
47     }
48     virtual int cols() const {
49         return width_i_;
50     }
51     
52     
53     virtual void resize(int i, int j);
54     virtual void resize(int i) {
55         resize(i,i);
56     }
57     
58     virtual Real& elem(int i,int j) {
59         assert(valid(i,j));
60         return els_p_p_[i][j];
61     }
62     virtual Real elem(int i, int j) const {
63         assert(valid(i,j));
64         return els_p_p_[i][j];
65     }
66     int dim()const;
67     Full_storage(Matrix_storage*);
68     Full_storage() {
69         init();
70     }
71     Full_storage(int i, int j) {
72         init();
73         set_size(i,j);
74     }
75     Full_storage(Full_storage const&);
76     Full_storage(int i) {
77         init();
78         set_size(i);
79     }
80     void OK() const;
81     void operator=(Full_storage const &);
82     
83     virtual void insert_row(int k);
84     virtual void delete_row(int k);
85     virtual void delete_column(int k);
86     
87     ~Full_storage();
88     virtual bool mult_ok(int i, int j)const;
89     virtual void mult_next(int &i, int &j) const ;
90     virtual bool trans_ok(int i, int j) const;
91     virtual void trans_next(int &i, int &j) const;
92     VIRTUAL_COPY_CONS(Full_storage,Matrix_storage);
93     DECLARE_MY_RUNTIME_TYPEINFO;
94     virtual bool try_right_multiply(Matrix_storage * dest, Matrix_storage const * )const;
95 };
96
97 #endif // FULL_STORAGE_HH