Mercurial > octave
annotate libinterp/corefcn/typecast.cc @ 20939:b17fda023ca6
maint: Use new C++ archetype in more files.
Place input validation first in files.
Move declaration of retval down in function to be closer to point of usage.
Eliminate else clause after if () error.
Use "return ovl()" where it makes sense.
* find.cc, gammainc.cc, gcd.cc, getgrent.cc, getpwent.cc, givens.cc,
graphics.cc, help.cc, hess.cc, hex2num.cc, input.cc, kron.cc, load-path.cc,
load-save.cc, lookup.cc, mappers.cc, matrix_type.cc, mgorth.cc, nproc.cc,
ordschur.cc, pager.cc, pinv.cc, pr-output.cc, profiler.cc, psi.cc, quad.cc,
rcond.cc, regexp.cc, schur.cc, sighandlers.cc, sparse.cc, str2double.cc,
strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symtab.cc,
syscalls.cc, sysdep.cc, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc,
urlwrite.cc, utils.cc, variables.cc, __delaunayn__.cc, __eigs__.cc,
__glpk__.cc, __magick_read__.cc, __osmesa_print__.cc, __voronoi__.cc, amd.cc,
audiodevinfo.cc, audioread.cc, chol.cc, colamd.cc, dmperm.cc, fftw.cc, qr.cc,
symbfact.cc, symrcm.cc, ov-bool-mat.cc, ov-cell.cc, ov-class.cc,
ov-classdef.cc, ov-fcn-handle.cc, ov-fcn-inline.cc, ov-flt-re-mat.cc,
ov-java.cc, ov-null-mat.cc, ov-oncleanup.cc, ov-re-mat.cc, ov-struct.cc,
ov-typeinfo.cc, ov-usr-fcn.cc, ov.cc, octave.cc:
Use new C++ archetype in more files.
author | Rik <rik@octave.org> |
---|---|
date | Fri, 18 Dec 2015 15:37:22 -0800 |
parents | 4d3daf7e43f3 |
children | 48b2ad5ee801 |
rev | line source |
---|---|
6869 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19174
diff
changeset
|
3 Copyright (C) 2007-2015 David Bateman |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
4 Copyright (C) 2009 VZLU Prague |
6869 | 5 |
6 This file is part of Octave. | |
7 | |
8 Octave is free software; you can redistribute it and/or modify it | |
9 under the terms of the GNU General Public License as published by the | |
7016 | 10 Free Software Foundation; either version 3 of the License, or (at your |
11 option) any later version. | |
6869 | 12 |
13 Octave is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
16 for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
7016 | 19 along with Octave; see the file COPYING. If not, see |
20 <http://www.gnu.org/licenses/>. | |
6869 | 21 |
22 */ | |
23 | |
24 #ifdef HAVE_CONFIG_H | |
25 #include <config.h> | |
26 #endif | |
27 | |
17396 | 28 #include <limits> |
15289
27bdffcb41c5
*typecast.cc: Include <climits> for CHAR_BIT.
Júlio Hoffimann <julio.hoffimann@gmail.com>
parents:
15195
diff
changeset
|
29 |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
30 #include "mx-base.h" |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
31 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14360
diff
changeset
|
32 #include "defun.h" |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
33 #include "error.h" |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
34 #include "gripes.h" |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
35 #include "oct-obj.h" |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
36 #include "unwind-prot.h" |
6869 | 37 |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
38 static dim_vector |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
39 get_vec_dims (const dim_vector& old_dims, octave_idx_type n) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
40 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
41 if (old_dims.length () == 2 && old_dims(0) == 1) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
42 return dim_vector (1, n); |
20218
b2100e1659ac
maint: Use cuddled parentheses when indexing dimension_vectors.
Rik <rik@octave.org>
parents:
20172
diff
changeset
|
43 else if (old_dims.length () == 2 && old_dims(0) == 0 && old_dims(1) == 0) |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
44 return dim_vector (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
45 else |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
46 return dim_vector (n, 1); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
47 } |
6869 | 48 |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
49 template <class ArrayType> |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11572
diff
changeset
|
50 static void |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
51 get_data_and_bytesize (const ArrayType& array, |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
52 const void *& data, |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
53 octave_idx_type& byte_size, |
10066
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
9758
diff
changeset
|
54 dim_vector& old_dims, |
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
9758
diff
changeset
|
55 unwind_protect& frame) |
6869 | 56 { |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
57 // The array given may be a temporary, constructed from a scalar or sparse |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
58 // array. This will ensure the data will be deallocated after we exit. |
10066
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
9758
diff
changeset
|
59 frame.add_delete (new ArrayType (array)); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
60 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
61 data = reinterpret_cast<const void *> (array.data ()); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
62 byte_size = array.byte_size (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
63 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
64 old_dims = array.dims (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
65 } |
6869 | 66 |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
67 template <class ArrayType> |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
68 static ArrayType |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
69 reinterpret_copy (const void *data, octave_idx_type byte_size, |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
70 const dim_vector& old_dims) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
71 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
72 typedef typename ArrayType::element_type T; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
73 octave_idx_type n = byte_size / sizeof (T); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
74 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
75 if (n * static_cast<int> (sizeof (T)) == byte_size) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
76 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
77 ArrayType retval (get_vec_dims (old_dims, n)); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
78 T *dest = retval.fortran_vec (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
79 std::memcpy (dest, data, n * sizeof (T)); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
80 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
81 return retval; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
82 } |
6869 | 83 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
84 error ("typecast: incorrect number of input values to make output value"); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
85 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
86 return ArrayType (); |
6869 | 87 } |
88 | |
89 | |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14360
diff
changeset
|
90 DEFUN (typecast, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
91 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
92 @deftypefn {} {@var{y} =} typecast (@var{x}, \"@var{class}\")\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
93 Return a new array @var{y} resulting from interpreting the data of @var{x}\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
94 in memory as data of the numeric class @var{class}.\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
95 \n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
96 Both the class of @var{x} and @var{class} must be one of the built-in\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
97 numeric classes:\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
98 \n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
99 @example\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
100 @group\n\ |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
101 \"logical\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
102 \"char\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
103 \"int8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
104 \"int16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
105 \"int32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
106 \"int64\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
107 \"uint8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
108 \"uint16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
109 \"uint32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
110 \"uint64\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
111 \"double\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
112 \"single\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
113 \"double complex\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
114 \"single complex\"\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
115 @end group\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
116 @end example\n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
117 \n\ |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
118 @noindent\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
119 the last two are only used with @var{class}; they indicate that a\n\ |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
120 complex-valued result is requested. Complex arrays are stored in memory as\n\ |
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
121 consecutive pairs of real numbers. The sizes of integer types are given by\n\ |
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
122 their bit counts. Both logical and char are typically one byte wide;\n\ |
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
123 however, this is not guaranteed by C++. If your system is IEEE conformant,\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
124 single and double will be 4 bytes and 8 bytes wide, respectively.\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
125 @qcode{\"logical\"} is not allowed for @var{class}.\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
126 \n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
127 If the input is a row vector, the return value is a row vector, otherwise it\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
128 is a column vector.\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
129 \n\ |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
15545
diff
changeset
|
130 If the bit length of @var{x} is not divisible by that of @var{class}, an\n\ |
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
15545
diff
changeset
|
131 error occurs.\n\ |
6869 | 132 \n\ |
133 An example of the use of typecast on a little-endian machine is\n\ | |
134 \n\ | |
135 @example\n\ | |
136 @group\n\ | |
137 @var{x} = uint16 ([1, 65535]);\n\ | |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
138 typecast (@var{x}, \"uint8\")\n\ |
15542
69f45f3ab96a
Correct big-endian/little-endian reversal in typecast documentation.
Rik <rik@octave.org>
parents:
14138
diff
changeset
|
139 @result{} [ 1, 0, 255, 255]\n\ |
6869 | 140 @end group\n\ |
141 @end example\n\ | |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
142 @seealso{cast, bitpack, bitunpack, swapbytes}\n\ |
6869 | 143 @end deftypefn") |
144 { | |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
145 if (args.length () != 2) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
146 print_usage (); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
147 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
148 octave_value retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
149 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
150 unwind_protect frame; |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
151 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
152 const void *data = 0; |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
153 octave_idx_type byte_size = 0; |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
154 dim_vector old_dims; |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
155 |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
156 octave_value array = args(0); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
157 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
158 if (array.is_bool_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
159 get_data_and_bytesize (array.bool_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
160 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
161 else if (array.is_string ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
162 get_data_and_bytesize (array.char_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
163 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
164 else if (array.is_integer_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
165 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
166 if (array.is_int8_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
167 get_data_and_bytesize (array.int8_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
168 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
169 else if (array.is_int16_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
170 get_data_and_bytesize (array.int16_array_value (), data, byte_size, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
171 old_dims, frame); |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
172 else if (array.is_int32_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
173 get_data_and_bytesize (array.int32_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
174 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
175 else if (array.is_int64_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
176 get_data_and_bytesize (array.int64_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
177 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
178 else if (array.is_uint8_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
179 get_data_and_bytesize (array.uint8_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
180 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
181 else if (array.is_uint16_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
182 get_data_and_bytesize (array.uint16_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
183 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
184 else if (array.is_uint32_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
185 get_data_and_bytesize (array.uint32_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
186 old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
187 else if (array.is_uint64_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
188 get_data_and_bytesize (array.uint64_array_value (), data, byte_size, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
189 old_dims, frame); |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
190 else |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
191 assert (0); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
192 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
193 else if (array.is_complex_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
194 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
195 if (array.is_single_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
196 get_data_and_bytesize (array.float_complex_array_value (), data, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
197 byte_size, old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
198 else |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
199 get_data_and_bytesize (array.complex_array_value (), data, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
200 byte_size, old_dims, frame); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
201 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
202 else if (array.is_real_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
203 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
204 if (array.is_single_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
205 get_data_and_bytesize (array.float_array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
206 old_dims, frame); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
207 else |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
208 get_data_and_bytesize (array.array_value (), data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
209 old_dims, frame); } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
210 else |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
211 error ("typecast: invalid input class: %s", |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
212 array.class_name ().c_str ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
213 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
214 std::string numclass = args(1).string_value (); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
215 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
216 if (numclass.size () == 0) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
217 ; |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
218 else if (numclass == "char") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
219 retval = octave_value (reinterpret_copy<charNDArray> |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
220 (data, byte_size, old_dims), array.is_dq_string () ? '"' |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
221 : '\''); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
222 else if (numclass[0] == 'i') |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
223 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
224 if (numclass == "int8") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
225 retval = reinterpret_copy<int8NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
226 else if (numclass == "int16") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
227 retval = reinterpret_copy<int16NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
228 else if (numclass == "int32") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
229 retval = reinterpret_copy<int32NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
230 else if (numclass == "int64") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
231 retval = reinterpret_copy<int64NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
232 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
233 else if (numclass[0] == 'u') |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
234 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
235 if (numclass == "uint8") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
236 retval = reinterpret_copy<uint8NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
237 else if (numclass == "uint16") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
238 retval = reinterpret_copy<uint16NDArray> (data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
239 old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
240 else if (numclass == "uint32") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
241 retval = reinterpret_copy<uint32NDArray> (data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
242 old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
243 else if (numclass == "uint64") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
244 retval = reinterpret_copy<uint64NDArray> (data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
245 old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
246 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
247 else if (numclass == "single") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
248 retval = reinterpret_copy<FloatNDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
249 else if (numclass == "double") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
250 retval = reinterpret_copy<NDArray> (data, byte_size, old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
251 else if (numclass == "single complex") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
252 retval = reinterpret_copy<FloatComplexNDArray> (data, byte_size, |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
253 old_dims); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
254 else if (numclass == "double complex") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
255 retval = reinterpret_copy<ComplexNDArray> (data, byte_size, old_dims); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
256 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
257 if (retval.is_undefined ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
258 error ("typecast: cannot convert to %s class", numclass.c_str ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
259 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
260 return retval; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
261 } |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
262 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
263 template <class ArrayType> |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
264 ArrayType |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
265 do_bitpack (const boolNDArray& bitp) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
266 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
267 typedef typename ArrayType::element_type T; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
268 octave_idx_type n |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
269 = bitp.numel () / (sizeof (T) * std::numeric_limits<unsigned char>::digits); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
270 |
17396 | 271 if (n * static_cast<int> (sizeof (T)) * std::numeric_limits<unsigned char>::digits == bitp.numel ()) |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
272 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
273 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
274 ArrayType retval (get_vec_dims (bitp.dims (), n)); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
275 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
276 const bool *bits = bitp.fortran_vec (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
277 char *packed = reinterpret_cast<char *> (retval.fortran_vec ()); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
278 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
279 octave_idx_type m = n * sizeof (T); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
280 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
281 for (octave_idx_type i = 0; i < m; i++) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
282 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
283 char c = bits[0]; |
17396 | 284 for (int j = 1; j < std::numeric_limits<unsigned char>::digits; j++) |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
285 c |= bits[j] << j; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
286 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
287 packed[i] = c; |
17396 | 288 bits += std::numeric_limits<unsigned char>::digits; |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
289 } |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
290 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
291 return retval; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
292 } |
6869 | 293 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
294 error ("bitpack: incorrect number of bits to make up output value"); |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
295 |
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20800
diff
changeset
|
296 return ArrayType (); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
297 } |
6869 | 298 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14360
diff
changeset
|
299 DEFUN (bitpack, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
300 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
301 @deftypefn {} {@var{y} =} bitpack (@var{x}, @var{class})\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
302 Return a new array @var{y} resulting from interpreting the logical array\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
303 @var{x} as raw bit patterns for data of the numeric class @var{class}.\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
304 \n\ |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
305 @var{class} must be one of the built-in numeric classes:\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
306 \n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
307 @example\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
308 @group\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
309 \"double\"\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
310 \"single\"\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
311 \"double complex\"\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
312 \"single complex\"\n\ |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
313 \"char\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
314 \"int8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
315 \"int16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
316 \"int32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
317 \"int64\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
318 \"uint8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
319 \"uint16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
320 \"uint32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
321 \"uint64\"\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
322 @end group\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
323 @end example\n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
324 \n\ |
10840 | 325 The number of elements of @var{x} should be divisible by the bit length of\n\ |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
326 @var{class}. If it is not, excess bits are discarded. Bits come in\n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
327 increasing order of significance, i.e., @code{x(1)} is bit 0, @code{x(2)} is\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
328 bit 1, etc.\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
329 \n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
330 The result is a row vector if @var{x} is a row vector, otherwise it is a\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
331 column vector.\n\ |
11572
7d6d8c1e471f
Grammarcheck Texinfo for files in src directory.
Rik <octave@nomad.inbox5.com>
parents:
11553
diff
changeset
|
332 @seealso{bitunpack, typecast}\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
333 @end deftypefn") |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
334 { |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
335 if (args.length () != 2) |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
336 print_usage (); |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
337 |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
338 if (! args(0).is_bool_type ()) |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
339 error ("bitpack: X must be a logical array"); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
340 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
341 octave_value retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
342 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
343 boolNDArray bitp = args(0).bool_array_value (); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
344 |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
345 std::string numclass = args(1).string_value (); |
6869 | 346 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
347 if (numclass.size () == 0) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
348 ; |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
349 else if (numclass == "char") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
350 retval = octave_value (do_bitpack<charNDArray> (bitp), '\''); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
351 else if (numclass[0] == 'i') |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
352 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
353 if (numclass == "int8") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
354 retval = do_bitpack<int8NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
355 else if (numclass == "int16") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
356 retval = do_bitpack<int16NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
357 else if (numclass == "int32") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
358 retval = do_bitpack<int32NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
359 else if (numclass == "int64") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
360 retval = do_bitpack<int64NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
361 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
362 else if (numclass[0] == 'u') |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
363 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
364 if (numclass == "uint8") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
365 retval = do_bitpack<uint8NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
366 else if (numclass == "uint16") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
367 retval = do_bitpack<uint16NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
368 else if (numclass == "uint32") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
369 retval = do_bitpack<uint32NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
370 else if (numclass == "uint64") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
371 retval = do_bitpack<uint64NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
372 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
373 else if (numclass == "single") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
374 retval = do_bitpack<FloatNDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
375 else if (numclass == "double") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
376 retval = do_bitpack<NDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
377 else if (numclass == "single complex") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
378 retval = do_bitpack<FloatComplexNDArray> (bitp); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
379 else if (numclass == "double complex") |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
380 retval = do_bitpack<ComplexNDArray> (bitp); |
6869 | 381 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
382 if (retval.is_undefined ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
383 error ("bitpack: cannot pack to %s class", numclass.c_str ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
384 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
385 return retval; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
386 } |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
387 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
388 template <class ArrayType> |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
389 boolNDArray |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
390 do_bitunpack (const ArrayType& array) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
391 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
392 typedef typename ArrayType::element_type T; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
393 octave_idx_type n = array.numel () * sizeof (T) |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
394 * std::numeric_limits<unsigned char>::digits; |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
395 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
396 boolNDArray retval (get_vec_dims (array.dims (), n)); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
397 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
398 const char *packed = reinterpret_cast<const char *> (array.fortran_vec ()); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
399 bool *bits = retval.fortran_vec (); |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
400 |
17396 | 401 octave_idx_type m = n / std::numeric_limits<unsigned char>::digits; |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
402 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
403 for (octave_idx_type i = 0; i < m; i++) |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
404 { |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
405 char c = packed[i]; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
406 bits[0] = c & 1; |
17396 | 407 for (int j = 1; j < std::numeric_limits<unsigned char>::digits; j++) |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
408 bits[j] = (c >>= 1) & 1; |
17396 | 409 bits += std::numeric_limits<unsigned char>::digits; |
6869 | 410 } |
411 | |
412 return retval; | |
413 } | |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
414 |
15039
e753177cde93
maint: Move non-dynamically linked functions from DLD-FUNCTIONS/ to corefcn/ directory
Rik <rik@octave.org>
parents:
14360
diff
changeset
|
415 DEFUN (bitunpack, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
416 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
417 @deftypefn {} {@var{y} =} bitunpack (@var{x})\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
418 Return a logical array @var{y} corresponding to the raw bit patterns of\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
419 @var{x}.\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
420 \n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
421 @var{x} must belong to one of the built-in numeric classes:\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
422 \n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
423 @example\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
424 @group\n\ |
19174
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
425 \"double\"\n\ |
6f3e922c5197
doc: Improve docstrings for typecast, bitpack, bitunpack.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
426 \"single\"\n\ |
14360
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
427 \"char\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
428 \"int8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
429 \"int16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
430 \"int32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
431 \"int64\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
432 \"uint8\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
433 \"uint16\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
434 \"uint32\"\n\ |
97883071e8e4
doc: Correct off-by-1 spacings in all .cc docstrings
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
435 \"uint64\"\n\ |
9758
09da0bd91412
Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents:
9689
diff
changeset
|
436 @end group\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
437 @end example\n\ |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
438 \n\ |
11553
01f703952eff
Improve docstrings for functions in DLD-FUNCTIONS directory.
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
439 The result is a row vector if @var{x} is a row vector; otherwise, it is a\n\ |
10846
a4f482e66b65
Grammarcheck more of the documentation.
Rik <octave@nomad.inbox5.com>
parents:
10840
diff
changeset
|
440 column vector.\n\ |
11572
7d6d8c1e471f
Grammarcheck Texinfo for files in src directory.
Rik <octave@nomad.inbox5.com>
parents:
11553
diff
changeset
|
441 @seealso{bitpack, typecast}\n\ |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
442 @end deftypefn") |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
443 { |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
444 if (args.length () != 1) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
445 print_usage (); |
20921
4d3daf7e43f3
eliminate trailing whitespace in source files
John W. Eaton <jwe@octave.org>
parents:
20853
diff
changeset
|
446 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
447 if (! (args(0).is_numeric_type () || args(0).is_string ())) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
448 error ("bitunpack: argument must be a number or a string"); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
449 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
450 octave_value retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20921
diff
changeset
|
451 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
452 octave_value array = args(0); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
453 |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
454 if (array.is_string ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
455 retval = do_bitunpack (array.char_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
456 else if (array.is_integer_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
457 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
458 if (array.is_int8_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
459 retval = do_bitunpack (array.int8_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
460 else if (array.is_int16_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
461 retval = do_bitunpack (array.int16_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
462 else if (array.is_int32_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
463 retval = do_bitunpack (array.int32_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
464 else if (array.is_int64_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
465 retval = do_bitunpack (array.int64_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
466 else if (array.is_uint8_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
467 retval = do_bitunpack (array.uint8_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
468 else if (array.is_uint16_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
469 retval = do_bitunpack (array.uint16_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
470 else if (array.is_uint32_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
471 retval = do_bitunpack (array.uint32_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
472 else if (array.is_uint64_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
473 retval = do_bitunpack (array.uint64_array_value ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
474 else |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
475 assert (0); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
476 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
477 else if (array.is_complex_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
478 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
479 if (array.is_single_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
480 retval = do_bitunpack (array.float_complex_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
481 else |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
482 retval = do_bitunpack (array.complex_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
483 } |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
484 else if (array.is_real_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
485 { |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
486 if (array.is_single_type ()) |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
487 retval = do_bitunpack (array.float_array_value ()); |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
488 else |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
489 retval = do_bitunpack (array.array_value ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
490 } |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
491 else |
20800
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
492 error ("bitunpack: invalid input class: %s", |
fb128aafc322
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
493 array.class_name ().c_str ()); |
9671
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
494 |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
495 return retval; |
e4b383a0effa
merge reinterpret.cc into typecast.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
9036
diff
changeset
|
496 } |