Mercurial > hg > octave-lojdl
annotate src/OPERATORS/op-cell.cc @ 8150:283989f2da9b
make null assignment matlab compatible
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Fri, 26 Sep 2008 11:52:01 -0400 |
parents | a73b80cd1f10 |
children | cc29ef9a2d84 |
rev | line source |
---|---|
3937 | 1 /* |
2 | |
7017 | 3 Copyright (C) 1996, 1997, 2002, 2003, 2004, 2005, 2007 John W. Eaton |
3937 | 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 | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
3937 | 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 | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
3937 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
24 #include <config.h> | |
25 #endif | |
26 | |
27 #include "gripes.h" | |
4055 | 28 #include "oct-obj.h" |
3937 | 29 #include "ov.h" |
30 #include "ov-cell.h" | |
31 #include "ov-scalar.h" | |
32 #include "ov-re-mat.h" | |
33 #include "ov-typeinfo.h" | |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
34 #include "ov-null-mat.h" |
3937 | 35 #include "ops.h" |
36 | |
37 // cell ops. | |
38 | |
4673 | 39 DEFUNOP (transpose, cell) |
40 { | |
41 CAST_UNOP_ARG (const octave_cell&); | |
42 | |
43 if (v.ndims () > 2) | |
44 { | |
45 error ("transpose not defined for N-d objects"); | |
46 return octave_value (); | |
47 } | |
48 else | |
49 return octave_value (Cell (v.cell_value().transpose ())); | |
50 } | |
51 | |
4915 | 52 DEFCATOP_FN (c_c, cell, cell, concat) |
53 | |
7959
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
54 static octave_value |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
55 oct_catop_cell_matrix (octave_base_value& a1, const octave_base_value& a2, |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
56 const Array<octave_idx_type>&) |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
57 { |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
58 octave_value retval; |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
59 CAST_BINOP_ARGS (const octave_cell&, const octave_matrix&); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
60 NDArray tmp = v2.array_value (); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
61 dim_vector dv = tmp.dims (); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
62 if (dv.all_zero ()) |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
63 retval = octave_value (v1.cell_value ()); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
64 else |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
65 error ("invalid concatenation of cell array with matrix"); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
66 return retval; |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
67 } |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
68 |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
69 static octave_value |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
70 oct_catop_matrix_cell (octave_base_value& a1, const octave_base_value& a2, |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
71 const Array<octave_idx_type>&) |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
72 { |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
73 octave_value retval; |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
74 CAST_BINOP_ARGS (const octave_cell&, const octave_matrix&); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
75 NDArray tmp = v1.array_value (); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
76 dim_vector dv = tmp.dims (); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
77 if (dv.all_zero ()) |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
78 retval = octave_value (v2.cell_value ()); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
79 else |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
80 error ("invalid concatenation of cell array with matrix"); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
81 return retval; |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
82 } |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
83 |
3937 | 84 DEFASSIGNANYOP_FN (assign, cell, assign); |
85 | |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
86 DEFNULLASSIGNOP_FN (null_assign, cell, delete_elements) |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
87 |
3937 | 88 void |
89 install_cell_ops (void) | |
90 { | |
4673 | 91 INSTALL_UNOP (op_transpose, octave_cell, transpose); |
92 INSTALL_UNOP (op_hermitian, octave_cell, transpose); | |
93 | |
4915 | 94 INSTALL_CATOP (octave_cell, octave_cell, c_c); |
95 | |
7959
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
96 INSTALL_CATOP (octave_cell, octave_matrix, cell_matrix); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
97 INSTALL_CATOP (octave_matrix, octave_cell, matrix_cell); |
a73b80cd1f10
allow empty matrix by cell (or struct) concatentation
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
98 |
3937 | 99 INSTALL_ASSIGNANYOP (op_asn_eq, octave_cell, assign); |
8150
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
100 |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
101 INSTALL_ASSIGNOP (op_asn_eq, octave_cell, octave_null_matrix, null_assign); |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
102 INSTALL_ASSIGNOP (op_asn_eq, octave_cell, octave_null_str, null_assign); |
283989f2da9b
make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents:
7959
diff
changeset
|
103 INSTALL_ASSIGNOP (op_asn_eq, octave_cell, octave_null_sq_str, null_assign); |
3937 | 104 } |
105 | |
106 /* | |
107 ;;; Local Variables: *** | |
108 ;;; mode: C++ *** | |
109 ;;; End: *** | |
110 */ |