annotate liboctave/array/MArray.cc @ 30564:796f54d4ddbf stable

update Octave Project Developers copyright for the new year In files that have the "Octave Project Developers" copyright notice, update for 2021. In all .txi and .texi files except gpl.txi and gpl.texi in the doc/liboctave and doc/interpreter directories, change the copyright to "Octave Project Developers", the same as used for other source files. Update copyright notices for 2022 (not done since 2019). For gpl.txi and gpl.texi, change the copyright notice to be "Free Software Foundation, Inc." and leave the date at 2007 only because this file only contains the text of the GPL, not anything created by the Octave Project Developers. Add Paul Thomas to contributors.in.
author John W. Eaton <jwe@octave.org>
date Tue, 28 Dec 2021 18:22:40 -0500
parents bd67d0045e21
children e7fc6251b698
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
2 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30489
diff changeset
3 // Copyright (C) 1993-2022 The Octave Project Developers
27923
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27919
diff changeset
24 ////////////////////////////////////////////////////////////////////////
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
25
21690
b6a686543080 Only include config.h in files that are compiled separately.
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
26 // This file should not include config.h. It is only included in other
b6a686543080 Only include config.h in files that are compiled separately.
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
27 // C++ source files that should have included config.h before including
b6a686543080 Only include config.h in files that are compiled separately.
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
28 // this file.
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
29
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
30 #include "MArray.h"
4669
334a27c8f453 [project @ 2003-11-26 07:02:42 by jwe]
jwe
parents: 4646
diff changeset
31 #include "Array-util.h"
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
32 #include "lo-error.h"
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
33
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
34 template <typename T>
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
35 class _idxadds_helper
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
36 {
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
37 public:
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
38 _idxadds_helper (T *a, T v) : m_array (a), m_val (v) { }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
39
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
40 void operator () (octave_idx_type i)
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
41 { m_array[i] += m_val; }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
42
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
43 private:
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
44 T *m_array;
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
45 T m_val;
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
46 };
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
47
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
48 template <typename T>
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
49 class _idxadda_helper
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
50 {
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
51 public:
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
52 _idxadda_helper (T *a, const T *v) : m_array (a), m_vals (v) { }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
53
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
54 void operator () (octave_idx_type i)
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
55 { m_array[i] += *m_vals++; }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
56
30164
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
57 private:
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
58 T *m_array;
aedebbc6b765 maint: Convert structs _idxadds_helpe, _idxadda_helper to classes.
Rik <rik@octave.org>
parents: 30155
diff changeset
59 const T *m_vals;
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
60 };
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
61
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
62 template <typename T>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
63 void
29569
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
64 MArray<T>::idx_add (const octave::idx_vector& idx, T val)
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 5307
diff changeset
65 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
66 octave_idx_type n = this->numel ();
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
67 octave_idx_type ext = idx.extent (n);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
68 if (ext > n)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
69 {
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
70 this->resize1 (ext);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
71 n = ext;
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
72 }
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 5307
diff changeset
73
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
74 octave_quit ();
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
75
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
76 octave_idx_type len = idx.length (n);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
77 idx.loop (len, _idxadds_helper<T> (this->fortran_vec (), val));
6508
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 5307
diff changeset
78 }
184ab67c3bc1 [project @ 2007-04-07 00:43:09 by jwe]
jwe
parents: 5307
diff changeset
79
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
80 template <typename T>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
81 void
29569
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
82 MArray<T>::idx_add (const octave::idx_vector& idx, const MArray<T>& vals)
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
83 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
84 octave_idx_type n = this->numel ();
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
85 octave_idx_type ext = idx.extent (n);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
86 if (ext > n)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
87 {
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
88 this->resize1 (ext);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
89 n = ext;
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
90 }
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
91
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
92 octave_quit ();
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
93
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
94 octave_idx_type len = std::min (idx.length (n), vals.numel ());
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
95 idx.loop (len, _idxadda_helper<T> (this->fortran_vec (), vals.data ()));
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
96 }
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
97
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
98 template <typename T, T op (typename ref_param<T>::type,
22402
4caa7b28d183 maint: Style check C++ code in liboctave/
Rik <rik@octave.org>
parents: 22323
diff changeset
99 typename ref_param<T>::type)>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
100 struct _idxbinop_helper
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
101 {
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
102 public:
30165
5933cf5415c4 maint: use "m_" prefix for member variables in class _idxbinop_helper.
Rik <rik@octave.org>
parents: 30164
diff changeset
103 _idxbinop_helper (T *a, const T *v) : m_array (a), m_vals (v) { }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
104
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
105 void operator () (octave_idx_type i)
30165
5933cf5415c4 maint: use "m_" prefix for member variables in class _idxbinop_helper.
Rik <rik@octave.org>
parents: 30164
diff changeset
106 { m_array[i] = op (m_array[i], *m_vals++); }
30155
14b098a6ba46 maint: Use public: qualifier in structs that are really classes.
Rik <rik@octave.org>
parents: 29569
diff changeset
107
30165
5933cf5415c4 maint: use "m_" prefix for member variables in class _idxbinop_helper.
Rik <rik@octave.org>
parents: 30164
diff changeset
108 private:
5933cf5415c4 maint: use "m_" prefix for member variables in class _idxbinop_helper.
Rik <rik@octave.org>
parents: 30164
diff changeset
109 T *m_array;
5933cf5415c4 maint: use "m_" prefix for member variables in class _idxbinop_helper.
Rik <rik@octave.org>
parents: 30164
diff changeset
110 const T *m_vals;
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
111 };
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
112
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
113 template <typename T>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
114 void
29569
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
115 MArray<T>::idx_min (const octave::idx_vector& idx, const MArray<T>& vals)
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
116 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
117 octave_idx_type n = this->numel ();
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
118 octave_idx_type ext = idx.extent (n);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
119 if (ext > n)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
120 {
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
121 this->resize1 (ext);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
122 n = ext;
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
123 }
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
124
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
125 octave_quit ();
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
126
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
127 octave_idx_type len = std::min (idx.length (n), vals.numel ());
22117
9b832e9caae6 define forwarding functions for octave_int<T> xmin and xmax (bug #48139)
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
128 idx.loop (len, _idxbinop_helper<T, octave::math::min> (this->fortran_vec (),
9b832e9caae6 define forwarding functions for octave_int<T> xmin and xmax (bug #48139)
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
129 vals.data ()));
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
130 }
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
131
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
132 template <typename T>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
133 void
29569
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
134 MArray<T>::idx_max (const octave::idx_vector& idx, const MArray<T>& vals)
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
135 {
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
136 octave_idx_type n = this->numel ();
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
137 octave_idx_type ext = idx.extent (n);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
138 if (ext > n)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
139 {
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
140 this->resize1 (ext);
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
141 n = ext;
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
142 }
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
143
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
144 octave_quit ();
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
145
20232
a9574e3c6e9e Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents: 20218
diff changeset
146 octave_idx_type len = std::min (idx.length (n), vals.numel ());
22117
9b832e9caae6 define forwarding functions for octave_int<T> xmin and xmax (bug #48139)
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
147 idx.loop (len, _idxbinop_helper<T, octave::math::max> (this->fortran_vec (),
9b832e9caae6 define forwarding functions for octave_int<T> xmin and xmax (bug #48139)
John W. Eaton <jwe@octave.org>
parents: 22022
diff changeset
148 vals.data ()));
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
149 }
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
150
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
151 template <typename T>
29569
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
152 void MArray<T>::idx_add_nd (const octave::idx_vector& idx,
29a1f8fd8ee6 move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
153 const MArray<T>& vals, int dim)
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
154 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
155 int nd = std::max (this->ndims (), vals.ndims ());
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
156 if (dim < 0)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
157 dim = vals.dims ().first_non_singleton ();
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
158 else if (dim > nd)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
159 nd = dim;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
160
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
161 // Check dimensions.
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
162 dim_vector ddv = Array<T>::dims ().redim (nd);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
163 dim_vector sdv = vals.dims ().redim (nd);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
164
20218
b2100e1659ac maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents: 19697
diff changeset
165 octave_idx_type ext = idx.extent (ddv(dim));
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
166
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
167 if (ext > ddv(dim))
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
168 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
169 ddv(dim) = ext;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
170 Array<T>::resize (ddv);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
171 ext = ddv(dim);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
172 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
173
30394
f3f3e3793fb5 maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents: 30165
diff changeset
174 octave_idx_type l, n, u, ns;
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
175 get_extent_triplet (ddv, dim, l, n, u);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
176 ns = sdv(dim);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
177
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
178 sdv(dim) = ddv(dim) = 0;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
179 if (ddv != sdv)
21136
7cac4e7458f2 maint: clean up code around calls to current_liboctave_error_handler.
Rik <rik@octave.org>
parents: 20960
diff changeset
180 (*current_liboctave_error_handler) ("accumdim: dimension mismatch");
10396
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
181
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
182 T *dst = Array<T>::fortran_vec ();
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
183 const T *src = vals.data ();
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
184 octave_idx_type len = idx.length (ns);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
185
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
186 if (l == 1)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
187 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
188 for (octave_idx_type j = 0; j < u; j++)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
189 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
190 octave_quit ();
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
191
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
192 idx.loop (len, _idxadda_helper<T> (dst + j*n, src + j*ns));
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
193 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
194 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
195 else
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
196 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
197 for (octave_idx_type j = 0; j < u; j++)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
198 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
199 octave_quit ();
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
200 for (octave_idx_type i = 0; i < len; i++)
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
201 {
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
202 octave_idx_type k = idx(i);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
203
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
204 mx_inline_add2 (l, dst + l*k, src + l*i);
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
205 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
206
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
207 dst += l*n;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
208 src += l*ns;
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
209 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
210 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
211 }
a0b51ac0f88a optimize accumdim with summation
Jaroslav Hajek <highegg@gmail.com>
parents: 10362
diff changeset
212
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
213 // N-dimensional array with math ops.
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
214 template <typename T>
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
215 void
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
216 MArray<T>::changesign (void)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
217 {
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
218 if (Array<T>::is_shared ())
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
219 *this = - *this;
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
220 else
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
221 do_mx_inplace_op<T> (*this, mx_inline_uminus2);
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
222 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
223
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
224 // Element by element MArray by scalar ops.
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
225
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
226 template <typename T>
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
227 MArray<T>&
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
228 operator += (MArray<T>& a, const T& s)
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
229 {
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
230 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
231 a = a + s;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
232 else
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
233 do_ms_inplace_op<T, T> (a, s, mx_inline_add2);
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
234 return a;
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
235 }
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
236
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
237 template <typename T>
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
238 MArray<T>&
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
239 operator -= (MArray<T>& a, const T& s)
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
240 {
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
241 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
242 a = a - s;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
243 else
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
244 do_ms_inplace_op<T, T> (a, s, mx_inline_sub2);
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
245 return a;
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
246 }
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
247
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
248 template <typename T>
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
249 MArray<T>&
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
250 operator *= (MArray<T>& a, const T& s)
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
251 {
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
252 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
253 a = a * s;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
254 else
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
255 do_ms_inplace_op<T, T> (a, s, mx_inline_mul2);
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
256 return a;
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
257 }
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
258
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
259 template <typename T>
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
260 MArray<T>&
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
261 operator /= (MArray<T>& a, const T& s)
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
262 {
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
263 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
264 a = a / s;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
265 else
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
266 do_ms_inplace_op<T, T> (a, s, mx_inline_div2);
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
267 return a;
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
268 }
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
269
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
270 // Element by element MArray by MArray ops.
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
271
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
272 template <typename T>
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
273 MArray<T>&
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
274 operator += (MArray<T>& a, const MArray<T>& b)
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
275 {
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
276 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
277 a = a + b;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
278 else
13139
aa4a23337a0f Enable BSX in-place for missing assignment operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 13004
diff changeset
279 do_mm_inplace_op<T, T> (a, b, mx_inline_add2, mx_inline_add2, "+=");
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
280 return a;
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
281 }
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
282
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
283 template <typename T>
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
284 MArray<T>&
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
285 operator -= (MArray<T>& a, const MArray<T>& b)
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
286 {
9546
1beb23d2b892 optimize op= in common cases
Jaroslav Hajek <highegg@gmail.com>
parents: 8934
diff changeset
287 if (a.is_shared ())
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
288 a = a - b;
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
289 else
13139
aa4a23337a0f Enable BSX in-place for missing assignment operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 13004
diff changeset
290 do_mm_inplace_op<T, T> (a, b, mx_inline_sub2, mx_inline_sub2, "-=");
1230
92609e161b29 [project @ 1995-04-10 01:08:57 by jwe]
jwe
parents: 1213
diff changeset
291 return a;
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
292 }
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
293
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
294 template <typename T>
9557
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
295 MArray<T>&
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
296 product_eq (MArray<T>& a, const MArray<T>& b)
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
297 {
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
298 if (a.is_shared ())
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
299 return a = product (a, b);
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
300 else
13139
aa4a23337a0f Enable BSX in-place for missing assignment operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 13004
diff changeset
301 do_mm_inplace_op<T, T> (a, b, mx_inline_mul2, mx_inline_mul2, ".*=");
9557
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
302 return a;
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
303 }
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
304
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
305 template <typename T>
9557
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
306 MArray<T>&
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
307 quotient_eq (MArray<T>& a, const MArray<T>& b)
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
308 {
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
309 if (a.is_shared ())
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
310 return a = quotient (a, b);
9612
66970dd627f6 further liboctave design improvements
Jaroslav Hajek <highegg@gmail.com>
parents: 9557
diff changeset
311 else
13139
aa4a23337a0f Enable BSX in-place for missing assignment operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 13004
diff changeset
312 do_mm_inplace_op<T, T> (a, b, mx_inline_div2, mx_inline_div2, "./=");
9557
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
313 return a;
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
314 }
3a1dd361f978 optimize .*=, ./= operators
Jaroslav Hajek <highegg@gmail.com>
parents: 9546
diff changeset
315
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
316 // Element by element MArray by scalar ops.
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
317
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
318 #define MARRAY_NDS_OP(OP, FN) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
319 template <typename T> \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
320 MArray<T> \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
321 operator OP (const MArray<T>& a, const T& s) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
322 { \
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
323 return do_ms_binary_op<T, T, T> (a, s, FN); \
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
324 }
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
325
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
326 MARRAY_NDS_OP (+, mx_inline_add)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
327 MARRAY_NDS_OP (-, mx_inline_sub)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
328 MARRAY_NDS_OP (*, mx_inline_mul)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
329 MARRAY_NDS_OP (/, mx_inline_div)
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
330
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
331 // Element by element scalar by MArray ops.
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
332
22197
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
333 #define MARRAY_SND_OP(OP, FN) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
334 template <typename T> \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
335 MArray<T> \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
336 operator OP (const T& s, const MArray<T>& a) \
e43d83253e28 refill multi-line macro definitions
John W. Eaton <jwe@octave.org>
parents: 22117
diff changeset
337 { \
10362
b47ab50a6aa8 simplify appliers in mx-inlines.cc
Jaroslav Hajek <highegg@gmail.com>
parents: 10350
diff changeset
338 return do_sm_binary_op<T, T, T> (s, a, FN); \
3504
5eef8a2294bd [project @ 2000-02-01 10:06:51 by jwe]
jwe
parents: 2847
diff changeset
339 }
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
340
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
341 MARRAY_SND_OP (+, mx_inline_add)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
342 MARRAY_SND_OP (-, mx_inline_sub)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
343 MARRAY_SND_OP (*, mx_inline_mul)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
344 MARRAY_SND_OP (/, mx_inline_div)
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
345
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
346 // Element by element MArray by MArray ops.
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
347
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
348 #define MARRAY_NDND_OP(FCN, OP, FN) \
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
349 template <typename T> \
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
350 MArray<T> \
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
351 FCN (const MArray<T>& a, const MArray<T>& b) \
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
352 { \
13004
d9d65c3017c3 Make bsxfun automatic for most binary operators.
Jordi Gutiérrez Hermoso <jordigh@gmail.com>
parents: 11586
diff changeset
353 return do_mm_binary_op<T, T, T> (a, b, FN, FN, FN, #FCN); \
1213
9689615b34f2 [project @ 1995-04-06 02:25:15 by jwe]
jwe
parents: 1192
diff changeset
354 }
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
355
10350
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
356 MARRAY_NDND_OP (operator +, +, mx_inline_add)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
357 MARRAY_NDND_OP (operator -, -, mx_inline_sub)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
358 MARRAY_NDND_OP (product, *, mx_inline_mul)
12884915a8e4 merge MArray classes & improve Array interface
Jaroslav Hajek <highegg@gmail.com>
parents: 10158
diff changeset
359 MARRAY_NDND_OP (quotient, /, mx_inline_div)
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
360
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
361 template <typename T>
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
362 MArray<T>
3574
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
363 operator + (const MArray<T>& a)
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
364 {
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
365 return a;
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
366 }
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
367
21139
538b57866b90 consistently use "typename" intead of "class" in template declarations
John W. Eaton <jwe@octave.org>
parents: 21136
diff changeset
368 template <typename T>
3574
787bb9d8f60e [project @ 2000-02-04 10:13:23 by jwe]
jwe
parents: 3573
diff changeset
369 MArray<T>
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
370 operator - (const MArray<T>& a)
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
371 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
372 return do_mx_unary_op<T, T> (a, mx_inline_uminus);
237
5a9e23307fb0 [project @ 1993-11-30 20:23:04 by jwe]
jwe
parents:
diff changeset
373 }
29247
d83ae0145030 Export template class instantiations with clang (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27923
diff changeset
374
30489
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
375 template <typename T>
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
376 void MArray<T>::instantiation_guard ()
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
377 {
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
378 // This guards against accidental implicit instantiations.
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
379 // Array<T, Alloc> instances should always be explicit and use INSTANTIATE_ARRAY.
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
380 T::__xXxXx__ ();
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
381 }
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
382
29247
d83ae0145030 Export template class instantiations with clang (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27923
diff changeset
383 #if defined (__clang__)
30489
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
384 # define INSTANTIATE_MARRAY(T, API) \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
385 template <> API void \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
386 MArray<T>::instantiation_guard () { } \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
387 \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
388 template class API MArray<T>
29247
d83ae0145030 Export template class instantiations with clang (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27923
diff changeset
389 #else
30489
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
390 # define INSTANTIATE_MARRAY(T, API) \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
391 template <> API void \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
392 MArray<T>::instantiation_guard () { } \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
393 \
bd67d0045e21 use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents: 30394
diff changeset
394 template class MArray<T>
29247
d83ae0145030 Export template class instantiations with clang (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents: 27923
diff changeset
395 #endif