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
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 
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 
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 
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 
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
112 {
113  tw.visit_cell (*this);
114 }