GNU Octave  3.8.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-2013 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 }