GNU Octave  4.0.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
op-range.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2015 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 the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26 
27 #include "gripes.h"
28 #include "oct-obj.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  CAST_UNOP_ARG (const octave_range&);
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  CAST_UNOP_ARG (const octave_range&);
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 
70 DEFBINOP_FN (el_powsr, scalar, range, elem_xpow)
71 DEFBINOP_FN (el_powcsr, complex, range, elem_xpow)
72 
73 DEFNDCATOP_FN (r_r, range, range, array, array, concat)
74 DEFNDCATOP_FN (r_s, range, scalar, array, array, concat)
75 DEFNDCATOP_FN (r_m, range, matrix, array, array, concat)
76 DEFNDCATOP_FN (r_cs, range, complex, array, complex_array, concat)
77 DEFNDCATOP_FN (r_cm, range, complex_matrix, array, complex_array, concat)
78 DEFNDCATOP_FN (r_b, range, bool, array, 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)
81 DEFNDCATOP_FN (s_r, scalar, range, array, array, concat)
82 DEFNDCATOP_FN (m_r, matrix, range, array, 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)
85 DEFNDCATOP_FN (b_r, bool, range, 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  CAST_CONV_ARG (const octave_range&);
92 
93  return new octave_matrix (v.array_value ());
94 }
95 
96 void
98 {
104 
111 
114 
130 
131  // FIXME: this would be unneccessary if
132  // octave_base_value::numeric_assign always tried converting lhs
133  // before rhs.
134 
138 
139  // However, this should probably be here just in case we need it.
140 
141  INSTALL_WIDENOP (octave_range, octave_matrix, range_to_matrix);
142 }
octave_value op_uplus(const octave_value &a)
Definition: ov.h:1294
#define DEFUNOP(name, t)
Definition: ops.h:231
octave_value op_el_pow(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1342
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:382
ComplexNDArray concat(NDArray &ra, ComplexNDArray &rb, const Array< octave_idx_type > &ra_idx)
Definition: CNDArray.cc:664
#define INSTALL_WIDENOP(t1, t2, f)
Definition: ops.h:72
#define DEFUNOP_OP(name, t, op)
Definition: ops.h:234
#define DEFBINOP_OP(name, t1, t2, op)
Definition: ops.h:282
#define INSTALL_BINOP(op, t1, t2, f)
Definition: ops.h:46
#define CAST_CONV_ARG(t)
Definition: ops.h:83
octave_value op_not(const octave_value &a)
Definition: ov.h:1293
octave_value op_transpose(const octave_value &a)
Definition: ov.h:1297
octave_value elem_xpow(double a, const SparseMatrix &b)
Definition: sparse-xpow.cc:258
void install_range_ops(void)
Definition: op-range.cc:97
#define INSTALL_CATOP(t1, t2, f)
Definition: ops.h:51
octave_value op_add(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1323
#define INSTALL_UNOP(op, t, f)
Definition: ops.h:38
octave_value op_sub(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1324
#define CAST_UNOP_ARG(t)
Definition: ops.h:76
#define DEFBINOP_FN(name, t1, t2, f)
Definition: ops.h:323
octave_value op_hermitian(const octave_value &a)
Definition: ov.h:1298
#define INSTALL_ASSIGNCONV(t1, t2, tr)
Definition: ops.h:64
#define DEFNDCATOP_FN(name, t1, t2, e1, e2, f)
Definition: ops.h:364
octave_value op_uminus(const octave_value &a)
Definition: ov.h:1295
octave_value op_mul(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1325
#define CONVDECL(name)
Definition: ops.h:166
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))
static bool scalar(const dim_vector &dims)
Definition: ov-struct.cc:736