Mercurial > octave
annotate libinterp/corefcn/strfns.cc @ 23575:e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
* ov.h (is_cellstr): Use OCTAVE_DEPRECATED macro for is_cellstr.
* ov.h (iscellstr): New function.
* Cell.cc, Cell.h, data.cc, graphics.cc, graphics.in.h, lookup.cc, strfns.cc,
sysdep.cc, __delaunayn__.cc, __voronoi__.cc, convhulln.cc, ov-base.h,
ov-cell.cc, ov-cell.h, ov-java.cc, ov-struct.cc:
Replace occurrences of is_cellstr with iscellstr.
author | Rik <rik@octave.org> |
---|---|
date | Sun, 11 Jun 2017 15:26:14 -0700 |
parents | 21baad6b35c4 |
children | 00e518162fda |
rev | line source |
---|---|
807 | 1 /* |
2 | |
23219
3ac9f9ecfae5
maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents:
23083
diff
changeset
|
3 Copyright (C) 1994-2017 John W. Eaton |
807 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
9 the Free Software Foundation; either version 3 of the License, or |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
10 (at your option) any later version. |
807 | 11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22407
diff
changeset
|
15 GNU General Public License for more details. |
807 | 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/>. | |
807 | 20 |
21 */ | |
22 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21547
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
807 | 25 #endif |
26 | |
1355 | 27 #include <cctype> |
7528
26d8a92644de
try to avoid ctype macro problems
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
28 |
8463
a74871446af7
Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents:
8462
diff
changeset
|
29 #include <queue> |
5765 | 30 #include <sstream> |
807 | 31 |
32 #include "dMatrix.h" | |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
33 #include "localcharset-wrapper.h" |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
34 #include "uniconv-wrappers.h" |
807 | 35 |
5416 | 36 #include "Cell.h" |
1355 | 37 #include "defun.h" |
807 | 38 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
39 #include "errwarn.h" |
2366 | 40 #include "ov.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
41 #include "ovl.h" |
4457 | 42 #include "unwind-prot.h" |
807 | 43 #include "utils.h" |
44 | |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
45 #include "oct-string.h" |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
46 |
4358 | 47 DEFUN (char, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
48 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
49 @deftypefn {} {} char (@var{x}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
50 @deftypefnx {} {} char (@var{x}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
51 @deftypefnx {} {} char (@var{s1}, @var{s2}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
52 @deftypefnx {} {} char (@var{cell_array}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
53 Create a string array from one or more numeric matrices, character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
54 matrices, or cell arrays. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
55 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
56 Arguments are concatenated vertically. The returned values are padded with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
57 blanks as needed to make each row of the string array have the same length. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
58 Empty input strings are significant and will concatenated in the output. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
59 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
60 For numerical input, each element is converted to the corresponding ASCII |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
61 character. A range error results if an input is outside the ASCII range |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
62 (0-255). |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
63 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
64 For cell arrays, each element is concatenated separately. Cell arrays |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
65 converted through @code{char} can mostly be converted back with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
66 @code{cellstr}. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
67 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
68 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
69 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
70 char ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"]) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
71 @result{} ["abc " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
72 " " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
73 "98 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
74 "99 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
75 "d " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
76 "str1 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
77 "half "] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
78 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
79 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
80 @seealso{strvcat, cellstr} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
81 @end deftypefn */) |
4358 | 82 { |
83 octave_value retval; | |
84 | |
85 int nargin = args.length (); | |
86 | |
13135
af36cdb552a6
char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents:
12900
diff
changeset
|
87 if (nargin == 0) |
af36cdb552a6
char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents:
12900
diff
changeset
|
88 retval = ""; |
af36cdb552a6
char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents:
12900
diff
changeset
|
89 else if (nargin == 1) |
5281 | 90 retval = args(0).convert_to_str (true, true, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
91 args(0).is_dq_string () ? '"' : '\''); |
13135
af36cdb552a6
char: return empty string if called with no arguments
John W. Eaton <jwe@octave.org>
parents:
12900
diff
changeset
|
92 else |
4358 | 93 { |
94 int n_elts = 0; | |
95 | |
96 int max_len = 0; | |
97 | |
8463
a74871446af7
Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents:
8462
diff
changeset
|
98 std::queue<string_vector> args_as_strings; |
a74871446af7
Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents:
8462
diff
changeset
|
99 |
4358 | 100 for (int i = 0; i < nargin; i++) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
101 { |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
102 string_vector s = args(i).xstring_vector_value ("char: unable to convert some args to strings"); |
4358 | 103 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
104 if (s.numel () > 0) |
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
105 n_elts += s.numel (); |
8353
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
106 else |
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
107 n_elts += 1; |
4358 | 108 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
109 int s_max_len = s.max_length (); |
4358 | 110 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
111 if (s_max_len > max_len) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
112 max_len = s_max_len; |
8463
a74871446af7
Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents:
8462
diff
changeset
|
113 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
114 args_as_strings.push (s); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
115 } |
4358 | 116 |
117 string_vector result (n_elts); | |
118 | |
119 int k = 0; | |
120 | |
121 for (int i = 0; i < nargin; i++) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
122 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
123 string_vector s = args_as_strings.front (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
124 args_as_strings.pop (); |
4358 | 125 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
126 int n = s.numel (); |
4358 | 127 |
8353
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
128 if (n > 0) |
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
129 { |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
130 for (int j = 0; j < n; j++) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
131 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
132 std::string t = s[j]; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
133 int t_len = t.length (); |
4358 | 134 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
135 if (max_len > t_len) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
136 t += std::string (max_len - t_len, ' '); |
4358 | 137 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
138 result[k++] = t; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
139 } |
8353
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
140 } |
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
141 else |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
142 result[k++] = std::string (max_len, ' '); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
143 } |
4358 | 144 |
5280 | 145 retval = octave_value (result, '\''); |
4358 | 146 } |
147 | |
148 return retval; | |
149 } | |
150 | |
8353
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
151 /* |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
152 %!assert (char (), '') |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
153 %!assert (char (100), "d") |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
154 %!assert (char (100,100), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
155 %!assert (char ({100,100}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
156 %!assert (char ([100,100]), ["dd"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
157 %!assert (char ({100,{100}}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
158 %!assert (char (100, [], 100), ["d";" ";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
159 %!assert (char ({100, [], 100}), ["d";" ";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
160 %!assert (char ({100,{100, {""}}}), ["d";"d";" "]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
161 %!assert (char (["a";"be"], {"c", 100}), ["a";"be";"c";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
162 %!assert (char ("a", "bb", "ccc"), ["a "; "bb "; "ccc"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
163 %!assert (char ([65, 83, 67, 73, 73]), "ASCII") |
13140
98d23b0f16e1
maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents:
13135
diff
changeset
|
164 |
98d23b0f16e1
maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents:
13135
diff
changeset
|
165 %!test |
98d23b0f16e1
maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents:
13135
diff
changeset
|
166 %! x = char ("foo", "bar", "foobar"); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
167 %! assert (x(1,:), "foo "); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
168 %! assert (x(2,:), "bar "); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
169 %! assert (x(3,:), "foobar"); |
8353
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
170 */ |
349a555729a9
keep empty strings in char
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
7528
diff
changeset
|
171 |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
172 DEFUN (strvcat, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
173 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
174 @deftypefn {} {} strvcat (@var{x}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
175 @deftypefnx {} {} strvcat (@var{x}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
176 @deftypefnx {} {} strvcat (@var{s1}, @var{s2}, @dots{}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
177 @deftypefnx {} {} strvcat (@var{cell_array}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
178 Create a character array from one or more numeric matrices, character |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
179 matrices, or cell arrays. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
180 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
181 Arguments are concatenated vertically. The returned values are padded with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
182 blanks as needed to make each row of the string array have the same length. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
183 Unlike @code{char}, empty strings are removed and will not appear in the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
184 output. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
185 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
186 For numerical input, each element is converted to the corresponding ASCII |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
187 character. A range error results if an input is outside the ASCII range |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
188 (0-255). |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
189 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
190 For cell arrays, each element is concatenated separately. Cell arrays |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
191 converted through @code{strvcat} can mostly be converted back with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
192 @code{cellstr}. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
193 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
194 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
195 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
196 strvcat ([97, 98, 99], "", @{"98", "99", 100@}, "str1", ["ha", "lf"]) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
197 @result{} ["abc " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
198 "98 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
199 "99 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
200 "d " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
201 "str1 " |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
202 "half "] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
203 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
204 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
205 @seealso{char, strcat, cstrcat} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
206 @end deftypefn */) |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
207 { |
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
208 int nargin = args.length (); |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
209 int n_elts = 0; |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
210 size_t max_len = 0; |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
211 std::queue<string_vector> args_as_strings; |
8463
a74871446af7
Fchar, Fstrvcat: use queue to avoid duplicate calls to all_strings
John W. Eaton <jwe@octave.org>
parents:
8462
diff
changeset
|
212 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
213 for (int i = 0; i < nargin; i++) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
214 { |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
215 string_vector s = args(i).xstring_vector_value ("strvcat: unable to convert some args to strings"); |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
216 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
217 size_t n = s.numel (); |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
218 |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
219 // do not count empty strings in calculation of number of elements |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
220 if (n > 0) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
221 { |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
222 for (size_t j = 0; j < n; j++) |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
223 { |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
224 if (s[j].length () > 0) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
225 n_elts++; |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
226 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
227 } |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
228 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
229 size_t s_max_len = s.max_length (); |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
230 |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
231 if (s_max_len > max_len) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
232 max_len = s_max_len; |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
233 |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
234 args_as_strings.push (s); |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
235 } |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
236 |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
237 string_vector result (n_elts); |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
238 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
239 octave_idx_type k = 0; |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
240 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
241 for (int i = 0; i < nargin; i++) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
242 { |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
243 string_vector s = args_as_strings.front (); |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
244 args_as_strings.pop (); |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
245 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
246 size_t n = s.numel (); |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
247 |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
248 if (n > 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
249 { |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
250 for (size_t j = 0; j < n; j++) |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
251 { |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
252 std::string t = s[j]; |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
253 if (t.length () > 0) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
254 { |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
255 size_t t_len = t.length (); |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
256 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
257 if (max_len > t_len) |
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
258 t += std::string (max_len - t_len, ' '); |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
259 |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
260 result[k++] = t; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
261 } |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
262 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10234
diff
changeset
|
263 } |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
264 } |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
265 |
21127
df7891224709
maint: Use "return ovl (...)" in DEFUN macros.
Rik <rik@octave.org>
parents:
21100
diff
changeset
|
266 // Cannot use ovl. Relies on overloaded octave_value call. |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
267 return octave_value (result, '\''); |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
268 } |
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
269 |
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
270 /* |
21317
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
271 %!assert (strvcat (""), "") |
a4faec57f4c8
maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents:
21301
diff
changeset
|
272 %!assert (strvcat (100) == "d") |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
273 %!assert (strvcat (100,100), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
274 %!assert (strvcat ({100,100}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
275 %!assert (strvcat ([100,100]), ["dd"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
276 %!assert (strvcat ({100,{100}}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
277 %!assert (strvcat (100, [], 100), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
278 %!assert (strvcat ({100, [], 100}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
279 %!assert (strvcat ({100,{100, {""}}}), ["d";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
280 %!assert (strvcat (["a";"be"], {"c", 100}), ["a";"be";"c";"d"]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
281 %!assert (strvcat ("a", "bb", "ccc"), ["a "; "bb "; "ccc"]) |
20166
196871335aa8
Allow call with empty argument list in strcat related functions (bug #44981)
Carnë Draug <carandraug@octave.org>
parents:
19861
diff
changeset
|
282 %!assert (strvcat (), "") |
8462
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
283 */ |
ebdf1e058d85
Make strvcat an internal function
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8461
diff
changeset
|
284 |
4535 | 285 DEFUN (ischar, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
286 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
287 @deftypefn {} {} ischar (@var{x}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
288 Return true if @var{x} is a character array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
289 @seealso{isfloat, isinteger, islogical, isnumeric, iscellstr, isa} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
290 @end deftypefn */) |
807 | 291 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
292 if (args.length () != 1) |
5823 | 293 print_usage (); |
807 | 294 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
295 return ovl (args(0).is_string ()); |
807 | 296 } |
297 | |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
298 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
299 %!assert (ischar ("a"), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
300 %!assert (ischar (["ab";"cd"]), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
301 %!assert (ischar ({"ab"}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
302 %!assert (ischar (1), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
303 %!assert (ischar ([1, 2]), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
304 %!assert (ischar ([]), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
305 %!assert (ischar ([1, 2; 3, 4]), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
306 %!assert (ischar (""), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
307 %!assert (ischar ("test"), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
308 %!assert (ischar (["test"; "ing"]), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
309 %!assert (ischar (struct ("foo", "bar")), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
310 |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
311 %!error ischar () |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
312 %!error ischar ("test", 1) |
13140
98d23b0f16e1
maint: move test_string.m tests to source files
John W. Eaton <jwe@octave.org>
parents:
13135
diff
changeset
|
313 */ |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
314 |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
315 static octave_value |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
316 do_strcmp_fun (const octave_value& arg0, const octave_value& arg1, |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
317 octave_idx_type n, const char *fcn_name, |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
318 bool (*array_op) (const Array<char>&, const Array<char>&, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
319 octave_idx_type), |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
320 bool (*str_op) (const std::string&, const std::string&, |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
321 std::string::size_type)) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
322 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
323 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
324 octave_value retval; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
325 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
326 bool s1_string = arg0.is_string (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
327 bool s1_cell = arg0.is_cell (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
328 bool s2_string = arg1.is_string (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
329 bool s2_cell = arg1.is_cell (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
330 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
331 if (s1_string && s2_string) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
332 retval = array_op (arg0.char_array_value (), arg1.char_array_value (), n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
333 else if ((s1_string && s2_cell) || (s1_cell && s2_string)) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
334 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
335 octave_value str_val, cell_val; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
336 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
337 if (s1_string) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
338 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
339 str_val = arg0; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
340 cell_val = arg1; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
341 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
342 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
343 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
344 str_val = arg1; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
345 cell_val = arg0; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
346 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
347 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
348 const Cell cell = cell_val.cell_value (); |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
349 const string_vector str = str_val.string_vector_value (); |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
350 octave_idx_type r = str.numel (); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
351 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
352 if (r == 0 || r == 1) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
353 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
354 // Broadcast the string. |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
355 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
356 boolNDArray output (cell_val.dims (), false); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
357 |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23396
diff
changeset
|
358 std::string s = (r == 0 ? "" : str[0]); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
359 |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
360 if (cell_val.iscellstr ()) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
361 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
362 const Array<std::string> cellstr = cell_val.cellstr_value (); |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
363 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
364 output(i) = str_op (cellstr(i), s, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
365 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
366 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
367 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
368 // FIXME: should we warn here? |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
369 for (octave_idx_type i = 0; i < cell.numel (); i++) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
370 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
371 if (cell(i).is_string ()) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
372 output(i) = str_op (cell(i).string_value (), s, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
373 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
374 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
375 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
376 retval = output; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
377 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
378 else if (r > 1) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
379 { |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
380 if (cell.numel () == 1) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
381 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
382 // Broadcast the cell. |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
383 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
384 const dim_vector dv (r, 1); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
385 boolNDArray output (dv, false); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
386 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
387 if (cell(0).is_string ()) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
388 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
389 const std::string str2 = cell(0).string_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
390 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
391 for (octave_idx_type i = 0; i < r; i++) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
392 output(i) = str_op (str[i], str2, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
393 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
394 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
395 retval = output; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
396 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
397 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
398 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
399 // Must match in all dimensions. |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
400 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
401 boolNDArray output (cell.dims (), false); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
402 |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
403 if (cell.numel () == r) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
404 { |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
405 if (cell_val.iscellstr ()) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
406 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
407 const Array<std::string> cellstr |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
408 = cell_val.cellstr_value (); |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
409 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
410 output(i) = str_op (str[i], cellstr(i), n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
411 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
412 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
413 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
414 // FIXME: should we warn here? |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
415 for (octave_idx_type i = 0; i < r; i++) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
416 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
417 if (cell(i).is_string ()) |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
418 output(i) = str_op (str[i], |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
419 cell(i).string_value (), n); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
420 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
421 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
422 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
423 retval = output; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
424 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
425 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
426 retval = false; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
427 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
428 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
429 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
430 else if (s1_cell && s2_cell) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
431 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
432 octave_value cell1_val, cell2_val; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
433 octave_idx_type r1 = arg0.numel (), r2; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
434 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
435 if (r1 == 1) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
436 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
437 // Make the singleton cell2. |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
438 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
439 cell1_val = arg1; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
440 cell2_val = arg0; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
441 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
442 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
443 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
444 cell1_val = arg0; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
445 cell2_val = arg1; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
446 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
447 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
448 const Cell cell1 = cell1_val.cell_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
449 const Cell cell2 = cell2_val.cell_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
450 r1 = cell1.numel (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
451 r2 = cell2.numel (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
452 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
453 const dim_vector size1 = cell1.dims (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
454 const dim_vector size2 = cell2.dims (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
455 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
456 boolNDArray output (size1, false); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
457 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
458 if (r2 == 1) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
459 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
460 // Broadcast cell2. |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
461 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
462 if (cell2(0).is_string ()) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
463 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
464 const std::string str2 = cell2(0).string_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
465 |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
466 if (cell1_val.iscellstr ()) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
467 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
468 const Array<std::string> cellstr = cell1_val.cellstr_value (); |
20232
a9574e3c6e9e
Deprecate Array::length() and Sparse::length() in favour of ::numel().
Carnë Draug <carandraug@octave.org>
parents:
20193
diff
changeset
|
469 for (octave_idx_type i = 0; i < cellstr.numel (); i++) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
470 output(i) = str_op (cellstr(i), str2, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
471 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
472 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
473 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
474 // FIXME: should we warn here? |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
475 for (octave_idx_type i = 0; i < r1; i++) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
476 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
477 if (cell1(i).is_string ()) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
478 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
479 const std::string str1 = cell1(i).string_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
480 output(i) = str_op (str1, str2, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
481 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
482 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
483 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
484 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
485 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
486 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
487 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
488 if (size1 != size2) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20804
diff
changeset
|
489 error ("%s: nonconformant cell arrays", fcn_name); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
490 |
23575
e95738a119da
maint: Deprecate is_cellstr and replace with iscellstr.
Rik <rik@octave.org>
parents:
23457
diff
changeset
|
491 if (cell1.iscellstr () && cell2.iscellstr ()) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
492 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
493 const Array<std::string> cellstr1 = cell1_val.cellstr_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
494 const Array<std::string> cellstr2 = cell2_val.cellstr_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
495 for (octave_idx_type i = 0; i < r1; i++) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
496 output (i) = str_op (cellstr1(i), cellstr2(i), n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
497 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
498 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
499 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
500 // FIXME: should we warn here? |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
501 for (octave_idx_type i = 0; i < r1; i++) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
502 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
503 if (cell1(i).is_string () && cell2(i).is_string ()) |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
504 { |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
505 const std::string str1 = cell1(i).string_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
506 const std::string str2 = cell2(i).string_value (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
507 output(i) = str_op (str1, str2, n); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
508 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
509 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
510 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
511 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
512 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
513 retval = output; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
514 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
515 else |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
516 retval = false; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
517 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
518 return retval; |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
519 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
520 |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
521 |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
522 // These are required so that they match the same signature as strncmp |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
523 // and strncmpi and can therefore be used in do_strcmp_fun. |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
524 |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
525 template <typename T, typename T_size_type> |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
526 static bool |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
527 strcmp_ignore_n (const T& s1, const T& s2, T_size_type) |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
528 { return octave::string::strcmp (s1, s2); } |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
529 |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
530 template <typename T, typename T_size_type> |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
531 static bool |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
532 strcmpi_ignore_n (const T& s1, const T& s2, T_size_type) |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
533 { return octave::string::strcmpi (s1, s2); } |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
534 |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
535 |
5415 | 536 DEFUN (strcmp, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
537 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
538 @deftypefn {} {} strcmp (@var{s1}, @var{s2}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
539 Return 1 if the character strings @var{s1} and @var{s2} are the same, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
540 and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
541 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
542 If either @var{s1} or @var{s2} is a cell array of strings, then an array |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
543 of the same size is returned, containing the values described above for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
544 every member of the cell array. The other argument may also be a cell |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
545 array of strings (of the same size or with only one element), char matrix |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
546 or character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
547 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
548 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strcmp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
549 function returns 1 if the character strings are equal, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
550 This is just the opposite of the corresponding C library function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
551 @seealso{strcmpi, strncmp, strncmpi} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
552 @end deftypefn */) |
5415 | 553 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
554 if (args.length () != 2) |
5823 | 555 print_usage (); |
5415 | 556 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
557 return ovl (do_strcmp_fun (args(0), args(1), 0, "strcmp", |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
558 strcmp_ignore_n, strcmp_ignore_n)); |
5415 | 559 } |
560 | |
5862 | 561 /* |
562 %!shared x | |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
563 %! x = char (zeros (0, 2)); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
564 %!assert (strcmp ("", x), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
565 %!assert (strcmp (x, ""), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
566 %!assert (strcmp (x, x), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
567 ## %!assert (strcmp ({""}, x), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
568 ## %!assert (strcmp ({x}, ""), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
569 ## %!assert (strcmp ({x}, x), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
570 ## %!assert (strcmp ("", {x}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
571 ## %!assert (strcmp (x, {""}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
572 ## %!assert (strcmp (x, {x}), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
573 ## %!assert (strcmp ({x; x}, ""), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
574 ## %!assert (strcmp ({x; x}, {""}), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
575 ## %!assert (strcmp ("", {x; x}), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
576 ## %!assert (strcmp ({""}, {x; x}), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
577 %!assert (strcmp ({"foo"}, x), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
578 %!assert (strcmp ({"foo"}, "foo"), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
579 %!assert (strcmp ({"foo"}, x), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
580 %!assert (strcmp (x, {"foo"}), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
581 %!assert (strcmp ("foo", {"foo"}), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
582 %!assert (strcmp (x, {"foo"}), false) |
5862 | 583 %!shared y |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
584 %! y = char (zeros (2, 0)); |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
585 %!assert (strcmp ("", y), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
586 %!assert (strcmp (y, ""), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
587 %!assert (strcmp (y, y), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
588 %!assert (strcmp ({""}, y), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
589 %!assert (strcmp ({y}, ""), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
590 %!assert (strcmp ({y}, y), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
591 %!assert (strcmp ("", {y}), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
592 %!assert (strcmp (y, {""}), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
593 %!assert (strcmp (y, {y}), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
594 %!assert (strcmp ({y; y}, ""), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
595 %!assert (strcmp ({y; y}, {""}), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
596 %!assert (strcmp ("", {y; y}), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
597 %!assert (strcmp ({""}, {y; y}), [true; true]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
598 %!assert (strcmp ({"foo"}, y), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
599 %!assert (strcmp ({"foo"}, y), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
600 %!assert (strcmp (y, {"foo"}), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
601 %!assert (strcmp (y, {"foo"}), [false; false]) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
602 %!assert (strcmp ("foobar", "foobar"), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
603 %!assert (strcmp ("fooba", "foobar"), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
604 |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
605 %!error strcmp () |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
606 %!error strcmp ("foo", "bar", 3) |
5862 | 607 */ |
608 | |
6250 | 609 DEFUN (strncmp, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
610 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
611 @deftypefn {} {} strncmp (@var{s1}, @var{s2}, @var{n}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
612 Return 1 if the first @var{n} characters of strings @var{s1} and @var{s2} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
613 are the same, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
614 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
615 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
616 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
617 strncmp ("abce", "abcd", 3) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
618 @result{} 1 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
619 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
620 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
621 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
622 If either @var{s1} or @var{s2} is a cell array of strings, then an array |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
623 of the same size is returned, containing the values described above for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
624 every member of the cell array. The other argument may also be a cell |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
625 array of strings (of the same size or with only one element), char matrix |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
626 or character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
627 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
628 @example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
629 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
630 strncmp ("abce", @{"abcd", "bca", "abc"@}, 3) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
631 @result{} [1, 0, 1] |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
632 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
633 @end example |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
634 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
635 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strncmp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
636 function returns 1 if the character strings are equal, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
637 This is just the opposite of the corresponding C library function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
638 @seealso{strncmpi, strcmp, strcmpi} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
639 @end deftypefn */) |
6250 | 640 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
641 if (args.length () != 3) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
642 print_usage (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
643 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
644 octave_idx_type n = args(2).idx_type_value (); |
6250 | 645 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
646 if (n > 0) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
647 return ovl (do_strcmp_fun (args(0), args(1), n, "strncmp", |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
648 octave::string::strncmp, |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
649 octave::string::strncmp)); |
6250 | 650 else |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
651 error ("strncmp: N must be greater than 0"); |
6250 | 652 } |
653 | |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
654 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
655 %!assert (strncmp ("abce", "abc", 3), true) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
656 %!assert (strncmp (100, 100, 1), false) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
657 %!assert (strncmp ("abce", {"abcd", "bca", "abc"}, 3), logical ([1, 0, 1])) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
658 %!assert (strncmp ("abc", {"abcd", "bca", "abc"}, 4), logical ([0, 0, 0])) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
659 %!assert (strncmp ({"abcd", "bca", "abc"},"abce", 3), logical ([1, 0, 1])) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
660 %!assert (strncmp ({"abcd", "bca", "abc"},{"abcd", "bca", "abe"}, 3), logical ([1, 1, 0])) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
661 %!assert (strncmp ("abc", {"abcd", 10}, 2), logical ([1, 0])) |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
662 |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
663 %!error strncmp () |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
664 %!error strncmp ("abc", "def") |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
665 */ |
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
666 |
10316
9966f1f71c32
use DEFUNX instead of DEFUN for strcmpi and strncmpi
John W. Eaton <jwe@octave.org>
parents:
10315
diff
changeset
|
667 DEFUNX ("strcmpi", Fstrcmpi, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
668 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
669 @deftypefn {} {} strcmpi (@var{s1}, @var{s2}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
670 Return 1 if the character strings @var{s1} and @var{s2} are the same, |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
671 disregarding case of alphabetic characters, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
672 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
673 If either @var{s1} or @var{s2} is a cell array of strings, then an array |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
674 of the same size is returned, containing the values described above for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
675 every member of the cell array. The other argument may also be a cell |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
676 array of strings (of the same size or with only one element), char matrix |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
677 or character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
678 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
679 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strcmp |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
680 function returns 1 if the character strings are equal, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
681 This is just the opposite of the corresponding C library function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
682 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
683 @strong{Caution:} National alphabets are not supported. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
684 @seealso{strcmp, strncmp, strncmpi} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
685 @end deftypefn */) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
686 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
687 if (args.length () != 2) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
688 print_usage (); |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
689 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
690 return ovl (do_strcmp_fun (args(0), args(1), 0, "strcmpi", |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
691 strcmpi_ignore_n, strcmpi_ignore_n)); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
692 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
693 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
694 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
695 %!assert (strcmpi ("abc123", "ABC123"), true) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
696 */ |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
697 |
10318
f0ac2fa91733
fix incorrect strncmpi change
John W. Eaton <jwe@octave.org>
parents:
10316
diff
changeset
|
698 DEFUNX ("strncmpi", Fstrncmpi, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
699 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
700 @deftypefn {} {} strncmpi (@var{s1}, @var{s2}, @var{n}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
701 Return 1 if the first @var{n} character of @var{s1} and @var{s2} are the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
702 same, disregarding case of alphabetic characters, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
703 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
704 If either @var{s1} or @var{s2} is a cell array of strings, then an array |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
705 of the same size is returned, containing the values described above for |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
706 every member of the cell array. The other argument may also be a cell |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
707 array of strings (of the same size or with only one element), char matrix |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
708 or character string. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
709 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
710 @strong{Caution:} For compatibility with @sc{matlab}, Octave's strncmpi |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
711 function returns 1 if the character strings are equal, and 0 otherwise. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
712 This is just the opposite of the corresponding C library function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
713 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
714 @strong{Caution:} National alphabets are not supported. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
715 @seealso{strncmp, strcmp, strcmpi} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
716 @end deftypefn */) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
717 { |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
718 if (args.length () != 3) |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
719 print_usage (); |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
720 |
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
721 octave_idx_type n = args(2).idx_type_value (); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
722 |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
723 if (n > 0) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
724 return ovl (do_strcmp_fun (args(0), args(1), n, "strncmpi", |
22280
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
725 octave::string::strncmpi, |
26109cce022e
New string utility functions to replace caseless_str for liboctave (bug #48726)
Carnë Draug <carandraug@octave.org>
parents:
22022
diff
changeset
|
726 octave::string::strncmpi)); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
727 else |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
728 error ("strncmpi: N must be greater than 0"); |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
729 } |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
730 |
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
731 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
732 %!assert (strncmpi ("abc123", "ABC456", 3), true) |
10108
06e11df4592d
implement built-in strcmpi/strncmpi, reduce some code duplication
Jaroslav Hajek <highegg@gmail.com>
parents:
9307
diff
changeset
|
733 */ |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
734 |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
735 DEFUN (__native2unicode__, args, , |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
736 doc: /* -*- texinfo -*- |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
737 @deftypefn {} {@var{utf8_str} =} __native2unicode__ (@var{native_bytes}, @var{codepage}) |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
738 Convert byte stream @var{native_bytes} to UTF-8 using @var{codepage}. |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
739 |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
740 @seealso{native2unicode, __unicode2native__} |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
741 @end deftypefn */) |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
742 { |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
743 int nargin = args.length (); |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
744 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
745 if (nargin != 2) |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
746 print_usage (); |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
747 |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
748 if (args(0).is_string ()) |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
749 return ovl (args(0)); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
750 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
751 std::string tmp = args(1).xstring_value ("CODEPAGE must be a string"); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
752 const char *codepage |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23396
diff
changeset
|
753 = (tmp.empty () ? octave_locale_charset_wrapper () : tmp.c_str ()); |
23396
945b53af4655
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
754 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
755 charNDArray native_bytes = args(0).char_array_value (); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
756 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
757 const char *src = native_bytes.data (); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
758 size_t srclen = native_bytes.numel (); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
759 |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
760 size_t length; |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
761 uint8_t *utf8_str = nullptr; |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
762 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
763 octave::unwind_protect frame; |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
764 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
765 frame.add_fcn (::free, static_cast<void *> (utf8_str)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
766 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
767 utf8_str = octave_u8_conv_from_encoding (codepage, src, srclen, &length); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
768 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
769 if (! utf8_str) |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
770 error ("native2unicode: converting from codepage '%s' to UTF-8: %s", |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
771 codepage, std::strerror (errno)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
772 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
773 octave_idx_type len = length; |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
774 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
775 charNDArray retval (dim_vector (1, len)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
776 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
777 for (octave_idx_type i = 0; i < len; i++) |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
778 retval.xelem(i) = utf8_str[i]; |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
779 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
780 return ovl (retval); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
781 } |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
782 |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
783 DEFUN (__unicode2native__, args, , |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
784 doc: /* -*- texinfo -*- |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
785 @deftypefn {} {@var{native_bytes} =} __unicode2native__ (@var{utf8_str}, @var{codepage}) |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
786 Convert UTF-8 string @var{utf8_str} to byte stream @var{native_bytes} using |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
787 @var{codepage}. |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
788 |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
789 @seealso{unicode2native, __native2unicode__} |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
790 @end deftypefn */) |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
791 { |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
792 int nargin = args.length (); |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
793 |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
794 if (nargin != 2) |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
795 print_usage (); |
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
796 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
797 std::string tmp = args(1).xstring_value ("CODEPAGE must be a string"); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
798 const char *codepage |
23450
855122b993da
maint: Wrap tertiary operator in parentheses "(COND ? x : y)".
Rik <rik@octave.org>
parents:
23396
diff
changeset
|
799 = (tmp.empty () ? octave_locale_charset_wrapper () : tmp.c_str ()); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
800 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
801 charNDArray utf8_str = args(0).xchar_array_value ("UTF8_STR must be a string"); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
802 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
803 const uint8_t *src = reinterpret_cast<const uint8_t *> (utf8_str.data ()); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
804 size_t srclen = utf8_str.numel (); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
805 |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
806 size_t length; |
23457
21baad6b35c4
maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents:
23450
diff
changeset
|
807 char *native_bytes = nullptr; |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
808 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
809 octave::unwind_protect frame; |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
810 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
811 frame.add_fcn (::free, static_cast<void *> (native_bytes)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
812 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
813 native_bytes = octave_u8_conv_to_encoding (codepage, src, srclen, &length); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
814 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
815 if (! native_bytes) |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
816 error ("native2unicode: converting from UTF-8 to codepage '%s': %s", |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
817 codepage, std::strerror (errno)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
818 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
819 octave_idx_type len = length; |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
820 |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
821 uint8NDArray retval (dim_vector (1, len)); |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
822 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
823 for (octave_idx_type i = 0; i < len; i++) |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
824 retval.xelem(i) = native_bytes[i]; |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
825 |
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
826 return ovl (retval); |
23122
e310b5b6da6f
Add functions native2unicode and unicode2native (bug #49842).
Markus Mützel <markus.muetzel@gmx.de>
parents:
23084
diff
changeset
|
827 } |
23123
c6ca5fe1505c
use wrappers for uniconv functions; style fixes for unicode conv fcns
John W. Eaton <jwe@octave.org>
parents:
23122
diff
changeset
|
828 |
5690 | 829 DEFUN (list_in_columns, args, , |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
830 doc: /* -*- texinfo -*- |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
831 @deftypefn {} {} list_in_columns (@var{arg}, @var{width}, @var{prefix}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
832 Return a string containing the elements of @var{arg} listed in columns with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
833 an overall maximum width of @var{width} and optional prefix @var{prefix}. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
834 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
835 The argument @var{arg} must be a cell array of character strings or a |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
836 character array. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
837 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
838 If @var{width} is not specified or is an empty matrix, or less than or equal |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
839 to zero, the width of the terminal screen is used. Newline characters are |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
840 used to break the lines in the output string. For example: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
841 @c Set example in small font to prevent overfull line |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
842 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
843 @smallexample |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
844 @group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
845 list_in_columns (@{"abc", "def", "ghijkl", "mnop", "qrs", "tuv"@}, 20) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
846 @result{} abc mnop |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
847 def qrs |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
848 ghijkl tuv |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
849 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
850 whos ans |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
851 @result{} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
852 Variables in the current scope: |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
853 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
854 Attr Name Size Bytes Class |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
855 ==== ==== ==== ===== ===== |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
856 ans 1x37 37 char |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
857 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
858 Total is 37 elements using 37 bytes |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
859 @end group |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
860 @end smallexample |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
861 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
862 @seealso{terminal_size} |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21751
diff
changeset
|
863 @end deftypefn */) |
5690 | 864 { |
865 int nargin = args.length (); | |
866 | |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
867 if (nargin < 1 || nargin > 3) |
20804
a6eaedd8bd75
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20704
diff
changeset
|
868 print_usage (); |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
869 |
20990
fc9cca99b2de
Deprecate all_strings, replace with string_vector_value.
Rik <rik@octave.org>
parents:
20940
diff
changeset
|
870 string_vector s = args(0).xstring_vector_value ("list_in_columns: ARG must be a cellstr or char array"); |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
871 |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
872 int width = -1; |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
873 |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
874 if (nargin > 1 && ! args(1).is_empty ()) |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
875 width = args(1).xint_value ("list_in_columns: WIDTH must be an integer"); |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
876 |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
877 std::string prefix; |
5690 | 878 |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
879 if (nargin > 2) |
20700
68e3a747ca02
rename octave_value value extractors that accept error message args
John W. Eaton <jwe@octave.org>
parents:
20581
diff
changeset
|
880 prefix = args(2).xstring_value ("list_in_columns: PREFIX must be a string"); |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
881 |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
882 std::ostringstream buf; |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
883 |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
884 s.list_in_columns (buf, width, prefix); |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
885 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20853
diff
changeset
|
886 return ovl (buf.str ()); |
5690 | 887 } |
888 | |
807 | 889 /* |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
890 %!test |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
891 %! input = {"abc", "def", "ghijkl", "mnop", "qrs", "tuv"}; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
892 %! result = "abc mnop\ndef qrs\nghijkl tuv\n"; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
893 %! assert (list_in_columns (input, 20), result); |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
894 %!test |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
895 %! input = ["abc"; "def"; "ghijkl"; "mnop"; "qrs"; "tuv"]; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
896 %! result = "abc mnop \ndef qrs \nghijkl tuv \n"; |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
897 %! assert (list_in_columns (input, 20), result); |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
898 %!test |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
899 %! input = ["abc"; "def"; "ghijkl"; "mnop"; "qrs"; "tuv"]; |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
900 %! result = " abc mnop \n def qrs \n ghijkl tuv \n"; |
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
901 %! assert (list_in_columns (input, 20, " "), result); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
902 |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
903 %!error list_in_columns () |
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14360
diff
changeset
|
904 %!error list_in_columns (["abc", "def"], 20, 2) |
14841
afa5e1d20671
* str-vec.h, str-vec.cc (string_vector::list_in_columns): Accept prefix.
John W. Eaton <jwe@octave.org>
parents:
14429
diff
changeset
|
905 %!error list_in_columns (["abc", "def"], 20, " ", 3) |
20704
571508c1ed06
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20700
diff
changeset
|
906 %!error <list_in_columns: WIDTH must be an integer> list_in_columns (["abc", "def"], "a") |
8461
9d456730b7a8
strfns.cc: improve documentation strings, add examples and tests
Thorsten Meyer <thorsten.meyier@gmx.de>
parents:
8372
diff
changeset
|
907 */ |