annotate libinterp/octave-value/ov-ch-mat.cc @ 28131:4c21f99b4ad5

handle interleaved complex data and new typed data access functions for mex * mexproto.h, mex.cc, mxarray.h (mxMakeArrayReal, mxMakeArrayComplex, mxGetDoubles, mxGetSingles, mxGetInt8s, mxGetInt16s, mxGetInt32s, mxGetInt64s, mxGetUint8s, mxGetUint16s, mxGetUint32s, mxGetUint64s, mxGetComplexDoubles, mxGetComplexSingles, mxSetDoubles, mxSetSingles, mxSetInt8s, mxSetInt16s, mxSetInt32s, mxSetInt64s, mxSetUint8s, mxSetUint16s, mxSetUint32s, mxSetUint64s, mxSetComplexDoubles, mxSetComplexSingles): New functions. Provide corresponding member functions in mxArray class hierarchy to handle the actual operations. (mxGetComplexInt8s, mxGetComplexInt16s, mxGetComplexInt32s, mxGetComplexInt64s, mxGetComplexUint8s, mxGetComplexUint16s, mxGetComplexUint32s, mxGetComplexUint64s, mxSetComplexInt8s, mxSetComplexInt16s, mxSetComplexInt32s, mxSetComplexInt64s, mxSetComplexUint8s, mxSetComplexUint16s, mxSetComplexUint32s, mxSetComplexUint64s): Add prototypes and functions, but leave commented out since we don't have complex integer data. (class mxArray_number, class mxArray_sparse): Handle interleaved complex data. In mxArray_octave_value and mxArray_matlab constructors, handle interleaved flag in constructor to determine data layout to use when creating mxArray_number or mxArray_sparse objects. (mex::make_value): Check flag in mex function to determine whether to create arrays with interleaved complex. * ov.h, ov.cc, ov-base.h, ov-base.cc, ov-base-diag.h, ov-base-diag.cc, ov-bool-mat.h, ov-bool-mat.cc, ov-bool-sparse.h, ov-bool-sparse.cc, ov-bool.h, ov-bool.cc, ov-cell.h, ov-cell.cc, ov-ch-mat.h, ov-ch-mat.cc, ov-class.h, ov-class.cc, ov-complex.h, ov-complex.cc, ov-cx-mat.h, ov-cx-mat.cc, ov-cx-sparse.h, ov-cx-sparse.cc, ov-float.h, ov-float.cc, ov-flt-complex.h, ov-flt-complex.cc, ov-flt-cx-mat.h, ov-flt-cx-mat.cc, ov-flt-re-mat.h, ov-flt-re-mat.cc, ov-intx.h, ov-lazy-idx.h, ov-perm.h, ov-perm.cc, ov-range.h, ov-range.cc, ov-re-mat.h, ov-re-mat.cc, ov-re-sparse.h, ov-re-sparse.cc, ov-scalar.h, ov-scalar.cc, ov-struct.h, ov-struct.cc: In all as_mxArray methods, handle new interleaved input to optionally create objects that will use interleaved complex data.
author John W. Eaton <jwe@octave.org>
date Tue, 18 Feb 2020 13:16:41 -0500
parents bd51beb6205e
children 7854d5752dd2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27928
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
1 ////////////////////////////////////////////////////////////////////////
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
2 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
3 // Copyright (C) 1996-2020 The Octave Project Developers
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
4 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
5 // See the file COPYRIGHT.md in the top-level directory of this
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
6 // distribution or <https://octave.org/copyright/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
7 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
8 // This file is part of Octave.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
9 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
10 // Octave is free software: you can redistribute it and/or modify it
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
11 // under the terms of the GNU General Public License as published by
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
12 // the Free Software Foundation, either version 3 of the License, or
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
13 // (at your option) any later version.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
14 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
15 // Octave is distributed in the hope that it will be useful, but
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
18 // GNU General Public License for more details.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
19 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
20 // You should have received a copy of the GNU General Public License
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
21 // along with Octave; see the file COPYING. If not, see
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
22 // <https://www.gnu.org/licenses/>.
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
23 //
bd51beb6205e update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents: 27924
diff changeset
24 ////////////////////////////////////////////////////////////////////////
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
25
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
26 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
27 # include "config.h"
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
28 #endif
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
29
9941
1369f13ae6b2 several fixes by M. Goffioul
Jaroslav Hajek <highegg@gmail.com>
parents: 9813
diff changeset
30 #include <cctype>
25438
cb1606f78f6b prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents: 25415
diff changeset
31 #include <ostream>
2901
e6d25bc478dd [project @ 1997-04-30 03:41:26 by jwe]
jwe
parents: 2847
diff changeset
32
22296
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
33 #include "dNDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
34 #include "fNDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
35 #include "int8NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
36 #include "int16NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
37 #include "int32NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
38 #include "int64NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
39 #include "uint8NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
40 #include "uint16NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
41 #include "uint32NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
42 #include "uint64NDArray.h"
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
43
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
44 #include "lo-ieee.h"
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
45 #include "mx-base.h"
25413
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
46 #include "unicase-wrappers.h"
25415
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
47 #include "unictype-wrappers.h"
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
48 #include "unistr-wrappers.h"
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
49
15149
62a35ae7d6a2 use forward decls for mxArray in ov.h and ov-base.h
John W. Eaton <jwe@octave.org>
parents: 15057
diff changeset
50 #include "mxarray.h"
3219
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 3136
diff changeset
51 #include "ov-base.h"
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 3136
diff changeset
52 #include "ov-base-mat.h"
30770ba4457a [project @ 1998-11-13 03:44:31 by jwe]
jwe
parents: 3136
diff changeset
53 #include "ov-base-mat.cc"
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
54 #include "ov-ch-mat.h"
21100
e39e05d90788 Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents: 20711
diff changeset
55 #include "errwarn.h"
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
56 #include "pr-output.h"
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
57
4513
508238e65af7 [project @ 2003-09-19 21:40:57 by jwe]
jwe
parents: 4455
diff changeset
58 template class octave_base_matrix<charNDArray>;
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
59
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
60 idx_vector
18130
e473c4853afc enable non-integer ranges as indices by default and deprecate preference
John W. Eaton <jwe@octave.org>
parents: 17787
diff changeset
61 octave_char_matrix::index_vector (bool /* require_integers */) const
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
62 {
6720
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
63 const char *p = matrix.data ();
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
64 if (numel () == 1 && *p == ':')
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
65 return idx_vector (':');
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
66 else
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11523
diff changeset
67 return idx_vector (array_value (true));
6720
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
68 }
fa2f5d4e55db [project @ 2007-06-14 01:18:25 by dbateman]
dbateman
parents: 6686
diff changeset
69
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
70 double
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
71 octave_char_matrix::double_value (bool) const
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
72 {
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
73 if (rows () == 0 || columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
74 err_invalid_conversion ("character matrix", "real scalar");
4455
abbf63293766 [project @ 2003-07-11 01:01:16 by jwe]
jwe
parents: 4192
diff changeset
75
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
76 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
77 "character matrix", "real scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
78
22477
6bf1cbb90705 Remove unnecessary initializations in float_value and double_value methods
Julien Bect <julien.bect@centralesupelec.fr>
parents: 22407
diff changeset
79 return static_cast<unsigned char> (matrix(0, 0));
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
80 }
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
81
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
82 float
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
83 octave_char_matrix::float_value (bool) const
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
84 {
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
85 if (rows () == 0 && columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
86 err_invalid_conversion ("character matrix", "real scalar");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
87
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
88 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
89 "character matrix", "real scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
90
22477
6bf1cbb90705 Remove unnecessary initializations in float_value and double_value methods
Julien Bect <julien.bect@centralesupelec.fr>
parents: 22407
diff changeset
91 return static_cast<unsigned char> (matrix(0, 0));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
92 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
93
20252
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
94 octave_int64
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
95 octave_char_matrix::int64_scalar_value () const
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
96 {
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
97 octave_int64 retval = 0;
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
98
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
99 if (rows () == 0 || columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
100 err_invalid_conversion ("character matrix", "int64 scalar");
20252
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
101
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
102 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
103 "character matrix", "int64 scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
104
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
105 retval = octave_int64 (matrix(0, 0));
20252
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
106
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
107 return retval;
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
108 }
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
109
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
110 octave_uint64
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
111 octave_char_matrix::uint64_scalar_value () const
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
112 {
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
113 octave_uint64 retval = 0;
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
114
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
115 if (rows () == 0 || columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
116 err_invalid_conversion ("character matrix", "uint64 scalar");
20252
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
117
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
118 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
119 "character matrix", "uint64 scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
120
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
121 retval = octave_uint64 (matrix(0, 0));
20252
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
122
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
123 return retval;
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
124 }
7fa170cc14fe Return correct hex value for printf when used with string inputs (bug #45263).
John W. Eaton <jwe@octave.org>
parents: 19697
diff changeset
125
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
126 Complex
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
127 octave_char_matrix::complex_value (bool) const
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
128 {
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
129 if (rows () == 0 && columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
130 err_invalid_conversion ("character matrix", "complex scalar");
4455
abbf63293766 [project @ 2003-07-11 01:01:16 by jwe]
jwe
parents: 4192
diff changeset
131
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
132 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
133 "character matrix", "complex scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
134
22508
0b278f54f60a Remove unnecessary initializations in complex_value methods.
Julien Bect <jbect@users.sourceforge.net>
parents: 22477
diff changeset
135 return Complex (static_cast<unsigned char> (matrix(0, 0)), 0);
2376
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
136 }
2142216bf85a [project @ 1996-10-12 01:39:07 by jwe]
jwe
parents:
diff changeset
137
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
138 FloatComplex
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
139 octave_char_matrix::float_complex_value (bool) const
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
140 {
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
141 float tmp = lo_ieee_float_nan_value ();
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
142
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
143 FloatComplex retval (tmp, tmp);
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
144
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
145 if (rows () == 0 || columns () == 0)
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
146 err_invalid_conversion ("character matrix", "complex scalar");
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
147
21118
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
148 warn_implicit_conversion ("Octave:array-to-scalar",
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
149 "character matrix", "complex scalar");
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
150
3ac9f47fb04b Invert pattern if/code/else/err_XXX to if !/err_XXX/code.
Rik <rik@octave.org>
parents: 21100
diff changeset
151 retval = static_cast<unsigned char> (matrix(0, 0));
7789
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
152
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
153 return retval;
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
154 }
82be108cc558 First attempt at single precision tyeps
David Bateman <dbateman@free.fr>
parents: 7017
diff changeset
155
22296
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
156 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
157 octave_char_matrix::as_double (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
158 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
159 return NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
160 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
161
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
162 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
163 octave_char_matrix::as_single (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
164 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
165 return FloatNDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
166 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
167
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
168 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
169 octave_char_matrix::as_int8 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
170 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
171 return int8NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
172 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
173
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
174 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
175 octave_char_matrix::as_int16 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
176 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
177 return int16NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
178 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
179
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
180 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
181 octave_char_matrix::as_int32 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
182 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
183 return int32NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
184 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
185
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
186 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
187 octave_char_matrix::as_int64 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
188 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
189 return int64NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
190 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
191
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
192 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
193 octave_char_matrix::as_uint8 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
194 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
195 return uint8NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
196 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
197
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
198 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
199 octave_char_matrix::as_uint16 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
200 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
201 return uint16NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
202 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
203
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
204 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
205 octave_char_matrix::as_uint32 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
206 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
207 return uint32NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
208 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
209
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
210 octave_value
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
211 octave_char_matrix::as_uint64 (void) const
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
212 {
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
213 return uint64NDArray (matrix);
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
214 }
8b18f46f6427 revamp double, single, int type conversions
John W. Eaton <jwe@octave.org>
parents: 22197
diff changeset
215
4643
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
216 void
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
217 octave_char_matrix::print_raw (std::ostream& os,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
218 bool pr_as_read_syntax) const
4643
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
219 {
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
220 octave_print_internal (os, matrix, pr_as_read_syntax,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10160
diff changeset
221 current_print_indent_level ());
4643
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
222 }
ef3a14fb6847 [project @ 2003-11-22 12:25:44 by jwe]
jwe
parents: 4612
diff changeset
223
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
224 mxArray *
28131
4c21f99b4ad5 handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
225 octave_char_matrix::as_mxArray (bool interleaved) const
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
226 {
28131
4c21f99b4ad5 handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
227 mxArray *retval = new mxArray (interleaved, mxCHAR_CLASS, dims (), mxREAL);
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
228
28131
4c21f99b4ad5 handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
229 mxChar *pd = static_cast<mxChar *> (retval->get_data ());
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
230
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 5900
diff changeset
231 mwSize nel = numel ();
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
232
28131
4c21f99b4ad5 handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
233 const char *pdata = matrix.data ();
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
234
6686
2aad75fcc93a [project @ 2007-06-03 20:58:28 by dbateman]
dbateman
parents: 5900
diff changeset
235 for (mwIndex i = 0; i < nel; i++)
28131
4c21f99b4ad5 handle interleaved complex data and new typed data access functions for mex
John W. Eaton <jwe@octave.org>
parents: 27928
diff changeset
236 pd[i] = pdata[i];
5900
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
237
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
238 return retval;
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
239 }
c20eb7330d13 [project @ 2006-07-22 08:31:16 by jwe]
jwe
parents: 5781
diff changeset
240
15491
c9844b82945f reformat interesting comment
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15452
diff changeset
241 // The C++ standard guarantees cctype defines functions, not macros (and
c9844b82945f reformat interesting comment
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 15452
diff changeset
242 // hence macros *CAN'T* be defined if only cctype is included) so
15850
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
243 // there's no need to fuck around. The exceptions are isascii and
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
244 // toascii, which are not C++. Oddly enough, all those character
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
245 // functions are int (*) (int), even in C++. Wicked!
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
246 static inline int xisascii (int c)
15850
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
247 {
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
248 #if defined (HAVE_ISASCII)
15850
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
249 return isascii (c);
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
250 #else
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
251 return (c >= 0x00 && c <= 0x7f);
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
252 #endif
ffd1a99733bd build: Check for isascii() before using it.
Rik <rik@octave.org>
parents: 15501
diff changeset
253 }
9689
34d6f005db4b eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents: 8956
diff changeset
254
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
255 octave_value
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
256 octave_char_matrix::map (unary_mapper_t umap) const
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
257 {
15501
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
258 octave_value retval;
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
259
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
260 switch (umap)
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
261 {
22407
34ce5be04942 maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents: 22323
diff changeset
262 #define STRING_MAPPER(UMAP,FCN,TYPE) \
34ce5be04942 maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents: 22323
diff changeset
263 case umap_ ## UMAP: \
34ce5be04942 maint: Style check C++ code in libinterp/.
Rik <rik@octave.org>
parents: 22323
diff changeset
264 return octave_value (matrix.map<TYPE, int (&) (int)> (FCN))
9689
34d6f005db4b eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents: 8956
diff changeset
265
9813
8fa32b527d9a improve & partially revert previous change
Jaroslav Hajek <highegg@gmail.com>
parents: 9812
diff changeset
266 STRING_MAPPER (xisascii, xisascii, bool);
25415
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
267
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
268 #define STRING_U8_MAPPER(UMAP,FCN) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
269 case umap_ ## UMAP: \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
270 { \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
271 charNDArray in_m = matrix; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
272 Array<octave_idx_type> p (dim_vector (matrix.ndims (), 1)); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
273 if (matrix.ndims () > 1) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
274 { \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
275 for (octave_idx_type i=0; i < matrix.ndims (); i++) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
276 p(i) = i; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
277 p(0) = 1; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
278 p(1) = 0; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
279 in_m = matrix.permute (p); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
280 } \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
281 boolNDArray b_array = boolNDArray (in_m.dims ()); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
282 const uint8_t *in = reinterpret_cast<const uint8_t *> (in_m.data ()); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
283 uint32_t uc; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
284 for (octave_idx_type i = 0; i < in_m.numel (); ) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
285 { \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
286 int mblen = octave_u8_strmbtouc_wrapper (&uc, in + i); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
287 if (mblen < 1) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
288 mblen = 1; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
289 bool is_upper = FCN (uc); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
290 for (int j = 0; j < mblen; j++) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
291 b_array(i+j) = is_upper; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
292 i += mblen; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
293 } \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
294 return octave_value ((matrix.ndims () > 1) ? b_array.permute (p, true) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
295 : b_array); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
296 }
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
297
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
298 STRING_U8_MAPPER (xisalnum, octave_uc_is_alnum_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
299 STRING_U8_MAPPER (xisalpha, octave_uc_is_alpha_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
300 STRING_U8_MAPPER (xiscntrl, octave_uc_is_cntrl_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
301 STRING_U8_MAPPER (xisdigit, octave_uc_is_digit_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
302 STRING_U8_MAPPER (xisgraph, octave_uc_is_graph_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
303 STRING_U8_MAPPER (xislower, octave_uc_is_lower_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
304 STRING_U8_MAPPER (xisprint, octave_uc_is_print_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
305 STRING_U8_MAPPER (xispunct, octave_uc_is_punct_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
306 STRING_U8_MAPPER (xisspace, octave_uc_is_space_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
307 STRING_U8_MAPPER (xisupper, octave_uc_is_upper_wrapper);
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
308 STRING_U8_MAPPER (xisxdigit, octave_uc_is_xdigit_wrapper);
25413
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
309
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
310 #define STRING_U8_FCN(UMAP,U8_FCN,STD_FCN) \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
311 case umap_ ## UMAP: \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
312 { \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
313 charNDArray in_m = matrix; \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
314 Array<octave_idx_type> p (dim_vector (matrix.ndims (), 1)); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
315 if (matrix.ndims () > 1) \
25415
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
316 { \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
317 for (octave_idx_type i=0; i < matrix.ndims (); i++) \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
318 p(i) = i; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
319 p(0) = 1; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
320 p(1) = 0; \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
321 in_m = matrix.permute (p); \
d4bc8590b5cf Make "is*" string functions Unicode aware.
Markus Mützel <markus.muetzel@gmx.de>
parents: 25413
diff changeset
322 } \
25413
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
323 size_t output_length = in_m.numel (); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
324 charNDArray ch_array = charNDArray (in_m.dims ()); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
325 const uint8_t *in = reinterpret_cast<const uint8_t *> (in_m.data ()); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
326 uint8_t *buf = reinterpret_cast<uint8_t *> (ch_array.fortran_vec ()); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
327 U8_FCN (in, matrix.numel (), nullptr, buf, &output_length); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
328 if (output_length != static_cast<size_t> (matrix.numel ())) \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
329 { \
27072
0a62d9a6aa2d Place Octave's warning and error IDs in to the "Octave" namespace (bug #56213).
Rik <rik@octave.org>
parents: 26379
diff changeset
330 warning_with_id ("Octave:multi_byte_char_length", \
25413
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
331 "UMAP: Possible multi-byte error."); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
332 return octave_value (matrix.map<char, int (&) (int)> (STD_FCN)); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
333 } \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
334 return octave_value ((matrix.ndims () > 1) ? ch_array.permute (p, true)\
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
335 : ch_array); \
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
336 }
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
337
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
338 STRING_U8_FCN (xtolower, octave_u8_tolower_wrapper, std::tolower);
39cf8145405f Make "tolower" and "toupper" Unicode aware (bug #53873).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25054
diff changeset
339 STRING_U8_FCN (xtoupper, octave_u8_toupper_wrapper, std::toupper);
9689
34d6f005db4b eliminate is_string argument from octave_value character array constructors
John W. Eaton <jwe@octave.org>
parents: 8956
diff changeset
340
20711
7b608fadc663 Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents: 20252
diff changeset
341 // For Matlab compatibility, these should work on ASCII values
7b608fadc663 Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents: 20252
diff changeset
342 // without error or warning.
15501
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
343 case umap_abs:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
344 case umap_ceil:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
345 case umap_fix:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
346 case umap_floor:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
347 case umap_imag:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
348 case umap_isinf:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
349 case umap_isnan:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
350 case umap_real:
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
351 case umap_round:
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
352 {
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
353 octave_matrix m (array_value (true));
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
354 return m.map (umap);
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
355 }
15501
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
356
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
357 default:
20711
7b608fadc663 Make error messages more specific about the variable and problem encountered.
Rik <rik@octave.org>
parents: 20252
diff changeset
358 error ("%s: argument must be numeric", get_umap_name (umap));
15501
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
359 break;
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
360 }
15501
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
361
814c4b0d5c49 make numeric mapper functions throw error for char args (bug #37535)
John W. Eaton <jwe@octave.org>
parents: 15491
diff changeset
362 return retval;
9812
f80c566bc751 improve unary mapper system
Jaroslav Hajek <highegg@gmail.com>
parents: 9690
diff changeset
363 }