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-str-str.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-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 
97  v1.assign (idx, v2.char_array_value ());
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 }