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-colon.h
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 #if !defined (octave_pt_colon_h)
24 #define octave_tree_colon 1
25 
26 #include <string>
27 
28 class tree_walker;
29 
30 class octave_value;
31 class octave_value_list;
32 class octave_lvalue;
33 
34 #include "pt-exp.h"
35 #include "symtab.h"
36 
37 // Colon expressions.
38 
39 class
41 {
42 public:
43 
44  tree_colon_expression (int l = -1, int c = -1)
45  : tree_expression (l, c), op_base (0), op_limit (0),
46  op_increment (0), save_base (false) { }
47 
48  tree_colon_expression (tree_expression *e, int l = -1, int c = -1)
49  : tree_expression (l, c), op_base (e), op_limit (0),
50  op_increment (0), save_base (false) { }
51 
53  tree_expression *inc, int l = -1, int c = -1)
54  : tree_expression (l, c), op_base (bas), op_limit (lim),
55  op_increment (inc), save_base (false) { }
56 
58  {
59  if (! save_base)
60  delete op_base;
61 
62  delete op_limit;
63  delete op_increment;
64  }
65 
66  bool has_magic_end (void) const
67  {
68  return ((op_base && op_base->has_magic_end ())
69  || (op_limit && op_limit->has_magic_end ())
70  || (op_increment && op_increment->has_magic_end ()));
71  }
72 
73  void preserve_base (void) { save_base = true; }
74 
76 
77  bool rvalue_ok (void) const { return true; }
78 
79  octave_value rvalue1 (int nargout = 1);
80 
81  octave_value_list rvalue (int nargout);
82 
83  void eval_error (const std::string& s) const;
84 
85  tree_expression *base (void) { return op_base; }
86 
87  tree_expression *limit (void) { return op_limit; }
88 
89  tree_expression *increment (void) { return op_increment; }
90 
91  int line (void) const;
92  int column (void) const;
93 
96 
97  void accept (tree_walker& tw);
98 
99 private:
100 
101  // The components of the expression.
105 
106  bool save_base;
107 
109  make_range (const Matrix& m_base, const Matrix& m_limit,
110  const Matrix& m_increment, bool result_is_str,
111  bool dq_str) const;
112 
114  make_range (const octave_value& ov_base, const octave_value& ov_limit,
115  const octave_value& ov_increment) const;
116 
117  // No copying!
118 
120 
122 };
123 
124 #endif