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
pt-cell.cc
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1999-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 <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  octave_idx_type 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 (this_nc != nc)
69  {
70  if (this_nc == 0)
71  continue; // blank line
72  else
73  {
74  ::error ("number of columns must match");
75  return retval;
76  }
77  }
78  }
79 
80  for (octave_idx_type j = 0; j < nc; j++)
81  val(i,j) = row(j);
82 
83  i++;
84  }
85 
86  if (i < nr)
87  val.resize (dim_vector (i, nc)); // there were blank rows
88  retval = val;
89 
90  return retval;
91 }
92 
94 tree_cell::rvalue (int nargout)
95 {
96  octave_value_list retval;
97 
98  if (nargout > 1)
99  error ("invalid number of output arguments for cell array");
100  else
101  retval = rvalue1 (nargout);
102 
103  return retval;
104 }
105 
109 {
110  tree_cell *new_cell = new tree_cell (0, line (), column ());
111 
112  new_cell->copy_base (*this, scope, context);
113 
114  return new_cell;
115 }
116 
117 void
119 {
120  tw.visit_cell (*this);
121 }
Definition: Cell.h:35
octave_idx_type length(void) const
Definition: oct-obj.h:89
octave_value_list convert_to_const_vector(const octave_value *object=0)
Definition: pt-arg-list.cc:204
octave_value_list rvalue(int)
Definition: pt-cell.cc:94
void error(const char *fmt,...)
Definition: error.cc:476
tree_expression * dup(symbol_table::scope_id scope, symbol_table::context_id context) const
Definition: pt-cell.cc:107
Cell cell_value(void) const
Definition: oct-obj.h:81
static llvm::LLVMContext & context
Definition: jit-typeinfo.cc:76
void resize(const dim_vector &dv, const T &rfv)
Definition: Array.cc:1033
void copy_base(const tree_array_list &array_list)
tree_cell(tree_argument_list *row=0, int l=-1, int c=-1)
Definition: pt-cell.h:44
octave_value rvalue1(int nargout=1)
Definition: pt-cell.cc:38
virtual void visit_cell(tree_cell &)=0
octave_base_list< tree_argument_list * >::iterator iterator
Definition: pt-array-list.h:39
virtual int column(void) const
Definition: pt.h:47
void accept(tree_walker &tw)
Definition: pt-cell.cc:118