]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/diagonal-storage.hh
release: 0.1.11
[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  matrix with a single-band.
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     DECLARE_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