]> git.donarmstrong.com Git - lilypond.git/blob - flower/include/diagonal-storage.hh
partial: 1.0.1.jcn
[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--1998 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