Mercurial > octave
annotate libinterp/corefcn/perms.cc @ 33466:65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
* libinterp/corefcn/perms.cc (GetPerms): Use constexpr instead of is_equal_T.
Remove the is_equal_T templates and specializations that are no longer
necessary. Remove obsolete FIXME comment.
author | Hendrik Koerner <koerhen@web.de> |
---|---|
date | Fri, 26 Apr 2024 13:08:25 +0800 |
parents | e20624df2cd2 |
children |
rev | line source |
---|---|
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
2 // |
32632
2e484f9f1f18
maint: update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
32589
diff
changeset
|
3 // Copyright (C) 2023-2024 The Octave Project Developers |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
4 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
7 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
8 // This file is part of Octave. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
9 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
13 // (at your option) any later version. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
14 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
18 // GNU General Public License for more details. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
19 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
23 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
25 |
33168
e20624df2cd2
minor whitespace style fix
John W. Eaton <jwe@octave.org>
parents:
33008
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
27 # include "config.h" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
28 #endif |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
29 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
30 #include <algorithm> |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
31 #include <numeric> |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
32 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
33 #include "defun.h" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
34 #include "error.h" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
35 #include "errwarn.h" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
36 #include "ovl.h" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
37 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
38 OCTAVE_BEGIN_NAMESPACE (octave) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
39 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
40 static inline double |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
41 Factorial (octave_idx_type n) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
42 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
43 double ret = 1; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
44 for (octave_idx_type i = 2; i <= n; i++) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
45 ret *= i; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
46 return ret; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
47 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
48 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
49 // |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
50 // Use C++ template to cater for the different octave array classes. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
51 // |
33004
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
52 |
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
53 template <typename T> |
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
54 static inline Array<T> |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
55 GetPerms (const Array<T>& ar_in, bool uniq_v = false) |
33004
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
56 { |
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
57 octave_idx_type m = ar_in.numel (); |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
58 double nr; // number of rows of resulting array |
33004
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
59 |
9c9f4df5e4c3
maint: Backed out changeset c9d869d9c989.
Rik <rik@octave.org>
parents:
33003
diff
changeset
|
60 // Setup index vector filled from 0..m-1 |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
61 OCTAVE_LOCAL_BUFFER (octave_idx_type, myvidx, m); |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
62 std::iota (&myvidx[0], &myvidx[m], 0); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
63 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
64 const T *Ar = ar_in.data (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
65 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
66 if (uniq_v) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
67 { |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
68 // Mutual Comparison is used to detect duplicated values. |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
69 // Using sort would be possible for numerical values and be of |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
70 // O(n*log (n)) complexity instead of O(n*(n -1) / 2). But sort |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
71 // is not supported for the octave_value container (structs/cells). |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
72 // Moreover, sort requires overhead for creating, filling, and sorting |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
73 // the intermediate array which would need to be post-processed. |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
74 // In practice, and because n must be very small, mutual comparison is |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
75 // typically faster and consumes less memory. |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
76 |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
77 octave_idx_type N_el = 1; |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
78 double denom = 1.0; |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
79 // Number of unique permutations is n! / (n_el1! * n_el2! * ...) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
80 for (octave_idx_type i = 0; i < m - 1; i++) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
81 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
82 for (octave_idx_type j = i + 1; j < m; j++) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
83 { |
33466
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
84 bool isequal; |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
85 if constexpr (std::is_same<T, octave_value>::value) |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
86 // operator '==' is not supported for octave_value objects |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
87 isequal = Ar[i].is_equal (Ar[j]); |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
88 else |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
89 isequal = (Ar[i] == Ar[j]); |
65cbf92800ed
Use C++17 feature constexpr to simplify perms.cc (bug #65645).
Hendrik Koerner <koerhen@web.de>
parents:
33168
diff
changeset
|
90 |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
91 if (myvidx[j] > myvidx[i] && isequal) |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
92 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
93 myvidx[j] = myvidx[i]; // not yet processed... |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
94 N_el++; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
95 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
96 else |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
97 { |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
98 denom *= Factorial (N_el); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
99 N_el = 1; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
100 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
101 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
102 } |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
103 denom *= Factorial (N_el); |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
104 nr = Factorial (m) / denom; |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
105 } |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
106 else |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
107 nr = Factorial (m); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
108 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
109 // Sort vector indices for inverse lexicographic order later. |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
110 std::sort (myvidx, myvidx + m, std::greater<octave_idx_type> ()); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
111 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
112 // Set up result array |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
113 octave_idx_type n = static_cast<octave_idx_type> (nr); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
114 Array<T> res (dim_vector (n, m)); |
32660
f53ac65ffba6
maint: New method rwdata() as clearer alternative to fortran_vec().
Rik <rik@octave.org>
parents:
32632
diff
changeset
|
115 T *Res = res.rwdata (); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
116 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
117 // Do the actual job |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
118 octave_idx_type i = 0; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
119 do |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
120 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
121 for (octave_idx_type j = 0; j < m; j++) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
122 Res[i + j * n] = Ar[myvidx[j]]; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
123 i++; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
124 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
125 while (std::next_permutation (myvidx, myvidx + m, std::greater<int> ())); |
32458
e516b6f4d1e0
perms.cc: Replace variable length arrays with new and delete[]
Arun Giridhar <arungiridhar@gmail.com>
parents:
32151
diff
changeset
|
126 |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
127 return res; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
128 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
129 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
130 DEFUN (perms, args, , |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
131 doc: /* -*- texinfo -*- |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
132 @deftypefn {} {@var{P} =} perms (@var{v}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
133 @deftypefnx {} {@var{P} =} perms (@var{v}, "unique") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
134 Generate all permutations of vector @var{v} with one row per permutation. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
135 |
31949
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
136 Results are returned in reverse lexicographic order if @var{v} is in ascending |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
137 order. If @var{v} is in a different permutation, then the result is permuted |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
138 that way too. Consequently, an input in descending order yields a result in |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
139 normal lexicographic order. The result has size |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
140 @code{factorial (@var{n}) * @var{n}}, where @var{n} is the length of @var{v}. |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
141 Any repeated elements are included in the output. |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
142 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
143 If the optional argument @qcode{"unique"} is given then only unique |
31949
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
144 permutations are returned, using less memory and taking less time than calling |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
145 @code{unique (perms (@var{v}), "rows")}. |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
146 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
147 Example 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
148 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
149 @example |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
150 @group |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
151 perms ([1, 2, 3]) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
152 @result{} |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
153 3 2 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
154 3 1 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
155 2 3 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
156 2 1 3 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
157 1 3 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
158 1 2 3 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
159 @end group |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
160 @end example |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
161 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
162 Example 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
163 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
164 @example |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
165 @group |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
166 perms ([1, 1, 2, 2], "unique") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
167 @result{} |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
168 2 2 1 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
169 2 1 2 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
170 2 1 1 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
171 1 2 2 1 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
172 1 2 1 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
173 1 1 2 2 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
174 @end group |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
175 @end example |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
176 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
177 Programming Note: If the @qcode{"unique"} option is not used, the length of |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
178 @var{v} should be no more than 10-12 to limit memory consumption. Even with |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
179 @qcode{"unique"}, there should be no more than 10-12 unique elements in |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
180 @var{v}. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
181 @seealso{permute, randperm, nchoosek} |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
182 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
183 @end deftypefn */) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
184 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
185 int nargin = args.length (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
186 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
187 if (nargin < 1 || nargin > 2) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
188 print_usage (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
189 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
190 octave_value retval; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
191 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
192 // Parameter check "unique" |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
193 bool uniq_v = false; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
194 if (nargin == 2) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
195 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
196 const charMatrix opt = args (1).char_matrix_value (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
197 const char *str = opt.data (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
198 if (std::string (str, opt.cols ()) != "unique") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
199 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
200 error ("perms: option must be the string \"unique\"."); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
201 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
202 uniq_v = true; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
203 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
204 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
205 if (! (args (0).is_matrix_type () || args (0).is_range () |
32589
05b4479c29d8
maint: C++ style check for libinterp/ before 9.1 release.
Rik <rik@octave.org>
parents:
32465
diff
changeset
|
206 || args (0).iscell () || args (0).is_scalar_type () |
05b4479c29d8
maint: C++ style check for libinterp/ before 9.1 release.
Rik <rik@octave.org>
parents:
32465
diff
changeset
|
207 || args (0).isstruct ())) |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
208 { |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
209 error ("perms: V must be a matrix, range, cell array, " |
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
210 "struct, or a scalar."); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
211 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
212 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
213 std::string clname = args (0).class_name (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
214 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
215 // Execute main permutation code for the different classes |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
216 if (clname == "double") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
217 retval = GetPerms<double> (args (0).array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
218 else if (clname == "single") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
219 retval = GetPerms<float> (args (0).float_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
220 else if (clname == "logical") |
31949
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
221 retval = GetPerms<bool> (args (0).bool_array_value (), uniq_v); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
222 else if (clname == "char") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
223 retval = GetPerms<char> (args (0).char_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
224 else if (clname == "int8") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
225 retval = GetPerms<octave_int8> (args (0).int8_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
226 else if (clname == "int16") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
227 retval = GetPerms<octave_int16> (args (0).int16_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
228 else if (clname == "int32") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
229 retval = GetPerms<octave_int32> (args (0).int32_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
230 else if (clname == "int64") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
231 retval = GetPerms<octave_int64> (args (0).int64_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
232 else if (clname == "uint8") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
233 retval = GetPerms<octave_uint8> (args (0).uint8_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
234 else if (clname == "uint16") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
235 retval = GetPerms<octave_uint16> (args (0).uint16_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
236 else if (clname == "uint32") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
237 retval = GetPerms<octave_uint32> (args (0).uint32_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
238 else if (clname == "uint64") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
239 retval = GetPerms<octave_uint64> (args (0).uint64_array_value (), uniq_v); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
240 else if (clname == "cell") |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
241 retval = GetPerms<octave_value> (args (0).cell_value (), uniq_v); |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
242 else if (clname == "struct") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
243 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
244 const octave_map map_in (args (0).map_value ()); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
245 string_vector fn = map_in.fieldnames (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
246 if (fn.numel () == 0 && map_in.numel () != 0) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
247 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
248 octave_scalar_map out; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
249 retval = out; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
250 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
251 else |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
252 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
253 octave_map out; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
254 if (fn.numel () == 0) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
255 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
256 out = octave_map (dim_vector (1, 0)); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
257 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
258 else |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
259 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
260 for (octave_idx_type i = 0; i < fn.numel (); i++) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
261 { |
33005
349b4adf686a
Simplify code complexity of perms.cc (bug #65244)
Hendrik Koerner <koerhen@web.de>
parents:
33004
diff
changeset
|
262 out.assign (fn (i), GetPerms<octave_value> |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
263 (map_in.contents (fn (i)), uniq_v)); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
264 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
265 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
266 retval = out; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
267 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
268 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
269 else // none of the above class criteria were met |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
270 { |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
271 warning ("perms: unable to permute for class %s", clname.c_str ()); |
32151
72dcb1cef2c9
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
31949
diff
changeset
|
272 // retval stays empty |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
273 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
274 return ovl (retval); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
275 } |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
276 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
277 /* |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
278 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
279 %!assert (rows (perms (1:6)), factorial (6)) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
280 %!assert (perms (pi), pi) |
31949
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
281 %!assert (perms ([e, pi]), [pi, e; e, pi]) |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
282 %!assert (perms ([pi, e]), [e, pi; pi, e]) |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
283 %!assert (perms ([1 2 3]), [3 2 1; 3 1 2; 2 3 1; 2 1 3; 1 3 2; 1 2 3]) |
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
284 %!assert (sortrows (perms (1:5)), sortrows (perms ([2 5 4 1 3]'))) |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
285 %!assert (perms ("abc"), char ("cba", "cab", "bca", "bac", "acb", "abc")) |
31949
1dba35103327
perms.cc: Resequenced output for compatibility (bug #50426)
Arun Giridhar <arungiridhar@gmail.com>
parents:
31942
diff
changeset
|
286 %!assert (sortrows (perms ("fobar")), unique (perms ("fobar"), "rows")) |
31942
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
287 %!assert (unique (perms (1:5)(:))', 1:5) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
288 %!assert (perms (int8 (1:4)), int8 (perms (1:4))) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
289 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
290 %!assert (sortrows (perms ("abb", "unique")), ["abb"; "bab"; "bba"]) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
291 %!assert (size (perms ([1 1 1 1 2 2 2 3 3], "unique")), [1260 9]) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
292 %!assert (size (perms (int8([1 1 1 1 1 2 2 2 2 3 3 3]), "unique")), [27720 12]) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
293 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
294 ## Should work for any array type, such as cells and structs, |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
295 ## and not only for numeric data. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
296 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
297 %!assert <*52431> (perms ({1}), {1}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
298 %!assert <*52431> (perms ({0.1, "foo"}), {"foo", 0.1; 0.1, "foo"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
299 %!assert <*52431> (perms ({"foo", 0.1}), {0.1, "foo"; "foo", 0.1}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
300 %!assert <*52431> (perms ({"foo"; 0.1}), {0.1, "foo"; "foo", 0.1}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
301 %!assert <*52431> (perms ({0.1; "foo"}), {"foo", 0.1; 0.1, "foo"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
302 %!assert <*52431> (perms ({"foo", "bar"}), {"bar", "foo"; "foo", "bar"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
303 %!assert <*52431> (perms ({"bar", "foo"}), {"foo", "bar"; "bar", "foo"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
304 %! |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
305 %!assert <*52431> (perms (struct ()), struct ()) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
306 %!assert <*52431> (perms (struct ("foo", {1, 2})), |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
307 %! struct ("foo", {2, 1; 1, 2})) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
308 %!assert <*52431> (perms (struct ("foo", {1, 2}, "bar", {3, 4})), |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
309 %! struct ("foo", {2, 1; 1, 2}, "bar", {4, 3; 3, 4})) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
310 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
311 ## Also sort logical input with order dependent on the input order and |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
312 ## not their values. |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
313 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
314 %!assert <*52431> (perms (logical ([1 0])), logical ([0 1;, 1 0])) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
315 %!assert <*52431> (perms (logical ([0 1])), logical ([1 0; 0 1])) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
316 %!assert <*52431> (perms (logical ([0 1 0])), |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
317 %! logical ([0 1 0; 0 0 1; 1 0 0; 1 0 0; 0 0 1; 0 1 0])) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
318 %!assert <*52431> (perms (logical ([0 1 1])), |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
319 %! logical ([1 1 0; 1 0 1; 1 1 0; 1 0 1; 0 1 1; 0 1 1])) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
320 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
321 %!assert <*52432> (perms ([]), reshape ([], 1, 0)) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
322 %!assert <*52432> (perms (single ([])), reshape (single ([]), 1, 0)) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
323 %!assert <*52432> (perms (int8 ([])), reshape (int8 ([]), 1, 0)) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
324 %!assert <*52432> (perms ({}), cell (1, 0)) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
325 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
326 %!test <*52432> |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
327 %! s = struct (); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
328 %! s(1) = []; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
329 %! assert (perms (reshape (s, 0, 0)), reshape (s, 1, 0)); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
330 %! assert (perms (reshape (s, 0, 1)), reshape (s, 1, 0)); |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
331 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
332 ## test if "unique" works also for cell arrays |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
333 %!assert <*63965> (perms ({"foo"; "foo"}, "unique"), {"foo", "foo"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
334 %!assert <*63965> (perms ({"foo", "foo", "bar"}, "unique"), ... |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
335 %! {"bar", "foo", "foo"; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
336 %! "foo", "bar", "foo"; |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
337 %! "foo", "foo", "bar"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
338 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
339 ## Test input validation |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
340 %!error <Invalid call> perms () |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
341 %!error <option must be the string "unique"> perms (1:5, "foobar") |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
342 %!error <option must be the string "unique"> perms (1:5, {"foo"}) |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
343 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
344 */ |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
345 |
7782d1ead0a0
Replace perms.m with new perms.cc (bugs 63962 and 63965)
Hendrik Koerner <koerhen@web.de>
parents:
diff
changeset
|
346 OCTAVE_END_NAMESPACE (octave) |