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
parse-tree
pt-cell.cc
Go to the documentation of this file.
1
/*
2
3
Copyright (C) 1999-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 <iostream>
28
29
#include "
Cell.h
"
30
#include "
oct-obj.h
"
31
#include "
pt-arg-list.h
"
32
#include "
pt-exp.h
"
33
#include "
pt-cell.h
"
34
#include "
pt-walk.h
"
35
#include "
ov.h
"
36
37
octave_value
38
tree_cell::rvalue1
(
int
)
39
{
40
octave_value
retval;
41
42
octave_idx_type
nr =
length
();
43
octave_idx_type
nc = -1;
44
45
Cell
val;
46
47
int
i = 0;
48
49
for
(
iterator
p =
begin
(); p !=
end
(); p++)
50
{
51
tree_argument_list
*elt = *p;
52
53
octave_value_list
row = elt->
convert_to_const_vector
();
54
55
if
(nr == 1)
56
// Optimize the single row case.
57
val = row.
cell_value
();
58
else
if
(nc < 0)
59
{
60
nc = row.
length
();
61
62
val =
Cell
(nr, nc);
63
}
64
else
65
{
66
octave_idx_type
this_nc = row.
length
();
67
68
if
(nc != this_nc)
69
{
70
::error
(
"number of columns must match"
);
71
return
retval;
72
}
73
}
74
75
for
(
octave_idx_type
j = 0; j < nc; j++)
76
val(i,j) = row(j);
77
78
i++;
79
}
80
81
retval = val;
82
83
return
retval;
84
}
85
86
octave_value_list
87
tree_cell::rvalue
(
int
nargout)
88
{
89
octave_value_list
retval;
90
91
if
(nargout > 1)
92
error
(
"invalid number of output arguments for cell array"
);
93
else
94
retval =
rvalue1
(nargout);
95
96
return
retval;
97
}
98
99
tree_expression
*
100
tree_cell::dup
(
symbol_table::scope_id
scope,
101
symbol_table::context_id
context
)
const
102
{
103
tree_cell
*new_cell =
new
tree_cell
(0,
line
(),
column
());
104
105
new_cell->
copy_base
(*
this
, scope, context);
106
107
return
new_cell;
108
}
109
110
void
111
tree_cell::accept
(
tree_walker
& tw)
112
{
113
tw.
visit_cell
(*
this
);
114
}
Generated on Mon Dec 30 2013 03:04:37 for GNU Octave by
1.8.1.2