]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/diagonal-storage.hh
release: 0.0.78
[lilypond.git] / flower / include / diagonal-storage.hh
1 /*
2   diagonal-storage.hh -- declare Diagonal_storage
3
4   source file of the Flower Library
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9
10 #ifndef DIAGONAL_STORAGE_HH
11 #define DIAGONAL_STORAGE_HH
12 #include "full-storage.hh"
13
14 /**
15   Store a single-band matrix;
16
17   INVARIANT
18   
19   Diagonal_storage(i,j) == band_(i, j-i + band_size_i())
20   
21   band_.cols() == 2 * band_size_i() + 1
22   
23  */
24 class Diagonal_storage : public Matrix_storage {
25     Full_storage band_;
26
27 public:
28      void set_band_size(int b);
29    int band_size_i()const;
30     
31     void assert_valid(int i, int j) const;
32     bool band_elt_b(int,int )const;
33     void resize_dim(int);
34     
35     virtual void resize_rows(int d) { resize_dim (d); }
36     virtual void resize_cols(int d) { resize_dim(d); }
37     virtual int dim() const;
38
39     virtual int rows() const ;
40     virtual int cols() const ;
41     
42     
43     virtual void resize(int i, int j);
44     virtual void resize(int i);
45     
46     virtual Real& elem(int i,int j);
47     virtual Real elem(int i, int j) const;
48     Diagonal_storage(Matrix_storage* , int band_i);
49     Diagonal_storage();
50     void OK() const;
51     
52     virtual void insert_row(int k);
53     virtual void delete_row(int k);
54     virtual void delete_column(int k);
55     
56     ~Diagonal_storage();
57     virtual bool mult_ok(int i, int j)const;
58     virtual void mult_next(int &i, int &j) const ;
59     virtual bool trans_ok(int i, int j) const;
60     virtual void trans_next(int &i, int &j) const;
61     VIRTUAL_COPY_CONS(Diagonal_storage, Matrix_storage);
62     DECLARE_MY_RUNTIME_TYPEINFO;
63     virtual bool try_right_multiply(Matrix_storage * dest, Matrix_storage const *)const;
64 };
65 #endif // DIAGONAL_STORAGE_HH