Mercurial > hg > octave-nkf
annotate liboctave/Array-b.cc @ 14026:3781981be535 ss-3-5-90
snapshot 3.5.90
* configure.ac (AC_INIT): Version is now 3.5.90.
(OCTAVE_API_VERSION_NUMBER): Now 46.
(OCTAVE_RELEASE_DATE): Now 2011-12-11.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sun, 11 Dec 2011 23:18:31 -0500 |
parents | 12df7854fa7c |
children | 72c96de7a403 |
rev | line source |
---|---|
2493 | 1 /* |
2 | |
11523 | 3 Copyright (C) 1996-2011 John W. Eaton |
2493 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
2493 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
2493 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
27 // Instantiate Arrays of bool values. | |
28 | |
29 #include "Array.h" | |
30 #include "Array.cc" | |
10114
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
31 #define INLINE_ASCENDING_SORT |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
32 #define INLINE_DESCENDING_SORT |
7433 | 33 #include "oct-sort.cc" |
34 | |
10114
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
35 // Specialize bool sorting (aka stable partitioning). |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
36 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
37 template<bool desc> |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
38 static void do_bool_partition (bool *data, octave_idx_type nel) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
39 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
40 octave_idx_type k = 0; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
41 for (octave_idx_type i = 0; i < nel; i++) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
42 if (data[i] == desc) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
43 data[k++] = desc; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
44 for (octave_idx_type i = k; i < nel; i++) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
45 data[i] = ! desc; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
46 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
47 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
48 template<bool desc> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
49 static void do_bool_partition (bool *data, octave_idx_type *idx, |
10114
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
50 octave_idx_type nel) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
51 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
52 // FIXME: This is essentially a simple bucket sort. |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
53 // Can it be efficiently done by std::partition? |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
54 OCTAVE_LOCAL_BUFFER (octave_idx_type, jdx, nel); |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
55 octave_idx_type k = 0, l = 0; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
56 for (octave_idx_type i = 0; i < nel; i++) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
57 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
58 if (data[i] == desc) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
59 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
60 data[k] = desc; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
61 idx[k++] = idx[i]; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
62 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
63 else |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
64 jdx[l++] = idx[i]; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
65 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
66 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
67 for (octave_idx_type i = k; i < nel; i++) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
68 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
69 data[i] = ! desc; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
70 idx[i] = jdx[i-k]; |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
71 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
72 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
73 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
74 template <> template <> |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
75 void |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
76 octave_sort<bool>::sort (bool *data, octave_idx_type nel, |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
77 std::less<bool>) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
78 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
79 do_bool_partition<false> (data, nel); |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
80 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
81 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
82 template <> template <> |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
83 void |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
84 octave_sort<bool>::sort (bool *data, octave_idx_type nel, |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
85 std::greater<bool>) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
86 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
87 do_bool_partition<true> (data, nel); |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
88 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
89 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
90 template <> template <> |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
91 void |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
92 octave_sort<bool>::sort (bool *data, octave_idx_type *idx, octave_idx_type nel, |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
93 std::less<bool>) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
94 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
95 do_bool_partition<false> (data, idx, nel); |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
96 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
97 |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
98 template <> template <> |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
99 void |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
100 octave_sort<bool>::sort (bool *data, octave_idx_type *idx, octave_idx_type nel, |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
101 std::greater<bool>) |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
102 { |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
103 do_bool_partition<true> (data, idx, nel); |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
104 } |
e4936c129cbd
optimize sorting of bools
Jaroslav Hajek <highegg@gmail.com>
parents:
9732
diff
changeset
|
105 |
7433 | 106 INSTANTIATE_ARRAY_SORT (bool); |
2493 | 107 |
8721
e9cb742df9eb
imported patch sort3.diff
Jaroslav Hajek <highegg@gmail.com>
parents:
7433
diff
changeset
|
108 INSTANTIATE_ARRAY (bool, OCTAVE_API); |
3836 | 109 |
9732
b4fdfee405b5
remove ArrayN<T> + fix nonhom. diag-scalar ops
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
110 template OCTAVE_API std::ostream& operator << (std::ostream&, const Array<bool>&); |
4513 | 111 |
2826 | 112 #include "DiagArray2.h" |
113 #include "DiagArray2.cc" | |
114 | |
6108 | 115 template class OCTAVE_API DiagArray2<bool>; |