Mercurial > octave
annotate liboctave/array/Range.h @ 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 | 2989202f92f8 |
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 //////////////////////////////////////////////////////////////////////// |
3 | 25 |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20513
diff
changeset
|
26 #if ! defined (octave_Range_h) |
382 | 27 #define octave_Range_h 1 |
28 | |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21221
diff
changeset
|
29 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21221
diff
changeset
|
30 |
8950
d865363208d6
include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents:
8920
diff
changeset
|
31 #include <iosfwd> |
7458 | 32 |
30429
e38202d3628d
provide header file for forward declaration of Array<T> template
John W. Eaton <jwe@octave.org>
parents:
30420
diff
changeset
|
33 #include "Array-fwd.h" |
4810 | 34 #include "dMatrix.h" |
28004
403df0b32204
update out_of_range error messages
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
35 #include "dim-vector.h" |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
36 #include "lo-error.h" |
7458 | 37 #include "oct-sort.h" |
30489
bd67d0045e21
use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents:
30429
diff
changeset
|
38 #include "range-fwd.h" |
3 | 39 |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
40 namespace octave |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
41 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
42 template <typename T> |
30489
bd67d0045e21
use separate files for MArray, intNDArray, and range template forward decls
John W. Eaton <jwe@octave.org>
parents:
30429
diff
changeset
|
43 class range |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
44 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
45 public: |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
46 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
47 range (void) |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
48 : m_base (0), m_increment (0), m_limit (0), m_final (0), m_numel (0), |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
49 m_reverse (false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
50 { } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
51 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
52 // LIMIT is an upper limit and may be outside the range of actual |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
53 // values. For floating point ranges, we perform a tolerant check |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
54 // to attempt to capture limit in the set of values if it is "close" |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
55 // to the value of base + a multiple of the increment. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
56 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
57 range (const T& base, const T& increment, const T& limit, |
30420
366aa563dd2e
style fixes for Range.h and Range.cc
John W. Eaton <jwe@octave.org>
parents:
30416
diff
changeset
|
58 bool reverse = false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
59 : m_base (base), m_increment (increment), m_limit (limit), |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
60 m_final (), m_numel (), m_reverse (reverse) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
61 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
62 init (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
63 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
64 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
65 range (const T& base, const T& limit) |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
66 : m_base (base), m_increment (1), m_limit (limit), m_final (), m_numel (), |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
67 m_reverse (false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
68 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
69 init (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
70 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
71 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
72 // Allow conversion from (presumably) properly constructed Range |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
73 // objects and to create constant ranges (see the static |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
74 // make_constant method). The values of base, limit, increment, |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
75 // and numel must be consistent. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
76 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
77 // FIXME: Actually check that base, limit, increment, and numel are |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
78 // consistent. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
79 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
80 // FIXME: Is there a way to limit this to T == double? |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
81 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
82 range (const T& base, const T& increment, const T& limit, |
30420
366aa563dd2e
style fixes for Range.h and Range.cc
John W. Eaton <jwe@octave.org>
parents:
30416
diff
changeset
|
83 octave_idx_type numel, bool reverse = false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
84 : m_base (base), m_increment (increment), m_limit (limit), |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
85 m_final (limit), m_numel (numel), m_reverse (reverse) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
86 { } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
87 |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
88 range (const T& base, const T& increment, const T& limit, |
30420
366aa563dd2e
style fixes for Range.h and Range.cc
John W. Eaton <jwe@octave.org>
parents:
30416
diff
changeset
|
89 const T& final, octave_idx_type numel, bool reverse = false) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
90 : m_base (base), m_increment (increment), m_limit (limit), |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
91 m_final (final), m_numel (numel), m_reverse (reverse) |
28639
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
92 { } |
7ebe185e3818
new octave_value constructors for integer and float ranges.
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
93 |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
94 // We don't use a constructor for this because it will conflict with |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
95 // range<T> (base, limit) when T is octave_idx_type. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
96 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
97 static range<T> make_constant (const T& base, octave_idx_type numel, |
30420
366aa563dd2e
style fixes for Range.h and Range.cc
John W. Eaton <jwe@octave.org>
parents:
30416
diff
changeset
|
98 bool reverse = false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
99 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
100 // We could just make this constructor public, but it allows |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
101 // inconsistent ranges to be constructed. And it is probably much |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
102 // clearer to see "make_constant" instead of puzzling over the |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
103 // purpose of this strange constructor form. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
104 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
105 return range<T> (base, T (), base, numel, reverse); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
106 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
107 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
108 // We don't use a constructor for this because it will conflict with |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
109 // range<T> (base, limit, increment) when T is octave_idx_type. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
110 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
111 static range<T> make_n_element_range (const T& base, const T& increment, |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
112 octave_idx_type numel, |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
113 bool reverse = false) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
114 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
115 // We could just make this constructor public, but it allows |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
116 // inconsistent ranges to be constructed. And it is probably much |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
117 // clearer to see "make_constant" instead of puzzling over the |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
118 // purpose of this strange constructor form. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
119 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
120 T final_val = (reverse ? base - (numel - 1) * increment |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
121 : base + (numel - 1) * increment); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
122 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
123 return range<T> (base, increment, final_val, numel, reverse); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
124 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
125 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
126 range (const range<T>&) = default; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
127 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
128 range<T>& operator = (const range<T>&) = default; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
129 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
130 ~range (void) = default; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
131 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
132 T base (void) const { return m_base; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
133 T increment (void) const { return m_increment; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
134 T limit (void) const { return m_limit; } |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
135 bool reverse (void) const { return m_reverse; } |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
136 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
137 T final_value (void) const { return m_final; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
138 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
139 T min (void) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
140 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
141 return (m_numel > 0 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
142 ? ((m_reverse ? m_increment > T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
143 : m_increment > T (0)) ? base () : final_value ()) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
144 : T (0)); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
145 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
146 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
147 T max (void) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
148 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
149 return (m_numel > 0 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
150 ? ((m_reverse ? m_increment < T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
151 : m_increment > T (0)) ? final_value () : base ()) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
152 : T (0)); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
153 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
154 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
155 octave_idx_type numel (void) const { return m_numel; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
156 |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
157 // To support things like "for i = 1:Inf; ...; end" that are |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
158 // required for Matlab compatibility, creation of a range object |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
159 // like 1:Inf is allowed with m_numel set to |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
160 // numeric_limits<octave_idx_type>::max(). However, it is not |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
161 // possible to store these ranges. The following function allows |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
162 // us to easily distinguish ranges with an infinite number of |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
163 // elements. There are specializations for double and float. |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
164 |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
165 bool is_storable (void) const { return true; } |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
166 |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
167 dim_vector dims (void) const { return dim_vector (1, m_numel); } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
168 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
169 octave_idx_type rows (void) const { return 1; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
170 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
171 octave_idx_type cols (void) const { return numel (); } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
172 octave_idx_type columns (void) const { return numel (); } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
173 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
174 bool isempty (void) const { return numel () == 0; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
175 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
176 bool all_elements_are_ints (void) const { return true; } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
177 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
178 sortmode issorted (sortmode mode = ASCENDING) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
179 { |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
180 if (m_numel > 1 && (m_reverse ? m_increment < T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
181 : m_increment > T (0))) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
182 mode = ((mode == DESCENDING) ? UNSORTED : ASCENDING); |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
183 else if (m_numel > 1 && (m_reverse ? m_increment > T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
184 : m_increment < T (0))) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
185 mode = ((mode == ASCENDING) ? UNSORTED : DESCENDING); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
186 else |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
187 mode = ((mode == UNSORTED) ? ASCENDING : mode); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
188 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
189 return mode; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
190 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
191 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
192 OCTAVE_API octave_idx_type nnz (void) const; |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
193 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
194 // Support for single-index subscripting, without generating matrix cache. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
195 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
196 T checkelem (octave_idx_type i) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
197 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
198 if (i < 0 || i >= m_numel) |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28646
diff
changeset
|
199 err_index_out_of_range (2, 2, i+1, m_numel, dims ()); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
200 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
201 if (i == 0) |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
202 // Required for proper NaN handling. |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
203 return (m_numel == 1 ? final_value () : m_base); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
204 else if (i < m_numel - 1) |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
205 return (m_reverse ? m_base + T (i) * m_increment |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
206 : m_base + T (i) * m_increment); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
207 else |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
208 return final_value (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
209 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
210 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
211 T checkelem (octave_idx_type i, octave_idx_type j) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
212 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
213 // Ranges are *always* row vectors. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
214 if (i != 0) |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28646
diff
changeset
|
215 err_index_out_of_range (1, 1, i+1, m_numel, dims ()); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
216 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
217 return checkelem (j); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
218 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
219 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
220 T elem (octave_idx_type i) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
221 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
222 if (i == 0) |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
223 // Required for proper NaN handling. |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
224 return (m_numel == 1 ? final_value () : m_base); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
225 else if (i < m_numel - 1) |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
226 return (m_reverse ? m_base - T (i) * m_increment |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
227 : m_base + T (i) * m_increment); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
228 else |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
229 return final_value (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
230 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
231 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
232 T elem (octave_idx_type /* i */, octave_idx_type j) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
233 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
234 return elem (j); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
235 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
236 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
237 T operator () (octave_idx_type i) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
238 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
239 return elem (i); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
240 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
241 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
242 T operator () (octave_idx_type i, octave_idx_type j) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
243 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
244 return elem (i, j); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
245 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
246 |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
247 Array<T> index (const idx_vector& idx) const |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
248 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
249 Array<T> retval; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
250 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
251 octave_idx_type n = m_numel; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
252 |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
253 if (idx.is_colon ()) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
254 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
255 retval = array_value ().reshape (dim_vector (m_numel, 1)); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
256 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
257 else |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
258 { |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
259 if (idx.extent (n) != n) |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
260 err_index_out_of_range (1, 1, idx.extent (n), n, dims ()); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
261 |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
262 dim_vector idx_dims = idx.orig_dimensions (); |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
263 octave_idx_type idx_len = idx.length (n); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
264 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
265 // taken from Array.cc. |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
266 if (n != 1 && idx_dims.isvector ()) |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
267 idx_dims = dim_vector (1, idx_len); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
268 |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
269 retval.clear (idx_dims); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
270 |
30189
41eecdf76372
* Range.h, Range.cc: Fix comments missed in previous change.
John W. Eaton <jwe@octave.org>
parents:
30188
diff
changeset
|
271 // Loop over all values in IDX, executing the lambda |
41eecdf76372
* Range.h, Range.cc: Fix comments missed in previous change.
John W. Eaton <jwe@octave.org>
parents:
30188
diff
changeset
|
272 // expression for each index value. |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
273 |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
274 T *array = retval.fortran_vec (); |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
275 |
30394
f3f3e3793fb5
maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
30392
diff
changeset
|
276 idx.loop (n, [=, &array] (octave_idx_type i) |
f3f3e3793fb5
maint: style check C++ files in liboctave/ ahead of 7.1 release.
Rik <rik@octave.org>
parents:
30392
diff
changeset
|
277 { |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
278 if (i == 0) |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
279 // Required for proper NaN handling. |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
280 *array++ = (m_numel == 0 ? m_final : m_base); |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
281 else if (i < m_numel - 1) |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
282 *array++ = (m_reverse ? m_base - T (i) * m_increment |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
283 : m_base + T (i) * m_increment); |
30188
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
284 else |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
285 *array++ = m_final; |
e424d966dca7
replace rangeidx helper classes with lambda expressions
John W. Eaton <jwe@octave.org>
parents:
29954
diff
changeset
|
286 }); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
287 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
288 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
289 return retval; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
290 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
291 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
292 Array<T> diag (octave_idx_type k) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
293 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
294 return array_value ().diag (k); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
295 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
296 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
297 Array<T> array_value (void) const |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
298 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
299 octave_idx_type nel = numel (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
300 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
301 Array<T> retval (dim_vector (1, nel)); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
302 |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
303 if (nel == 1) |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
304 // Required for proper NaN handling. |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
305 retval(0) = final_value (); |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
306 else if (nel > 1) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
307 { |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
308 // The first element must always be *exactly* the base. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
309 // E.g, -0 would otherwise become +0 in the loop (-0 + 0*increment). |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
310 retval(0) = m_base; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
311 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
312 if (m_reverse) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
313 for (octave_idx_type i = 1; i < nel - 1; i++) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
314 retval.xelem (i) = m_base - i * m_increment; |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
315 else |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
316 for (octave_idx_type i = 1; i < nel - 1; i++) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
317 retval.xelem (i) = m_base + i * m_increment; |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
318 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
319 retval.xelem (nel - 1) = final_value (); |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
320 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
321 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
322 return retval; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
323 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
324 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
325 private: |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
326 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
327 T m_base; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
328 T m_increment; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
329 T m_limit; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
330 T m_final; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
331 octave_idx_type m_numel; |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
332 bool m_reverse; |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
333 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
334 // Setting the number of elements to zero when the increment is zero |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
335 // is intentional and matches the behavior of Matlab's colon |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
336 // operator. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
337 |
29352
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
338 // These calculations are appropriate for integer ranges. There are |
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
339 // specializations for double and float. |
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
340 |
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
341 void init (void) |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
342 { |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
343 if (m_reverse) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
344 { |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
345 m_numel = ((m_increment == T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
346 || (m_limit > m_base && m_increment > T (0)) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
347 || (m_limit < m_base && m_increment < T (0))) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
348 ? T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
349 : (m_base - m_limit - m_increment) / m_increment); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
350 |
30416
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
351 m_final = m_base - (m_numel - 1) * m_increment; |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
352 } |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
353 else |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
354 { |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
355 m_numel = ((m_increment == T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
356 || (m_limit > m_base && m_increment < T (0)) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
357 || (m_limit < m_base && m_increment > T (0))) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
358 ? T (0) |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
359 : (m_limit - m_base + m_increment) / m_increment); |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
360 |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
361 m_final = m_base + (m_numel - 1) * m_increment; |
4736bc8e9804
Allow descending ranges of all integer types (bug #61132).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30405
diff
changeset
|
362 } |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
363 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
364 }; |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
365 |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
366 // Specializations defined externally. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
367 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
368 template <> OCTAVE_API bool range<double>::all_elements_are_ints (void) const; |
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
369 template <> OCTAVE_API bool range<float>::all_elements_are_ints (void) const; |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
370 |
29352
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
371 template <> OCTAVE_API void range<double>::init (void); |
03c283f73b9a
specialize range<T>::init instead of defining get_numel and get_final_value
John W. Eaton <jwe@octave.org>
parents:
29351
diff
changeset
|
372 template <> OCTAVE_API void range<float>::init (void); |
30405
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
373 template <> OCTAVE_API void range<octave_int8>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
374 template <> OCTAVE_API void range<octave_int16>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
375 template <> OCTAVE_API void range<octave_int32>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
376 template <> OCTAVE_API void range<octave_int64>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
377 template <> OCTAVE_API void range<octave_uint8>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
378 template <> OCTAVE_API void range<octave_uint16>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
379 template <> OCTAVE_API void range<octave_uint32>::init (void); |
20cefb3b0da6
range: Use specialization of init function for octave_int<T> types (bug #61300).
Markus Mützel <markus.muetzel@gmx.de>
parents:
30394
diff
changeset
|
380 template <> OCTAVE_API void range<octave_uint64>::init (void); |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
381 |
29353
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
382 template <> OCTAVE_API bool range<double>::is_storable (void) const; |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
383 template <> OCTAVE_API bool range<float>::is_storable (void) const; |
715344f405f0
improve handling of nan, infinite value, and empty ranges (bug #59229)
John W. Eaton <jwe@octave.org>
parents:
29352
diff
changeset
|
384 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
385 template <> OCTAVE_API octave_idx_type range<double>::nnz (void) const; |
29351
326a7ca62c43
also define range<float>::nnz specialization
John W. Eaton <jwe@octave.org>
parents:
29226
diff
changeset
|
386 template <> OCTAVE_API octave_idx_type range<float>::nnz (void) const; |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
387 } |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
388 |
1860 | 389 class |
390 Range | |
3 | 391 { |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
392 public: |
1860 | 393 |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
394 #if defined (OCTAVE_PROVIDE_DEPRECATED_SYMBOLS) |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28637
diff
changeset
|
395 OCTAVE_DEPRECATED (7, "use the 'octave::range<double>' class instead") |
1528 | 396 Range (void) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
397 : m_base (0), m_limit (0), m_inc (0), m_numel (0) |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
398 { } |
1528 | 399 |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
400 // Assume range is already properly constructed, so just copy internal |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
401 // values. However, we set LIMIT to the computed final value because |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
402 // that mimics the behavior of the other Range class constructors that |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
403 // reset limit to the computed final value. |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
404 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28637
diff
changeset
|
405 OCTAVE_DEPRECATED (7, "use the 'octave::range<double>' class instead") |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
406 Range (const octave::range<double>& r) |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
407 : m_base (r.base ()), m_limit (r.final_value ()), m_inc (r.increment ()), |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
408 m_numel (r.numel ()) |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
409 { } |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
410 #endif |
1528 | 411 |
27023
fc256e9d882e
use default ctors, dtors, and assignment ops in Matrix, intNDArray, and Cell
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
412 Range (const Range& r) = default; |
fc256e9d882e
use default ctors, dtors, and assignment ops in Matrix, intNDArray, and Cell
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
413 |
fc256e9d882e
use default ctors, dtors, and assignment ops in Matrix, intNDArray, and Cell
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
414 Range& operator = (const Range& r) = default; |
fc256e9d882e
use default ctors, dtors, and assignment ops in Matrix, intNDArray, and Cell
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
415 |
fc256e9d882e
use default ctors, dtors, and assignment ops in Matrix, intNDArray, and Cell
John W. Eaton <jwe@octave.org>
parents:
26377
diff
changeset
|
416 ~Range (void) = default; |
3 | 417 |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
418 #if defined (OCTAVE_PROVIDE_DEPRECATED_SYMBOLS) |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28637
diff
changeset
|
419 OCTAVE_DEPRECATED (7, "use the 'octave::range<double>' class instead") |
1528 | 420 Range (double b, double l) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
421 : m_base (b), m_limit (l), m_inc (1), m_numel (numel_internal ()) |
20513 | 422 { |
28592
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
423 if (! octave::math::isinf (m_limit)) |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
424 m_limit = limit_internal (); |
20513 | 425 } |
1528 | 426 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28637
diff
changeset
|
427 OCTAVE_DEPRECATED (7, "use the 'octave::range<double>' class instead") |
1528 | 428 Range (double b, double l, double i) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
429 : m_base (b), m_limit (l), m_inc (i), m_numel (numel_internal ()) |
20513 | 430 { |
28592
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
431 if (! octave::math::isinf (m_limit)) |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
432 m_limit = limit_internal (); |
20513 | 433 } |
1528 | 434 |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
435 // NOTE: The following constructor may be deprecated and removed after |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
436 // the arithmetic operators are removed. |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
437 |
28635
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
438 // For operators' usage (to preserve element count) and to create |
b6371946f106
new template for range objects
John W. Eaton <jwe@octave.org>
parents:
28592
diff
changeset
|
439 // constant row vectors (obsolete usage). |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
440 |
28638
98192ec1621f
replace Range with range<double>
John W. Eaton <jwe@octave.org>
parents:
28637
diff
changeset
|
441 OCTAVE_DEPRECATED (7, "use the 'octave::range<double>' class instead") |
16169
0303fda3e929
Fix range behavior with -0 endpoints (bug #38423)
Rik <rik@octave.org>
parents:
15271
diff
changeset
|
442 Range (double b, double i, octave_idx_type n) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
443 : m_base (b), m_limit (b + (n-1) * i), m_inc (i), m_numel (n) |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
444 { |
28592
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
445 if (! octave::math::isinf (m_limit)) |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
446 m_limit = limit_internal (); |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
447 } |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
448 #endif |
8589
0131fa223dbc
make length invariant in range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8553
diff
changeset
|
449 |
28592
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
450 // The range has a finite number of elements. |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
451 bool ok (void) const |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
452 { |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
453 return (octave::math::isfinite (m_limit) |
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
454 && (m_numel >= 0 || m_numel == -2)); |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
455 } |
8589
0131fa223dbc
make length invariant in range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8553
diff
changeset
|
456 |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
457 double base (void) const { return m_base; } |
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
458 double limit (void) const { return m_limit; } |
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
459 double inc (void) const { return m_inc; } |
28636
a3db48e66ef8
use Range::increment instead of Range::inc
John W. Eaton <jwe@octave.org>
parents:
28635
diff
changeset
|
460 double increment (void) const { return m_inc; } |
21134
2e5c1f766ac9
provide replacement hints for deprecated C++ functions
John W. Eaton <jwe@octave.org>
parents:
21040
diff
changeset
|
461 |
28637
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
462 // We adjust the limit to be the final value, so return that. We |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
463 // could introduce a new variable to store the final value separately, |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
464 // but it seems like that would just add confusion. If we changed |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
465 // the meaning of the limit function, we would change the behavior of |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
466 // programs that expect limit to be the final value instead of the |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
467 // value of the limit when the range was created. This problem will |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
468 // be fixed with the new template range class. |
fb37f50d5ba8
new Range::final_value function
John W. Eaton <jwe@octave.org>
parents:
28636
diff
changeset
|
469 double final_value (void) const { return m_limit; } |
25812
fc74c8d2a584
Clean up liboctave Range implementation.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
470 |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
471 octave_idx_type numel (void) const { return m_numel; } |
25812
fc74c8d2a584
Clean up liboctave Range implementation.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
472 |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
473 dim_vector dims (void) const { return dim_vector (1, m_numel); } |
28004
403df0b32204
update out_of_range error messages
John W. Eaton <jwe@octave.org>
parents:
27923
diff
changeset
|
474 |
24780
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
475 octave_idx_type rows (void) const { return 1; } |
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
476 |
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
477 octave_idx_type cols (void) const { return numel (); } |
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
478 octave_idx_type columns (void) const { return numel (); } |
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
479 |
23577
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23564
diff
changeset
|
480 bool isempty (void) const { return numel () == 0; } |
80c42f4cca13
maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents:
23564
diff
changeset
|
481 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
482 OCTAVE_API bool all_elements_are_ints (void) const; |
2383 | 483 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
484 OCTAVE_API Matrix matrix_value (void) const; |
645 | 485 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
486 OCTAVE_API double min (void) const; |
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
487 OCTAVE_API double max (void) const; |
3 | 488 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
489 OCTAVE_API void sort_internal (bool ascending = true); |
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
490 OCTAVE_API void sort_internal (Array<octave_idx_type>& sidx, bool ascending = true); |
7458 | 491 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
492 OCTAVE_API Matrix diag (octave_idx_type k = 0) const; |
7620
36594d5bbe13
Move diag function into the octave_value class
David Bateman <dbateman@free.fr>
parents:
7463
diff
changeset
|
493 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
494 OCTAVE_API Range sort (octave_idx_type dim = 0, sortmode mode = ASCENDING) const; |
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
495 OCTAVE_API Range sort (Array<octave_idx_type>& sidx, octave_idx_type dim = 0, |
10312
cbc402e64d83
untabify liboctave header files
John W. Eaton <jwe@octave.org>
parents:
10158
diff
changeset
|
496 sortmode mode = ASCENDING) const; |
208 | 497 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
498 OCTAVE_API sortmode issorted (sortmode mode = ASCENDING) const; |
23588
0549061d35b9
maint: Deprecate is_sorted and replace with issorted.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
499 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
500 OCTAVE_API octave_idx_type nnz (void) const; |
24859
00ecff875f8a
Add nnz implementation for Range type (bug #53185).
maorshutman <maorus12@gmail.com>
parents:
24799
diff
changeset
|
501 |
9986
672e1b49e01e
optimize indexing of ranges by single subscripts
Jaroslav Hajek <highegg@gmail.com>
parents:
8971
diff
changeset
|
502 // Support for single-index subscripting, without generating matrix cache. |
672e1b49e01e
optimize indexing of ranges by single subscripts
Jaroslav Hajek <highegg@gmail.com>
parents:
8971
diff
changeset
|
503 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
504 OCTAVE_API double checkelem (octave_idx_type i) const; |
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
505 OCTAVE_API double checkelem (octave_idx_type i, octave_idx_type j) const; |
9986
672e1b49e01e
optimize indexing of ranges by single subscripts
Jaroslav Hajek <highegg@gmail.com>
parents:
8971
diff
changeset
|
506 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
507 OCTAVE_API double elem (octave_idx_type i) const; |
24799
74a596fd6bab
Fix unused variable warning in Range elem(i,j) function introduced in 0d21e2a1cdfc.
Rik <rik@octave.org>
parents:
24780
diff
changeset
|
508 double elem (octave_idx_type /* i */, octave_idx_type j) const |
74a596fd6bab
Fix unused variable warning in Range elem(i,j) function introduced in 0d21e2a1cdfc.
Rik <rik@octave.org>
parents:
24780
diff
changeset
|
509 { return elem (j); } |
9986
672e1b49e01e
optimize indexing of ranges by single subscripts
Jaroslav Hajek <highegg@gmail.com>
parents:
8971
diff
changeset
|
510 |
23487
af2f1f3dbe06
eliminate --enable-bounds-check configure option
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
511 double operator () (octave_idx_type i) const { return elem (i); } |
24780
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
512 double operator () (octave_idx_type i, octave_idx_type j) const |
0d21e2a1cdfc
new element access operators for Range objects
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
513 { return elem (i, j); } |
23487
af2f1f3dbe06
eliminate --enable-bounds-check configure option
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
514 |
29569
29a1f8fd8ee6
move idx_vector classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
515 OCTAVE_API Array<double> index (const octave::idx_vector& i) const; |
9986
672e1b49e01e
optimize indexing of ranges by single subscripts
Jaroslav Hajek <highegg@gmail.com>
parents:
8971
diff
changeset
|
516 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
517 OCTAVE_API void set_base (double b); |
4811 | 518 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
519 OCTAVE_API void set_limit (double l); |
4811 | 520 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
521 OCTAVE_API void set_inc (double i); |
1528 | 522 |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
523 friend OCTAVE_API std::ostream& operator << (std::ostream& os, |
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
524 const Range& r); |
6108 | 525 friend OCTAVE_API std::istream& operator >> (std::istream& is, Range& r); |
3 | 526 |
8971 | 527 friend OCTAVE_API Range operator - (const Range& r); |
528 friend OCTAVE_API Range operator + (double x, const Range& r); | |
529 friend OCTAVE_API Range operator + (const Range& r, double x); | |
530 friend OCTAVE_API Range operator - (double x, const Range& r); | |
531 friend OCTAVE_API Range operator - (const Range& r, double x); | |
532 friend OCTAVE_API Range operator * (double x, const Range& r); | |
533 friend OCTAVE_API Range operator * (const Range& r, double x); | |
534 | |
17769
49a5a4be04a1
maint: Use GNU style coding conventions for code in liboctave/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
535 private: |
1860 | 536 |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
537 double m_base; |
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
538 double m_limit; |
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
539 double m_inc; |
1860 | 540 |
28402
09a3c0e91e6e
style update for Range class
John W. Eaton <jwe@octave.org>
parents:
28004
diff
changeset
|
541 octave_idx_type m_numel; |
4811 | 542 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
543 OCTAVE_API octave_idx_type numel_internal (void) const; |
21321
79a51b7e00b6
eliminate some copy and paste code fragments in the Range class
John W. Eaton <jwe@octave.org>
parents:
21244
diff
changeset
|
544 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
545 OCTAVE_API double limit_internal (void) const; |
21321
79a51b7e00b6
eliminate some copy and paste code fragments in the Range class
John W. Eaton <jwe@octave.org>
parents:
21244
diff
changeset
|
546 |
29226
3ef055ca1d5e
Export template class definition instead of template class instantiations (patch #8919).
Markus Mützel <markus.muetzel@gmx.de>
parents:
28857
diff
changeset
|
547 OCTAVE_API void init (void); |
8971 | 548 |
18852
47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
549 protected: |
47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
550 |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
551 // NOTE: The following constructor may be removed when the arithmetic |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
552 // operators are removed. |
18852
47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
553 |
47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
554 // For operators' usage (to allow all values to be set directly). |
47d4b680d0e0
improve accuracy of range/scalar arithmetic (bug #42589)
John W. Eaton <jwe@octave.org>
parents:
17769
diff
changeset
|
555 Range (double b, double l, double i, octave_idx_type n) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
556 : m_base (b), m_limit (l), m_inc (i), m_numel (n) |
28592
e70c859c4bff
allow infinite limits on for loop ranges (bug #45143)
John W. Eaton <jwe@octave.org>
parents:
28524
diff
changeset
|
557 { } |
3 | 558 }; |
559 | |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
560 #if defined (OCTAVE_PROVIDE_DEPRECATED_SYMBOLS) |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
561 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
6108 | 562 extern OCTAVE_API Range operator - (const Range& r); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
563 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
564 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
565 extern OCTAVE_API Range operator + (double x, const Range& r); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
566 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
567 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
568 extern OCTAVE_API Range operator + (const Range& r, double x); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
569 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
570 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
571 extern OCTAVE_API Range operator - (double x, const Range& r); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
572 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
573 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
574 extern OCTAVE_API Range operator - (const Range& r, double x); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
575 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
576 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
577 extern OCTAVE_API Range operator * (double x, const Range& r); |
28524
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
578 |
455fe4a6f22c
deprecate arithmetic operators for ranges; eliminate use in Octave
John W. Eaton <jwe@octave.org>
parents:
28402
diff
changeset
|
579 OCTAVE_DEPRECATED (7, "arithmetic operations on Range objects are unreliable") |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
580 extern OCTAVE_API Range operator * (const Range& r, double x); |
29954
4c88a452519c
rename OCTAVE_USE_DEPRECATED_FUNCTIONS macro and attempt to make it work
John W. Eaton <jwe@octave.org>
parents:
29569
diff
changeset
|
581 #endif |
8553
c7ff200e45f5
optimize range-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
7620
diff
changeset
|
582 |
3 | 583 #endif |