GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
op-range.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2018 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software: you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <https://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if defined (HAVE_CONFIG_H)
24 # include "config.h"
25 #endif
26 
27 #include "errwarn.h"
28 #include "ovl.h"
29 #include "ov.h"
30 #include "ov-range.h"
31 #include "ov-ch-mat.h"
32 #include "ov-scalar.h"
33 #include "ov-re-mat.h"
34 #include "ov-flt-re-mat.h"
35 #include "ov-complex.h"
36 #include "ov-cx-mat.h"
37 #include "ov-bool.h"
38 #include "ov-bool-mat.h"
39 #include "ov-typeinfo.h"
40 #include "ov-null-mat.h"
41 #include "ops.h"
42 #include "xpow.h"
43 
44 // range unary ops.
45 
46 DEFUNOP (not, range)
47 {
48  const octave_range& v = dynamic_cast<const octave_range&> (a);
49 
50  return octave_value (! v.matrix_value ());
51 }
52 
53 DEFUNOP_OP (uplus, range, /* no-op */)
54 DEFUNOP_OP (uminus, range, -)
55 
57 {
58  const octave_range& v = dynamic_cast<const octave_range&> (a);
59 
60  return octave_value (v.matrix_value ().transpose ());
61 }
62 
63 DEFBINOP_OP (addrs, range, scalar, +)
64 DEFBINOP_OP (addsr, scalar, range, +)
65 DEFBINOP_OP (subrs, range, scalar, -)
66 DEFBINOP_OP (subsr, scalar, range, -)
67 DEFBINOP_OP (mulrs, range, scalar, *)
68 DEFBINOP_OP (mulsr, scalar, range, *)
69 
71 DEFBINOP_FN (el_powcsr, complex, range, elem_xpow)
72 
76 DEFNDCATOP_FN (r_cs, range, complex, array, complex_array, concat)
77 DEFNDCATOP_FN (r_cm, range, complex_matrix, array, complex_array, concat)
79 DEFNDCATOP_FN (r_bm, range, bool_matrix, array, array, concat)
80 DEFNDCATOP_FN (r_chm, range, char_matrix, array, char_array, concat)
83 DEFNDCATOP_FN (cs_r, complex, range, complex_array, array, concat)
84 DEFNDCATOP_FN (cm_r, complex_matrix, range, complex_array, array, concat)
86 DEFNDCATOP_FN (bm_r, bool_matrix, range, array, array, concat)
87 DEFNDCATOP_FN (chm_r, char_matrix, range, char_array, array, concat)
88 
89 CONVDECL (range_to_matrix)
90 {
91  const octave_range& v = dynamic_cast<const octave_range&> (a);
92 
93  return new octave_matrix (v.array_value ());
94 }
95 
96 void
98 {
100  INSTALL_UNOP_TI (ti, op_uplus, octave_range, uplus);
101  INSTALL_UNOP_TI (ti, op_uminus, octave_range, uminus);
104 
111 
116 
132 
133  // FIXME: this would be unneccessary if
134  // octave_base_value::numeric_assign always tried converting lhs
135  // before rhs.
136 
140 
141  // However, this should probably be here just in case we need it.
142 
143  INSTALL_WIDENOP_TI (ti, octave_range, octave_matrix, range_to_matrix);
144 }
octave_value op_uplus(const octave_value &a)
Definition: ov.h:1574
#define DEFUNOP(name, t)
Definition: ops.h:213
void install_range_ops(octave::type_info &ti)
Definition: op-range.cc:97
octave_value op_el_pow(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1620
#define INSTALL_BINOP_TI(ti, op, t1, t2, f)
Definition: ops.h:53
characters Given a string matrix
Definition: hex2num.cc:155
Matrix matrix_value(bool=false) const
Definition: ov-range.h:182
nd group nd example oindent but is performed more efficiently If only and it is a scalar
Definition: data.cc:5264
static void transpose(octave_idx_type N, const octave_idx_type *ridx, const octave_idx_type *cidx, octave_idx_type *ridx2, octave_idx_type *cidx2)
Definition: symrcm.cc:386
ComplexNDArray concat(NDArray &ra, ComplexNDArray &rb, const Array< octave_idx_type > &ra_idx)
Definition: CNDArray.cc:653
#define DEFUNOP_OP(name, t, op)
Definition: ops.h:217
#define DEFBINOP_OP(name, t1, t2, op)
Definition: ops.h:269
calling an anonymous function involves an overhead quite comparable to the overhead of an m file function Passing a handle to a built in function is because the interpreter is not involved in the internal loop For a
Definition: cellfun.cc:400
#define INSTALL_UNOP_TI(ti, op, t, f)
Definition: ops.h:45
then the function must return scalars which will be concatenated into the return array(s). If code
Definition: cellfun.cc:400
Matrix transpose(void) const
Definition: dMatrix.h:132
octave_value op_not(const octave_value &a)
Definition: ov.h:1573
#define INSTALL_CATOP_TI(ti, t1, t2, f)
Definition: ops.h:58
octave_value op_transpose(const octave_value &a)
Definition: ov.h:1577
octave_value elem_xpow(double a, const SparseMatrix &b)
Definition: sparse-xpow.cc:247
#define INSTALL_ASSIGNCONV_TI(ti, t1, t2, tr)
Definition: ops.h:71
return octave_value(v1.char_array_value() . concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string()) ? '\'' :'"'))
NDArray array_value(bool=false) const
Definition: ov-range.h:188
octave_value op_add(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1603
octave_value op_sub(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1604
octave_value op_el_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1618
#define DEFBINOP_FN(name, t1, t2, f)
Definition: ops.h:324
OCTAVE_EXPORT octave_value_list or cell arrays Arguments are concatenated vertically The returned values are padded with blanks as needed to make each row of the string array have the same length Empty input strings are significant and will concatenated in the output For numerical each element is converted to the corresponding ASCII character A range error results if an input is outside the ASCII range(0-255). For cell arrays
octave_value op_hermitian(const octave_value &a)
Definition: ov.h:1578
#define INSTALL_WIDENOP_TI(ti, t1, t2, f)
Definition: ops.h:75
#define DEFNDCATOP_FN(name, t1, t2, e1, e2, f)
Definition: ops.h:382
octave_value op_uminus(const octave_value &a)
Definition: ov.h:1575
octave_value op_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1605
#define CONVDECL(name)
Definition: ops.h:202