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-str-str.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-str-mat.h"
31 #include "ov-typeinfo.h"
32 #include "ov-null-mat.h"
33 #include "ops.h"
34 
35 // string unary ops.
36 
37 DEFUNOP (transpose, char_matrix_str)
38 {
40 
41  if (v.ndims () > 2)
42  {
43  error ("transpose not defined for N-d objects");
44  return octave_value ();
45  }
46  else
47  return octave_value (v.char_matrix_value ().transpose (),
48  a.is_sq_string () ? '\'' : '"');
49 }
50 
51 // string by string ops.
52 
53 #define DEFCHARNDBINOP_FN(name, op, t1, t2, e1, e2, f) \
54  BINOPDECL (name, a1, a2) \
55  { \
56  dim_vector a1_dims = a1.dims (); \
57  dim_vector a2_dims = a2.dims (); \
58  \
59  bool a1_is_scalar = a1_dims.all_ones (); \
60  bool a2_is_scalar = a2_dims.all_ones (); \
61  \
62  CAST_BINOP_ARGS (const octave_ ## t1&, const octave_ ## t2&); \
63  \
64  if (a1_is_scalar) \
65  { \
66  if (a2_is_scalar) \
67  return octave_value ((v1.e1 ## _value ())(0) op (v2.e2 ## _value ())(0)); \
68  else \
69  return octave_value (f ((v1.e1 ## _value ())(0), v2.e2 ## _value ())); \
70  } \
71  else \
72  { \
73  if (a2_is_scalar) \
74  return octave_value (f (v1.e1 ## _value (), (v2.e2 ## _value ())(0))); \
75  else \
76  return octave_value (f (v1.e1 ## _value (), v2.e2 ## _value ())); \
77  } \
78  }
79 
80 DEFCHARNDBINOP_FN (lt, <, char_matrix_str, char_matrix_str, char_array,
81  char_array, mx_el_lt)
82 DEFCHARNDBINOP_FN (le, <=, char_matrix_str, char_matrix_str, char_array,
83  char_array, mx_el_le)
84 DEFCHARNDBINOP_FN (eq, ==, char_matrix_str, char_matrix_str, char_array,
85  char_array, mx_el_eq)
86 DEFCHARNDBINOP_FN (ge, >=, char_matrix_str, char_matrix_str, char_array,
87  char_array, mx_el_ge)
88 DEFCHARNDBINOP_FN (gt, >, char_matrix_str, char_matrix_str, char_array,
89  char_array, mx_el_gt)
90 DEFCHARNDBINOP_FN (ne, !=, char_matrix_str, char_matrix_str, char_array,
91  char_array, mx_el_ne)
92 
93 DEFASSIGNOP (assign, char_matrix_str, char_matrix_str)
94 {
96 
98  return octave_value ();
99 }
100 
101 DEFNULLASSIGNOP_FN (null_assign, char_matrix_str, delete_elements)
102 
103 DEFNDCHARCATOP_FN (str_str, char_matrix_str, char_matrix_str, concat)
104 
105 void
107 {
110 
113 
118  lt);
119 
124  le);
125 
130  eq);
131 
136  ge);
137 
142  gt);
143 
148  ne);
149 
154 
156  assign);
159  assign);
162  assign);
165 
167  null_assign);
169  null_assign);
171  null_assign);
173  null_assign);
175  null_assign);
177  null_assign);
178 
179 }
#define DEFUNOP(name, t)
Definition: ops.h:231
#define DEFNDCHARCATOP_FN(name, t1, t2, f)
Definition: ops.h:371
octave_value op_eq(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1335
virtual void assign(const std::string &, const octave_value &)
Definition: ov-base.h:278
#define DEFNULLASSIGNOP_FN(name, t, f)
Definition: ops.h:116
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
boolMatrix mx_el_le(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
void error(const char *fmt,...)
Definition: error.cc:476
const octave_base_value const Array< octave_idx_type > &ra_idx octave_int16_scalar & v1
#define INSTALL_ASSIGNOP(op, t1, t2, f)
Definition: ops.h:55
#define CAST_BINOP_ARGS(t1, t2)
Definition: ops.h:79
void install_str_str_ops(void)
Definition: op-str-str.cc:106
#define INSTALL_BINOP(op, t1, t2, f)
Definition: ops.h:46
boolMatrix mx_el_ge(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
#define DEFASSIGNOP(name, t1, t2)
Definition: ops.h:104
boolMatrix mx_el_gt(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_transpose(const octave_value &a)
Definition: ov.h:1297
boolMatrix mx_el_ne(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_le(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1334
octave_value op_lt(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1333
#define INSTALL_CATOP(t1, t2, f)
Definition: ops.h:51
const octave_char_matrix & v2
void assign(octave_value::assign_op, const octave_value &)
Definition: oct-lvalue.cc:33
octave_value op_ne(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1338
charNDArray char_array_value(bool=false) const
Definition: ov-ch-mat.h:139
std::list< octave_value_list > idx
Definition: oct-lvalue.h:103
#define INSTALL_UNOP(op, t, f)
Definition: ops.h:38
boolMatrix mx_el_lt(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
#define CAST_UNOP_ARG(t)
Definition: ops.h:76
#define DEFCHARNDBINOP_FN(name, op, t1, t2, e1, e2, f)
Definition: op-str-str.cc:53
octave_value op_hermitian(const octave_value &a)
Definition: ov.h:1298
octave_value op_ge(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1336
boolMatrix mx_el_eq(const boolMatrix &m1, const boolMatrix &m2)
Definition: boolMatrix.cc:90
octave_value op_gt(const octave_value &a1, const octave_value &a2)
Definition: ov.h:1337
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))