GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
libinterp
operators
op-m-s.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-re-mat.h
"
31
#include "
ov-flt-re-mat.h
"
32
#include "
ov-flt-cx-mat.h
"
33
#include "
ov-scalar.h
"
34
#include "
ov-typeinfo.h
"
35
#include "
ops.h
"
36
#include "
xdiv.h
"
37
#include "
xpow.h
"
38
39
// matrix by scalar ops.
40
41
DEFNDBINOP_OP
(add, matrix,
scalar
, array,
scalar
, +)
42
DEFNDBINOP_OP
(sub, matrix,
scalar
, array, scalar, -)
43
DEFNDBINOP_OP
(mul, matrix, scalar, array, scalar, *)
44
45
DEFBINOP
(div, matrix, scalar)
46
{
47
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_scalar
&);
48
49
double
d
=
v2
.
double_value
();
50
51
if
(d == 0.0)
52
gripe_divide_by_zero
();
53
54
return
octave_value
(
v1
.
array_value
() /
d
);
55
}
56
57
DEFBINOP_FN
(
pow
, matrix,
scalar
,
xpow
)
58
59
DEFBINOP
(ldiv, matrix,
scalar
)
60
{
61
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_scalar
&);
62
63
Matrix
m1 =
v1
.
matrix_value
();
64
Matrix
m2 =
v2
.
matrix_value
();
65
MatrixType
typ =
v1
.
matrix_type
();
66
67
Matrix
ret =
xleftdiv
(m1, m2, typ);
68
69
v1
.
matrix_type
(typ);
70
return
ret;
71
}
72
73
DEFNDBINOP_FN
(lt, matrix,
scalar
, array,
scalar
,
mx_el_lt
)
74
DEFNDBINOP_FN
(le, matrix,
scalar
, array, scalar,
mx_el_le
)
75
DEFNDBINOP_FN
(eq, matrix, scalar, array, scalar,
mx_el_eq
)
76
DEFNDBINOP_FN
(ge, matrix, scalar, array, scalar,
mx_el_ge
)
77
DEFNDBINOP_FN
(gt, matrix, scalar, array, scalar,
mx_el_gt
)
78
DEFNDBINOP_FN
(ne, matrix, scalar, array, scalar,
mx_el_ne
)
79
80
DEFNDBINOP_OP
(el_mul, matrix, scalar, array, scalar, *)
81
82
DEFBINOP
(el_div, matrix, scalar)
83
{
84
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_scalar
&);
85
86
double
d
=
v2
.
double_value
();
87
88
if
(d == 0.0)
89
gripe_divide_by_zero
();
90
91
return
octave_value
(
v1
.
array_value
() /
d
);
92
}
93
94
DEFNDBINOP_FN
(el_pow, matrix,
scalar
, array,
scalar
,
elem_xpow
)
95
96
DEFBINOP
(el_ldiv, matrix,
scalar
)
97
{
98
CAST_BINOP_ARGS
(
const
octave_matrix
&,
const
octave_scalar
&);
99
100
return
x_el_div
(
v2
.
double_value
(),
v1
.
array_value
());
101
}
102
103
DEFNDBINOP_FN
(el_and, matrix,
scalar
, array,
scalar
,
mx_el_and
)
104
DEFNDBINOP_FN
(el_or, matrix,
scalar
, array, scalar,
mx_el_or
)
105
106
DEFNDCATOP_FN
(m_s, matrix, scalar, array, array,
concat
)
107
108
DEFNDASSIGNOP_FN
(
assign
, matrix, scalar, scalar, assign)
109
DEFNDASSIGNOP_FN
(sgl_assign, float_matrix, scalar, float_scalar, assign)
110
DEFNDASSIGNOP_FN
(clx_sgl_assign, float_complex_matrix, scalar, float_complex,
111
assign)
112
113
DEFNDASSIGNOP_OP
(assign_add, matrix, scalar, scalar, +=)
114
DEFNDASSIGNOP_OP
(assign_sub, matrix, scalar, scalar, -=)
115
DEFNDASSIGNOP_OP
(assign_mul, matrix, scalar, scalar, *=)
116
DEFNDASSIGNOP_OP
(assign_div, matrix, scalar, scalar, /=)
117
118
void
119
install_m_s_ops
(
void
)
120
{
121
INSTALL_BINOP
(
op_add
,
octave_matrix
,
octave_scalar
, add);
122
INSTALL_BINOP
(
op_sub
,
octave_matrix
,
octave_scalar
, sub);
123
INSTALL_BINOP
(
op_mul
,
octave_matrix
,
octave_scalar
, mul);
124
INSTALL_BINOP
(
op_div
,
octave_matrix
,
octave_scalar
, div);
125
INSTALL_BINOP
(
op_pow
,
octave_matrix
,
octave_scalar
,
pow
);
126
INSTALL_BINOP
(
op_ldiv
,
octave_matrix
,
octave_scalar
, ldiv);
127
128
// INSTALL_BINOP (op_lt, octave_matrix, octave_scalar, lt);
129
130
octave_value_typeinfo::register_binary_op
131
(
octave_value::op_lt
,
octave_matrix::static_type_id
(),
132
octave_scalar::static_type_id
(),
oct_binop_lt
);
133
134
INSTALL_BINOP
(
op_le
,
octave_matrix
,
octave_scalar
, le);
135
INSTALL_BINOP
(
op_eq
,
octave_matrix
,
octave_scalar
, eq);
136
INSTALL_BINOP
(
op_ge
,
octave_matrix
,
octave_scalar
, ge);
137
INSTALL_BINOP
(
op_gt
,
octave_matrix
,
octave_scalar
, gt);
138
INSTALL_BINOP
(
op_ne
,
octave_matrix
,
octave_scalar
, ne);
139
INSTALL_BINOP
(
op_el_mul
,
octave_matrix
,
octave_scalar
, el_mul);
140
INSTALL_BINOP
(
op_el_div
,
octave_matrix
,
octave_scalar
, el_div);
141
INSTALL_BINOP
(
op_el_pow
,
octave_matrix
,
octave_scalar
, el_pow);
142
INSTALL_BINOP
(
op_el_ldiv
,
octave_matrix
,
octave_scalar
, el_ldiv);
143
INSTALL_BINOP
(
op_el_and
,
octave_matrix
,
octave_scalar
, el_and);
144
INSTALL_BINOP
(
op_el_or
,
octave_matrix
,
octave_scalar
, el_or);
145
146
INSTALL_CATOP
(
octave_matrix
,
octave_scalar
, m_s);
147
148
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_matrix
,
octave_scalar
, assign);
149
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_float_matrix
,
octave_scalar
, sgl_assign);
150
INSTALL_ASSIGNOP
(
op_asn_eq
,
octave_float_complex_matrix
,
octave_scalar
,
151
clx_sgl_assign);
152
153
INSTALL_ASSIGNOP
(
op_add_eq
,
octave_matrix
,
octave_scalar
, assign_add);
154
INSTALL_ASSIGNOP
(
op_sub_eq
,
octave_matrix
,
octave_scalar
, assign_sub);
155
INSTALL_ASSIGNOP
(
op_mul_eq
,
octave_matrix
,
octave_scalar
, assign_mul);
156
INSTALL_ASSIGNOP
(
op_div_eq
,
octave_matrix
,
octave_scalar
, assign_div);
157
}
Generated on Mon Dec 30 2013 03:04:36 for GNU Octave by
1.8.1.2