]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/full-storage.hh
release: 0.0.46.jcn1
[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 /// simplest matrix storage. refer to its baseclass for the doco.
17 class Full_storage : public Matrix_storage
18 {
19     /// height, width
20     int height_i_,width_i_;
21     /// maxima.
22     int max_height_i_, max_width_i_;
23     
24     /// the storage
25     Real** els_p_p_;
26
27     void
28     init() {
29         els_p_p_=0;
30         height_i_=width_i_=max_height_i_=max_width_i_=0;
31
32     }
33     
34     bool valid(int i, int j) const {
35         return (i>=0 && i < height_i_)
36             && (j < width_i_ && j >=0);
37     }
38     
39
40     void resize_rows(int);
41     void resize_cols(int);
42
43 public:
44     virtual int rows() const {
45         return height_i_;
46     }
47     virtual int cols() const {
48         return width_i_;
49     }
50     
51     
52     virtual void set_size(int i, int j)
53     {
54         resize(i,j); //this could be more efficient.
55     }
56     
57     virtual void set_size(int i) {
58         set_size(i,i);
59     }
60     virtual void resize(int i, int j);
61     virtual void resize(int i) {
62         resize(i,i);
63     }
64     
65     virtual Real& elem(int i,int j) {
66         assert(valid(i,j));
67         return els_p_p_[i][j];
68     }
69     virtual Real const & elem(int i, int j) const {
70         assert(valid(i,j));
71         return els_p_p_[i][j];
72     }
73     virtual Array<Real> row(int i) const;
74     virtual Array<Real> column(int j) const;
75
76     Full_storage() {
77         init();
78     }
79     Full_storage(int i, int j) {
80         init();
81         set_size(i,j);
82     }
83     Full_storage(Full_storage&);
84     Full_storage(int i) {
85         init();
86         set_size(i);
87     }
88     void OK() const;
89     void operator=(Full_storage const &);
90     
91     virtual void insert_row(int k);
92     virtual void delete_row(int k);
93     virtual void delete_column(int k);
94
95     
96     ~Full_storage();
97     virtual bool mult_ok(int i, int j)const;
98     virtual void mult_next(int &i, int &j) const ;
99     virtual bool trans_ok(int i, int j) const;
100     virtual void trans_next(int &i, int &j) const;
101     virtual Matrix_storage * clone();
102     NAME_MEMBERS(Full_storage);
103     virtual bool try_right_multiply(Matrix_storage * dest, Matrix_storage const * );
104 };
105
106 #endif // FULL_STORAGE_HH