Mercurial > hg > octave-lyh
annotate liboctave/DiagArray2.h @ 10521:4d1fc073fbb7
add some missing copyright stmts
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Wed, 14 Apr 2010 12:23:13 +0200 |
parents | 96ed7c629bbd |
children | fd0a3ac60b0e |
rev | line source |
---|---|
1993 | 1 // Template array classes |
1988 | 2 /* |
3 | |
7017 | 4 Copyright (C) 1996, 1997, 2000, 2002, 2003, 2004, 2005, 2006, 2007 |
5 John W. Eaton | |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
6 Copyright (C) 2008, 2009 Jaroslav Hajek |
10521
4d1fc073fbb7
add some missing copyright stmts
Jaroslav Hajek <highegg@gmail.com>
parents:
10364
diff
changeset
|
7 Copyright (C) 2010 VZLU Prague |
1988 | 8 |
9 This file is part of Octave. | |
10 | |
11 Octave is free software; you can redistribute it and/or modify it | |
12 under the terms of the GNU General Public License as published by the | |
7016 | 13 Free Software Foundation; either version 3 of the License, or (at your |
14 option) any later version. | |
1988 | 15 |
16 Octave is distributed in the hope that it will be useful, but WITHOUT | |
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
18 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
19 for more details. | |
20 | |
21 You should have received a copy of the GNU General Public License | |
7016 | 22 along with Octave; see the file COPYING. If not, see |
23 <http://www.gnu.org/licenses/>. | |
1988 | 24 |
25 */ | |
26 | |
27 #if !defined (octave_DiagArray2_h) | |
28 #define octave_DiagArray2_h 1 | |
29 | |
30 #include <cassert> | |
31 #include <cstdlib> | |
32 | |
4645 | 33 #include "Array.h" |
1988 | 34 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
35 // Array<T> is inherited privately so that some methods, like index, don't |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
36 // produce unexpected results. |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
37 |
1988 | 38 template <class T> |
3585 | 39 class |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
40 DiagArray2 : protected Array<T> |
1988 | 41 { |
42 protected: | |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
43 octave_idx_type d1, d2; |
1988 | 44 |
45 public: | |
46 | |
8918
f5408862892f
Consistently use element_type in the array classes.
Jason Riedy <jason@acm.org>
parents:
8524
diff
changeset
|
47 using Array<T>::element_type; |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
48 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
49 DiagArray2 (void) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
50 : Array<T> (), d1 (0), d2 (0) { } |
1988 | 51 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
52 DiagArray2 (octave_idx_type r, octave_idx_type c) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10312
diff
changeset
|
53 : Array<T> (std::min (r, c), 1), d1 (r), d2 (c) { } |
4513 | 54 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
55 DiagArray2 (octave_idx_type r, octave_idx_type c, const T& val) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10312
diff
changeset
|
56 : Array<T> (std::min (r, c), 1, val), d1 (r), d2 (c) { } |
1988 | 57 |
10363
a0728e81ed25
improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents:
10362
diff
changeset
|
58 explicit DiagArray2 (const Array<T>& a) |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10312
diff
changeset
|
59 : Array<T> (a.as_column ()), d1 (a.numel ()), d2 (a.numel ()) { } |
1988 | 60 |
10363
a0728e81ed25
improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents:
10362
diff
changeset
|
61 DiagArray2 (const Array<T>& a, octave_idx_type r, octave_idx_type c); |
10362
b47ab50a6aa8
simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10358
diff
changeset
|
62 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
63 DiagArray2 (const DiagArray2<T>& a) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
64 : Array<T> (a), d1 (a.d1), d2 (a.d2) { } |
1988 | 65 |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
66 template <class U> |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
67 DiagArray2 (const DiagArray2<U>& a) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
68 : Array<T> (a.diag ()), d1 (a.dim1 ()), d2 (a.dim2 ()) { } |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
69 |
1988 | 70 ~DiagArray2 (void) { } |
71 | |
72 DiagArray2<T>& operator = (const DiagArray2<T>& a) | |
73 { | |
74 if (this != &a) | |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
75 { |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
76 Array<T>::operator = (a); |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
77 d1 = a.d1; |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
78 d2 = a.d2; |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
79 } |
1988 | 80 |
81 return *this; | |
82 } | |
83 | |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
84 octave_idx_type dim1 (void) const { return d1; } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
85 octave_idx_type dim2 (void) const { return d2; } |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
86 |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
87 octave_idx_type rows (void) const { return dim1 (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
88 octave_idx_type cols (void) const { return dim2 (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
89 octave_idx_type columns (void) const { return dim2 (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
90 |
9698
7c6d5d8c8d37
fix diag*diag multiplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9612
diff
changeset
|
91 octave_idx_type diag_length (void) const { return Array<T>::length (); } |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
92 // FIXME: a dangerous ambiguity? |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
93 octave_idx_type length (void) const { return Array<T>::length (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
94 octave_idx_type nelem (void) const { return dim1 () * dim2 (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
95 octave_idx_type numel (void) const { return nelem (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
96 |
10358
72fab01e5d68
improve some size_t queries
Jaroslav Hajek <highegg@gmail.com>
parents:
10352
diff
changeset
|
97 size_t byte_size (void) const { return Array<T>::byte_size (); } |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
98 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
99 dim_vector dims (void) const { return dim_vector (d1, d2); } |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
100 |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
101 Array<T> diag (octave_idx_type k = 0) const; |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
102 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
103 // Warning: the non-const two-index versions will silently ignore assignments |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
104 // to off-diagonal elements. |
1988 | 105 |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
106 T elem (octave_idx_type r, octave_idx_type c) const |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
107 { |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
108 return (r == c) ? Array<T>::elem (r) : T (0); |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
109 } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
110 |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
111 T& elem (octave_idx_type r, octave_idx_type c) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
112 { |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
113 static T zero (0); |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
114 return (r == c) ? Array<T>::elem (r) : zero; |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
115 } |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
116 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
117 T dgelem (octave_idx_type i) const |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
118 { return Array<T>::elem (i); } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
119 |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
120 T& dgelem (octave_idx_type i) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
121 { return Array<T>::elem (i); } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
122 |
5275 | 123 T checkelem (octave_idx_type r, octave_idx_type c) const; |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
124 |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
125 T operator () (octave_idx_type r, octave_idx_type c) const |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
126 { |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
127 #if defined (BOUNDS_CHECKING) |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
128 return checkelem (r, c); |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
129 #else |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
130 return elem (r, c); |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
131 #endif |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
132 } |
1988 | 133 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
134 // No checking. |
8366
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
135 |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
136 T xelem (octave_idx_type r, octave_idx_type c) const |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
137 { |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
138 return (r == c) ? Array<T>::xelem (r) : T (0); |
8b1a2555c4e2
implement diagonal matrix objects
Jaroslav Hajek <highegg@gmail.com>
parents:
8314
diff
changeset
|
139 } |
1988 | 140 |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
141 T& dgxelem (octave_idx_type i) |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
142 { return Array<T>::xelem (i); } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
143 |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
144 T dgxelem (octave_idx_type i) const |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
145 { return Array<T>::xelem (i); } |
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
146 |
10350
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10312
diff
changeset
|
147 void resize (octave_idx_type n, octave_idx_type m, |
12884915a8e4
merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents:
10312
diff
changeset
|
148 const T& rfv = Array<T>::resize_fill_value ()); |
1988 | 149 |
7789
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
150 DiagArray2<T> transpose (void) const; |
82be108cc558
First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents:
7017
diff
changeset
|
151 DiagArray2<T> hermitian (T (*fcn) (const T&) = 0) const; |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
152 |
10363
a0728e81ed25
improve diag matrix interface & implementation
Jaroslav Hajek <highegg@gmail.com>
parents:
10362
diff
changeset
|
153 Array<T> array_value (void) const; |
8524
937921654627
clean up Array and DiagArray2
Jaroslav Hajek <highegg@gmail.com>
parents:
8375
diff
changeset
|
154 |
8375
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
155 const T *data (void) const { return Array<T>::data (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
156 |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
157 const T *fortran_vec (void) const { return Array<T>::fortran_vec (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
158 |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
159 T *fortran_vec (void) { return Array<T>::fortran_vec (); } |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
160 |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
161 void print_info (std::ostream& os, const std::string& prefix) const |
e3c9102431a9
fix design problems of diag & perm matrix classes
Jaroslav Hajek <highegg@gmail.com>
parents:
8366
diff
changeset
|
162 { Array<T>::print_info (os, prefix); } |
1988 | 163 }; |
164 | |
165 #endif |