Mercurial > hg > octave-nkf
annotate liboctave/boolNDArray.cc @ 10158:4c0cdbe0acca
remove Emacs local-variable settings from liboctave source files
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 20 Jan 2010 19:04:35 -0500 |
parents | b6b65e71049b |
children | 07ebe522dac2 |
rev | line source |
---|---|
4514 | 1 // N-D Array manipulations. |
2 /* | |
3 | |
8920 | 4 Copyright (C) 1996, 1997, 2003, 2004, 2005, 2006, 2007, 2008, |
5 2009 John W. Eaton | |
9601
a9b37bae1802
add a couple of missing copyright statements
Jaroslav Hajek <highegg@gmail.com>
parents:
9578
diff
changeset
|
6 Copyright (C) 2009 VZLU Prague, a.s. |
4514 | 7 |
8 This file is part of Octave. | |
9 | |
10 Octave is free software; you can redistribute it and/or modify it | |
11 under the terms of the GNU General Public License as published by the | |
7016 | 12 Free Software Foundation; either version 3 of the License, or (at your |
13 option) any later version. | |
4514 | 14 |
15 Octave is distributed in the hope that it will be useful, but WITHOUT | |
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
18 for more details. | |
19 | |
20 You should have received a copy of the GNU General Public License | |
7016 | 21 along with Octave; see the file COPYING. If not, see |
22 <http://www.gnu.org/licenses/>. | |
4514 | 23 |
24 */ | |
25 | |
26 #ifdef HAVE_CONFIG_H | |
27 #include <config.h> | |
28 #endif | |
29 | |
4588 | 30 #include "Array-util.h" |
4514 | 31 #include "CNDArray.h" |
32 #include "mx-base.h" | |
33 #include "lo-ieee.h" | |
8774
b756ce0002db
split implementation and interface in mx-op-defs and MArray-defs
Jaroslav Hajek <highegg@gmail.com>
parents:
8756
diff
changeset
|
34 #include "mx-op-defs.h" |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
35 #include "MArray-defs.h" |
4514 | 36 |
9743
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
37 #include "bsxfun-defs.cc" |
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
38 |
4543 | 39 // unary operations |
40 | |
41 boolNDArray | |
42 boolNDArray::operator ! (void) const | |
43 { | |
9550
3d6a9aea2aea
refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents:
9548
diff
changeset
|
44 return do_mx_unary_op<boolNDArray> (*this, mx_inline_not); |
4543 | 45 } |
46 | |
9607
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
47 boolNDArray& |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
48 boolNDArray::invert (void) |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
49 { |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
50 if (is_shared ()) |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
51 *this = ! *this; |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
52 else |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
53 do_mx_inplace_op<boolNDArray> (*this, mx_inline_not2); |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
54 |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
55 return *this; |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
56 } |
1be3c73ed7b5
reuse temporary arrays in nested expressions
Jaroslav Hajek <highegg@gmail.com>
parents:
9601
diff
changeset
|
57 |
5775 | 58 // FIXME -- this is not quite the right thing. |
4514 | 59 |
4556 | 60 boolNDArray |
4514 | 61 boolNDArray::all (int dim) const |
62 { | |
9227
8145f2255276
use explicit template qualifs to please Intel C++ and MSVC++
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
63 return do_mx_red_op<boolNDArray, bool> (*this, dim, mx_inline_all); |
4514 | 64 } |
65 | |
4556 | 66 boolNDArray |
4514 | 67 boolNDArray::any (int dim) const |
68 { | |
9227
8145f2255276
use explicit template qualifs to please Intel C++ and MSVC++
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
69 return do_mx_red_op<boolNDArray, bool> (*this, dim, mx_inline_any); |
4514 | 70 } |
71 | |
8756
d0755c9db5ed
implement fast logical sum (counting)
Jaroslav Hajek <highegg@gmail.com>
parents:
8743
diff
changeset
|
72 NDArray |
7113 | 73 boolNDArray::sum (int dim) const |
74 { | |
10152
b6b65e71049b
optimize cumsum with logicals
Jaroslav Hajek <highegg@gmail.com>
parents:
9743
diff
changeset
|
75 // NOTE: going via octave_idx_type is typically faster even though it |
b6b65e71049b
optimize cumsum with logicals
Jaroslav Hajek <highegg@gmail.com>
parents:
9743
diff
changeset
|
76 // requires a conversion. |
9227
8145f2255276
use explicit template qualifs to please Intel C++ and MSVC++
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
77 return do_mx_red_op<Array<octave_idx_type> , bool> (*this, dim, mx_inline_count); |
7113 | 78 } |
79 | |
8780
ea76466605ba
support native cumsum, gripe on overflow in sum/cumsum
Jaroslav Hajek <highegg@gmail.com>
parents:
8774
diff
changeset
|
80 NDArray |
ea76466605ba
support native cumsum, gripe on overflow in sum/cumsum
Jaroslav Hajek <highegg@gmail.com>
parents:
8774
diff
changeset
|
81 boolNDArray::cumsum (int dim) const |
ea76466605ba
support native cumsum, gripe on overflow in sum/cumsum
Jaroslav Hajek <highegg@gmail.com>
parents:
8774
diff
changeset
|
82 { |
10152
b6b65e71049b
optimize cumsum with logicals
Jaroslav Hajek <highegg@gmail.com>
parents:
9743
diff
changeset
|
83 // In this case, it's better to sum directly to doubles. |
b6b65e71049b
optimize cumsum with logicals
Jaroslav Hajek <highegg@gmail.com>
parents:
9743
diff
changeset
|
84 return do_mx_cum_op<NDArray , bool> (*this, dim, mx_inline_cumcount); |
8780
ea76466605ba
support native cumsum, gripe on overflow in sum/cumsum
Jaroslav Hajek <highegg@gmail.com>
parents:
8774
diff
changeset
|
85 } |
ea76466605ba
support native cumsum, gripe on overflow in sum/cumsum
Jaroslav Hajek <highegg@gmail.com>
parents:
8774
diff
changeset
|
86 |
4964 | 87 boolNDArray |
5275 | 88 boolNDArray::concat (const boolNDArray& rb, const Array<octave_idx_type>& ra_idx) |
4964 | 89 { |
90 if (rb.numel () > 0) | |
5073 | 91 insert (rb, ra_idx); |
92 return *this; | |
4964 | 93 } |
94 | |
95 boolNDArray& | |
5275 | 96 boolNDArray::insert (const boolNDArray& a, octave_idx_type r, octave_idx_type c) |
4964 | 97 { |
98 Array<bool>::insert (a, r, c); | |
99 return *this; | |
100 } | |
101 | |
102 boolNDArray& | |
5275 | 103 boolNDArray::insert (const boolNDArray& a, const Array<octave_idx_type>& ra_idx) |
4964 | 104 { |
105 Array<bool>::insert (a, ra_idx); | |
106 return *this; | |
107 } | |
108 | |
109 | |
110 | |
4514 | 111 boolMatrix |
112 boolNDArray::matrix_value (void) const | |
113 { | |
114 boolMatrix retval; | |
115 | |
116 int nd = ndims (); | |
117 | |
118 switch (nd) | |
119 { | |
120 case 1: | |
121 retval = boolMatrix (Array2<bool> (*this, dimensions(0), 1)); | |
122 break; | |
123 | |
124 case 2: | |
125 retval = boolMatrix (Array2<bool> (*this, dimensions(0), | |
126 dimensions(1))); | |
127 break; | |
128 | |
129 default: | |
130 (*current_liboctave_error_handler) | |
4770 | 131 ("invalid conversion of boolNDArray to boolMatrix"); |
4514 | 132 break; |
133 } | |
134 | |
135 return retval; | |
136 } | |
137 | |
4532 | 138 void |
5275 | 139 boolNDArray::increment_index (Array<octave_idx_type>& ra_idx, |
4532 | 140 const dim_vector& dimensions, |
141 int start_dimension) | |
142 { | |
143 ::increment_index (ra_idx, dimensions, start_dimension); | |
144 } | |
145 | |
5275 | 146 octave_idx_type |
147 boolNDArray::compute_index (Array<octave_idx_type>& ra_idx, | |
4556 | 148 const dim_vector& dimensions) |
149 { | |
150 return ::compute_index (ra_idx, dimensions); | |
151 } | |
152 | |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7113
diff
changeset
|
153 boolNDArray |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7113
diff
changeset
|
154 boolNDArray::diag (octave_idx_type k) const |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7113
diff
changeset
|
155 { |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
9612
diff
changeset
|
156 return Array<bool>::diag (k); |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7113
diff
changeset
|
157 } |
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7113
diff
changeset
|
158 |
9550
3d6a9aea2aea
refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents:
9548
diff
changeset
|
159 NDND_BOOL_OPS (boolNDArray, boolNDArray) |
9578
7dafdb8b062f
refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents:
9550
diff
changeset
|
160 NDND_CMP_OPS (boolNDArray, boolNDArray) |
4543 | 161 |
9550
3d6a9aea2aea
refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents:
9548
diff
changeset
|
162 NDS_BOOL_OPS (boolNDArray, bool) |
9578
7dafdb8b062f
refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents:
9550
diff
changeset
|
163 NDS_CMP_OPS (boolNDArray, bool) |
4669 | 164 |
9550
3d6a9aea2aea
refactor binary & bool ops in liboctave
Jaroslav Hajek <highegg@gmail.com>
parents:
9548
diff
changeset
|
165 SND_BOOL_OPS (bool, boolNDArray) |
9578
7dafdb8b062f
refactor comparison ops implementations
Jaroslav Hajek <highegg@gmail.com>
parents:
9550
diff
changeset
|
166 SND_CMP_OPS (bool, boolNDArray) |
4669 | 167 |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
168 boolNDArray& |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
169 mx_el_and_assign (boolNDArray& a, const boolNDArray& b) |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
170 { |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
171 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9607
diff
changeset
|
172 a = mx_el_and (a, b); |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
173 else |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9607
diff
changeset
|
174 do_mm_inplace_op<boolNDArray, boolNDArray> (a, b, mx_inline_and2, "operator &="); |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
175 |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
176 return a; |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
177 } |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
178 |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
179 boolNDArray& |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
180 mx_el_or_assign (boolNDArray& a, const boolNDArray& b) |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
181 { |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
182 if (a.is_shared ()) |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9607
diff
changeset
|
183 a = mx_el_or (a, b); |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
184 else |
9612
66970dd627f6
further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents:
9607
diff
changeset
|
185 do_mm_inplace_op<boolNDArray, boolNDArray> (a, b, mx_inline_or2, "operator |="); |
9548
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
186 |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
187 return a; |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
188 } |
e5f7aee2ab8c
optimize &=, |= operators
Jaroslav Hajek <highegg@gmail.com>
parents:
9227
diff
changeset
|
189 |
9743
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
190 BSXFUN_OP_DEF_MXLOOP (and, boolNDArray, mx_inline_and) |
26abff55f6fe
optimize bsxfun for common built-in operations
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
191 BSXFUN_OP_DEF_MXLOOP (or, boolNDArray, mx_inline_or) |