Mercurial > octave
comparison libinterp/octave-value/cdef-object.h @ 31607:aac27ad79be6 stable
maint: Re-indent code after switch to using namespace macros.
* build-env.h, build-env.in.cc, Cell.h, __betainc__.cc, __eigs__.cc,
__ftp__.cc, __ichol__.cc, __ilu__.cc, __isprimelarge__.cc, __magick_read__.cc,
__pchip_deriv__.cc, amd.cc, base-text-renderer.cc, base-text-renderer.h,
besselj.cc, bitfcns.cc, bsxfun.cc, c-file-ptr-stream.h, call-stack.cc,
call-stack.h, ccolamd.cc, cellfun.cc, chol.cc, colamd.cc, dasrt.cc, data.cc,
debug.cc, defaults.cc, defaults.h, det.cc, display.cc, display.h, dlmread.cc,
dynamic-ld.cc, dynamic-ld.h, ellipj.cc, environment.cc, environment.h,
error.cc, error.h, errwarn.h, event-manager.cc, event-manager.h,
event-queue.cc, event-queue.h, fcn-info.cc, fcn-info.h, fft.cc, fft2.cc,
file-io.cc, filter.cc, find.cc, ft-text-renderer.cc, ft-text-renderer.h,
gcd.cc, gl-render.cc, gl-render.h, gl2ps-print.cc, gl2ps-print.h,
graphics-toolkit.cc, graphics-toolkit.h, graphics.cc, gsvd.cc, gtk-manager.cc,
gtk-manager.h, help.cc, help.h, hook-fcn.cc, hook-fcn.h, input.cc, input.h,
interpreter-private.cc, interpreter-private.h, interpreter.cc, interpreter.h,
inv.cc, jsondecode.cc, jsonencode.cc, latex-text-renderer.cc,
latex-text-renderer.h, load-path.cc, load-path.h, load-save.cc, load-save.h,
lookup.cc, ls-hdf5.cc, ls-mat4.cc, ls-mat5.cc, lsode.cc, lu.cc, mappers.cc,
matrix_type.cc, max.cc, mex.cc, mexproto.h, mxarray.h, mxtypes.in.h,
oct-errno.in.cc, oct-hdf5-types.cc, oct-hist.cc, oct-hist.h, oct-map.cc,
oct-map.h, oct-opengl.h, oct-prcstrm.h, oct-process.cc, oct-process.h,
oct-stdstrm.h, oct-stream.cc, oct-stream.h, oct-strstrm.h,
octave-default-image.h, ordqz.cc, ordschur.cc, pager.cc, pager.h, pinv.cc,
pow2.cc, pr-output.cc, psi.cc, qr.cc, quadcc.cc, rand.cc, regexp.cc,
settings.cc, settings.h, sighandlers.cc, sighandlers.h, sparse-xpow.cc,
sqrtm.cc, stack-frame.cc, stack-frame.h, stream-euler.cc, strfns.cc, svd.cc,
syminfo.cc, syminfo.h, symrcm.cc, symrec.cc, symrec.h, symscope.cc, symscope.h,
symtab.cc, symtab.h, sysdep.cc, sysdep.h, text-engine.cc, text-engine.h,
text-renderer.cc, text-renderer.h, time.cc, toplev.cc, typecast.cc,
url-handle-manager.cc, url-handle-manager.h, urlwrite.cc, utils.cc, utils.h,
variables.cc, variables.h, xdiv.cc, __delaunayn__.cc, __init_fltk__.cc,
__init_gnuplot__.cc, __ode15__.cc, __voronoi__.cc, audioread.cc, convhulln.cc,
gzip.cc, cdef-class.cc, cdef-class.h, cdef-fwd.h, cdef-manager.cc,
cdef-manager.h, cdef-method.cc, cdef-method.h, cdef-object.cc, cdef-object.h,
cdef-package.cc, cdef-package.h, cdef-property.cc, cdef-property.h,
cdef-utils.cc, cdef-utils.h, ov-base-diag.cc, ov-base-int.cc, ov-base-mat.cc,
ov-base-mat.h, ov-base-scalar.cc, ov-base.cc, ov-base.h, ov-bool-mat.cc,
ov-bool-mat.h, ov-bool-sparse.cc, ov-bool.cc, ov-builtin.h, ov-cell.cc,
ov-ch-mat.cc, ov-class.cc, ov-class.h, ov-classdef.cc, ov-classdef.h,
ov-complex.cc, ov-cx-diag.cc, ov-cx-mat.cc, ov-cx-sparse.cc, ov-dld-fcn.cc,
ov-dld-fcn.h, ov-fcn-handle.cc, ov-fcn-handle.h, ov-fcn.h, ov-float.cc,
ov-flt-complex.cc, ov-flt-cx-diag.cc, ov-flt-cx-mat.cc, ov-flt-re-diag.cc,
ov-flt-re-mat.cc, ov-flt-re-mat.h, ov-intx.h, ov-java.cc, ov-lazy-idx.cc,
ov-legacy-range.cc, ov-magic-int.cc, ov-mex-fcn.cc, ov-mex-fcn.h,
ov-null-mat.cc, ov-perm.cc, ov-range.cc, ov-re-diag.cc, ov-re-mat.cc,
ov-re-mat.h, ov-re-sparse.cc, ov-scalar.cc, ov-str-mat.cc, ov-struct.cc,
ov-typeinfo.cc, ov-typeinfo.h, ov-usr-fcn.cc, ov-usr-fcn.h, ov.cc, ov.h, ovl.h,
octave.cc, octave.h, op-b-sbm.cc, op-bm-sbm.cc, op-cs-scm.cc, op-fm-fcm.cc,
op-fs-fcm.cc, op-s-scm.cc, op-scm-cs.cc, op-scm-s.cc, op-sm-cs.cc, ops.h,
anon-fcn-validator.cc, anon-fcn-validator.h, bp-table.cc, bp-table.h,
comment-list.cc, comment-list.h, filepos.h, lex.h, oct-lvalue.cc, oct-lvalue.h,
parse.h, profiler.cc, profiler.h, pt-anon-scopes.cc, pt-anon-scopes.h,
pt-arg-list.cc, pt-arg-list.h, pt-args-block.cc, pt-args-block.h,
pt-array-list.cc, pt-array-list.h, pt-assign.cc, pt-assign.h, pt-binop.cc,
pt-binop.h, pt-bp.cc, pt-bp.h, pt-cbinop.cc, pt-cbinop.h, pt-cell.cc,
pt-cell.h, pt-check.cc, pt-check.h, pt-classdef.cc, pt-classdef.h, pt-cmd.h,
pt-colon.cc, pt-colon.h, pt-const.cc, pt-const.h, pt-decl.cc, pt-decl.h,
pt-eval.cc, pt-eval.h, pt-except.cc, pt-except.h, pt-exp.cc, pt-exp.h,
pt-fcn-handle.cc, pt-fcn-handle.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h,
pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc, pt-mat.h, pt-misc.cc, pt-misc.h,
pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-spmd.cc, pt-spmd.h,
pt-stmt.cc, pt-stmt.h, pt-tm-const.cc, pt-tm-const.h, pt-unop.cc, pt-unop.h,
pt-walk.cc, pt-walk.h, pt.cc, pt.h, token.cc, token.h, Range.cc, Range.h,
idx-vector.cc, idx-vector.h, range-fwd.h, CollocWt.cc, CollocWt.h,
aepbalance.cc, aepbalance.h, chol.cc, chol.h, gepbalance.cc, gepbalance.h,
gsvd.cc, gsvd.h, hess.cc, hess.h, lo-mappers.cc, lo-mappers.h, lo-specfun.cc,
lo-specfun.h, lu.cc, lu.h, oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h,
oct-norm.cc, oct-norm.h, oct-rand.cc, oct-rand.h, oct-spparms.cc,
oct-spparms.h, qr.cc, qr.h, qrp.cc, qrp.h, randgamma.cc, randgamma.h,
randmtzig.cc, randmtzig.h, randpoisson.cc, randpoisson.h, schur.cc, schur.h,
sparse-chol.cc, sparse-chol.h, sparse-lu.cc, sparse-lu.h, sparse-qr.cc,
sparse-qr.h, svd.cc, svd.h, child-list.cc, child-list.h, dir-ops.cc, dir-ops.h,
file-ops.cc, file-ops.h, file-stat.cc, file-stat.h, lo-sysdep.cc, lo-sysdep.h,
lo-sysinfo.cc, lo-sysinfo.h, mach-info.cc, mach-info.h, oct-env.cc, oct-env.h,
oct-group.cc, oct-group.h, oct-password.cc, oct-password.h, oct-syscalls.cc,
oct-syscalls.h, oct-time.cc, oct-time.h, oct-uname.cc, oct-uname.h,
action-container.cc, action-container.h, base-list.h, cmd-edit.cc, cmd-edit.h,
cmd-hist.cc, cmd-hist.h, f77-fcn.h, file-info.cc, file-info.h,
lo-array-errwarn.cc, lo-array-errwarn.h, lo-hash.cc, lo-hash.h, lo-ieee.h,
lo-regexp.cc, lo-regexp.h, lo-utils.cc, lo-utils.h, oct-base64.cc,
oct-base64.h, oct-glob.cc, oct-glob.h, oct-inttypes.h, oct-mutex.cc,
oct-mutex.h, oct-refcount.h, oct-shlib.cc, oct-shlib.h, oct-sparse.cc,
oct-sparse.h, oct-string.h, octave-preserve-stream-state.h, pathsearch.cc,
pathsearch.h, quit.cc, quit.h, unwind-prot.cc, unwind-prot.h, url-transfer.cc,
url-transfer.h:
Re-indent code after switch to using namespace macros.
author | Rik <rik@octave.org> |
---|---|
date | Thu, 01 Dec 2022 18:02:15 -0800 |
parents | e88a07dec498 |
children | 597f3ee61a48 |
comparison
equal
deleted
inserted
replaced
31605:e88a07dec498 | 31607:aac27ad79be6 |
---|---|
39 #include "ov.h" | 39 #include "ov.h" |
40 #include "ovl.h" | 40 #include "ovl.h" |
41 | 41 |
42 OCTAVE_BEGIN_NAMESPACE(octave) | 42 OCTAVE_BEGIN_NAMESPACE(octave) |
43 | 43 |
44 // This is mainly a bootstrap class to declare the expected interface. | 44 // This is mainly a bootstrap class to declare the expected interface. |
45 // The actual base class is cdef_class_base, which is declared after | 45 // The actual base class is cdef_class_base, which is declared after |
46 // cdef_object, such that it can contain cdef_object objects. | 46 // cdef_object, such that it can contain cdef_object objects. |
47 | 47 |
48 class | 48 class |
49 OCTINTERP_API | 49 OCTINTERP_API |
50 cdef_object_rep | 50 cdef_object_rep |
51 { | 51 { |
52 public: | 52 public: |
53 | 53 |
54 friend class cdef_object; | 54 friend class cdef_object; |
55 | 55 |
56 cdef_object_rep (void) : m_count (1) { } | 56 cdef_object_rep (void) : m_count (1) { } |
57 | 57 |
58 cdef_object_rep& operator = (const cdef_object_rep&) = delete; | 58 cdef_object_rep& operator = (const cdef_object_rep&) = delete; |
59 | 59 |
60 virtual ~cdef_object_rep (void) = default; | 60 virtual ~cdef_object_rep (void) = default; |
61 | 61 |
62 virtual cdef_class get_class (void) const; | 62 virtual cdef_class get_class (void) const; |
63 | 63 |
64 virtual void set_class (const cdef_class&) | 64 virtual void set_class (const cdef_class&) |
65 { | 65 { |
66 err_invalid_object ("set_class"); | 66 err_invalid_object ("set_class"); |
67 } | 67 } |
68 | 68 |
69 virtual cdef_object_rep * clone (void) const | 69 virtual cdef_object_rep * clone (void) const |
70 { | 70 { |
71 err_invalid_object ("clone"); | 71 err_invalid_object ("clone"); |
72 } | 72 } |
73 | 73 |
74 virtual cdef_object_rep * empty_clone (void) const | 74 virtual cdef_object_rep * empty_clone (void) const |
75 { | 75 { |
76 err_invalid_object ("empty_clone"); | 76 err_invalid_object ("empty_clone"); |
77 } | 77 } |
78 | 78 |
79 virtual cdef_object_rep * copy (void) const | 79 virtual cdef_object_rep * copy (void) const |
80 { | 80 { |
81 err_invalid_object ("copy"); | 81 err_invalid_object ("copy"); |
82 } | 82 } |
83 | 83 |
84 virtual cdef_object_rep * make_array (void) const | 84 virtual cdef_object_rep * make_array (void) const |
85 { | 85 { |
86 err_invalid_object ("make_array"); | 86 err_invalid_object ("make_array"); |
87 } | 87 } |
88 | 88 |
89 virtual bool is_array (void) const { return false; } | 89 virtual bool is_array (void) const { return false; } |
90 | 90 |
91 virtual bool is_value_object (void) const { return false; } | 91 virtual bool is_value_object (void) const { return false; } |
92 | 92 |
93 virtual bool is_handle_object (void) const { return false; } | 93 virtual bool is_handle_object (void) const { return false; } |
94 | 94 |
95 virtual bool is_meta_object (void) const { return false; } | 95 virtual bool is_meta_object (void) const { return false; } |
96 | 96 |
97 virtual Array<cdef_object> array_value (void) const | 97 virtual Array<cdef_object> array_value (void) const |
98 { | 98 { |
99 err_invalid_object ("array_value"); | 99 err_invalid_object ("array_value"); |
100 } | 100 } |
101 | 101 |
102 virtual void put (const std::string&, const octave_value&) | 102 virtual void put (const std::string&, const octave_value&) |
103 { err_invalid_object ("put"); } | 103 { err_invalid_object ("put"); } |
104 | 104 |
105 virtual octave_value get (const std::string&) const | 105 virtual octave_value get (const std::string&) const |
106 { | 106 { |
107 err_invalid_object ("get"); | 107 err_invalid_object ("get"); |
108 } | 108 } |
109 | 109 |
110 virtual void set_property (octave_idx_type, const std::string&, | 110 virtual void set_property (octave_idx_type, const std::string&, |
111 const octave_value&) | 111 const octave_value&) |
112 { | 112 { |
113 err_invalid_object ("set_property"); | 113 err_invalid_object ("set_property"); |
114 } | 114 } |
115 | 115 |
116 virtual octave_value get_property (octave_idx_type, const std::string&) const | 116 virtual octave_value get_property (octave_idx_type, const std::string&) const |
117 { | 117 { |
118 err_invalid_object ("get_property"); | 118 err_invalid_object ("get_property"); |
119 } | 119 } |
120 | 120 |
121 virtual void break_closure_cycles (const std::shared_ptr<stack_frame>&) | 121 virtual void break_closure_cycles (const std::shared_ptr<stack_frame>&) |
122 { | 122 { |
123 err_invalid_object ("break_closure_cycles"); | 123 err_invalid_object ("break_closure_cycles"); |
124 } | 124 } |
125 | 125 |
126 virtual octave_value_list | 126 virtual octave_value_list |
127 subsref (const std::string&, const std::list<octave_value_list>&, | 127 subsref (const std::string&, const std::list<octave_value_list>&, |
128 int, std::size_t&, const cdef_class&, bool) | 128 int, std::size_t&, const cdef_class&, bool) |
129 { | 129 { |
130 err_invalid_object ("subsref"); | 130 err_invalid_object ("subsref"); |
131 } | 131 } |
132 | 132 |
133 virtual octave_value | 133 virtual octave_value |
134 subsasgn (const std::string&, const std::list<octave_value_list>&, | 134 subsasgn (const std::string&, const std::list<octave_value_list>&, |
135 const octave_value&) | 135 const octave_value&) |
136 { | 136 { |
137 err_invalid_object ("subsasgn"); | 137 err_invalid_object ("subsasgn"); |
138 } | 138 } |
139 | 139 |
140 virtual string_vector map_keys (void) const; | 140 virtual string_vector map_keys (void) const; |
141 | 141 |
142 virtual bool is_valid (void) const { return false; } | 142 virtual bool is_valid (void) const { return false; } |
143 | 143 |
144 OCTINTERP_API std::string class_name (void) const; | 144 OCTINTERP_API std::string class_name (void) const; |
145 | 145 |
146 virtual void mark_for_construction (const cdef_class&) | 146 virtual void mark_for_construction (const cdef_class&) |
147 { | 147 { |
148 err_invalid_object ("mark_for_construction"); | 148 err_invalid_object ("mark_for_construction"); |
149 } | 149 } |
150 | 150 |
151 virtual bool is_constructed_for (const cdef_class&) const | 151 virtual bool is_constructed_for (const cdef_class&) const |
152 { | 152 { |
153 err_invalid_object ("is_constructed_for"); | 153 err_invalid_object ("is_constructed_for"); |
154 } | 154 } |
155 | 155 |
156 virtual bool is_partially_constructed_for (const cdef_class&) const | 156 virtual bool is_partially_constructed_for (const cdef_class&) const |
157 { | 157 { |
158 err_invalid_object ("is_partially_constructed_for"); | 158 err_invalid_object ("is_partially_constructed_for"); |
159 } | 159 } |
160 | 160 |
161 virtual void mark_as_constructed (void) | 161 virtual void mark_as_constructed (void) |
162 { | 162 { |
163 err_invalid_object ("mark_as_constructed"); | 163 err_invalid_object ("mark_as_constructed"); |
164 } | 164 } |
165 | 165 |
166 virtual void mark_as_constructed (const cdef_class&) | 166 virtual void mark_as_constructed (const cdef_class&) |
167 { | 167 { |
168 err_invalid_object ("mark_as_constructed"); | 168 err_invalid_object ("mark_as_constructed"); |
169 } | 169 } |
170 | 170 |
171 virtual bool is_constructed (void) const | 171 virtual bool is_constructed (void) const |
172 { | 172 { |
173 err_invalid_object ("is_constructed"); | 173 err_invalid_object ("is_constructed"); |
174 } | 174 } |
175 | 175 |
176 virtual octave_idx_type static_count (void) const { return 0; } | 176 virtual octave_idx_type static_count (void) const { return 0; } |
177 | 177 |
178 virtual void destroy (void) { delete this; } | 178 virtual void destroy (void) { delete this; } |
179 | 179 |
180 OCTINTERP_API void release (const cdef_object& obj); | 180 OCTINTERP_API void release (const cdef_object& obj); |
181 | 181 |
182 virtual dim_vector dims (void) const { return dim_vector (); } | 182 virtual dim_vector dims (void) const { return dim_vector (); } |
183 | 183 |
184 protected: | 184 protected: |
185 | 185 |
186 // Reference count | 186 // Reference count |
187 refcount<octave_idx_type> m_count; | 187 refcount<octave_idx_type> m_count; |
188 | 188 |
189 // Restricted copying. | 189 // Restricted copying. |
190 | 190 |
191 cdef_object_rep (const cdef_object_rep&) : m_count (1) { } | 191 cdef_object_rep (const cdef_object_rep&) : m_count (1) { } |
192 | 192 |
193 private: | 193 private: |
194 | 194 |
195 OCTAVE_NORETURN void err_invalid_object (const char *who) const | 195 OCTAVE_NORETURN void err_invalid_object (const char *who) const |
196 { | 196 { |
197 error ("%s: invalid object", who); | 197 error ("%s: invalid object", who); |
198 } | 198 } |
199 }; | 199 }; |
200 | 200 |
201 class | 201 class |
202 OCTINTERP_API | 202 OCTINTERP_API |
203 cdef_object | 203 cdef_object |
204 { | 204 { |
205 public: | 205 public: |
206 | 206 |
207 // FIXME: use a null object? | 207 // FIXME: use a null object? |
208 cdef_object (void) : m_rep (new cdef_object_rep ()) { } | 208 cdef_object (void) : m_rep (new cdef_object_rep ()) { } |
209 | 209 |
210 cdef_object (const cdef_object& obj) : m_rep (obj.m_rep) | 210 cdef_object (const cdef_object& obj) : m_rep (obj.m_rep) |
211 { m_rep->m_count++; } | 211 { m_rep->m_count++; } |
212 | 212 |
213 cdef_object (cdef_object_rep *r) : m_rep (r) { } | 213 cdef_object (cdef_object_rep *r) : m_rep (r) { } |
214 | 214 |
215 virtual ~cdef_object (void) { m_rep->release (*this); } | 215 virtual ~cdef_object (void) { m_rep->release (*this); } |
216 | 216 |
217 cdef_object& operator = (const cdef_object& obj) | 217 cdef_object& operator = (const cdef_object& obj) |
218 { | 218 { |
219 if (m_rep != obj.m_rep) | 219 if (m_rep != obj.m_rep) |
220 { | 220 { |
221 m_rep->release (*this); | 221 m_rep->release (*this); |
222 | 222 |
223 m_rep = obj.m_rep; | 223 m_rep = obj.m_rep; |
224 m_rep->m_count++; | 224 m_rep->m_count++; |
225 } | 225 } |
226 | 226 |
227 return *this; | 227 return *this; |
228 } | 228 } |
229 | 229 |
230 OCTINTERP_API cdef_class get_class (void) const; | 230 OCTINTERP_API cdef_class get_class (void) const; |
231 | 231 |
232 void set_class (const cdef_class& cls) { m_rep->set_class (cls); } | 232 void set_class (const cdef_class& cls) { m_rep->set_class (cls); } |
233 | 233 |
234 std::string class_name (void) const { return m_rep->class_name (); } | 234 std::string class_name (void) const { return m_rep->class_name (); } |
235 | 235 |
236 cdef_object clone (void) const { return cdef_object (m_rep->clone ()); } | 236 cdef_object clone (void) const { return cdef_object (m_rep->clone ()); } |
237 | 237 |
238 cdef_object empty_clone (void) const | 238 cdef_object empty_clone (void) const |
239 { | 239 { |
240 return cdef_object (m_rep->empty_clone ()); | 240 return cdef_object (m_rep->empty_clone ()); |
241 } | 241 } |
242 | 242 |
243 dim_vector dims (void) const { return m_rep->dims (); } | 243 dim_vector dims (void) const { return m_rep->dims (); } |
244 | 244 |
245 cdef_object make_array (void) const | 245 cdef_object make_array (void) const |
246 { | 246 { |
247 return cdef_object (m_rep->make_array ()); | 247 return cdef_object (m_rep->make_array ()); |
248 } | 248 } |
249 | 249 |
250 cdef_object copy (void) const { return cdef_object (m_rep->copy ()); } | 250 cdef_object copy (void) const { return cdef_object (m_rep->copy ()); } |
251 | 251 |
252 bool is_array (void) const { return m_rep->is_array (); } | 252 bool is_array (void) const { return m_rep->is_array (); } |
253 | 253 |
254 bool is_value_object (void) const { return m_rep->is_value_object (); } | 254 bool is_value_object (void) const { return m_rep->is_value_object (); } |
255 | 255 |
256 bool is_handle_object (void) const { return m_rep->is_handle_object (); } | 256 bool is_handle_object (void) const { return m_rep->is_handle_object (); } |
257 | 257 |
258 bool is_meta_object (void) const { return m_rep->is_meta_object (); } | 258 bool is_meta_object (void) const { return m_rep->is_meta_object (); } |
259 | 259 |
260 Array<cdef_object> array_value (void) const | 260 Array<cdef_object> array_value (void) const |
261 { return m_rep->array_value (); } | 261 { return m_rep->array_value (); } |
262 | 262 |
263 void put (const std::string& pname, const octave_value& val) | 263 void put (const std::string& pname, const octave_value& val) |
264 { | 264 { |
265 m_rep->put (pname, val); | 265 m_rep->put (pname, val); |
266 } | 266 } |
267 | 267 |
268 octave_value get (const std::string& pname) const | 268 octave_value get (const std::string& pname) const |
269 { | 269 { |
270 return m_rep->get (pname); | 270 return m_rep->get (pname); |
271 } | 271 } |
272 | 272 |
273 void set_property (octave_idx_type idx, const std::string& pname, | 273 void set_property (octave_idx_type idx, const std::string& pname, |
274 const octave_value& pval) | 274 const octave_value& pval) |
275 { | 275 { |
276 return m_rep->set_property (idx, pname, pval); | 276 return m_rep->set_property (idx, pname, pval); |
277 } | 277 } |
278 | 278 |
279 octave_value | 279 octave_value |
280 get_property (octave_idx_type idx, const std::string& pname) const | 280 get_property (octave_idx_type idx, const std::string& pname) const |
281 { | 281 { |
282 return m_rep->get_property (idx, pname); | 282 return m_rep->get_property (idx, pname); |
283 } | 283 } |
284 | 284 |
285 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame) | 285 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame) |
286 { | 286 { |
287 m_rep->break_closure_cycles (frame); | 287 m_rep->break_closure_cycles (frame); |
288 } | 288 } |
289 | 289 |
290 octave_value_list | 290 octave_value_list |
291 subsref (const std::string& type, const std::list<octave_value_list>& idx, | 291 subsref (const std::string& type, const std::list<octave_value_list>& idx, |
292 int nargout, std::size_t& skip, const cdef_class& context, | 292 int nargout, std::size_t& skip, const cdef_class& context, |
293 bool auto_add = false) | 293 bool auto_add = false) |
294 { | 294 { |
295 return m_rep->subsref (type, idx, nargout, skip, context, auto_add); | 295 return m_rep->subsref (type, idx, nargout, skip, context, auto_add); |
296 } | 296 } |
297 | 297 |
298 octave_value | 298 octave_value |
299 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, | 299 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, |
300 const octave_value& rhs, int ignore_copies = 0) | 300 const octave_value& rhs, int ignore_copies = 0) |
301 { | 301 { |
302 make_unique (ignore_copies); | 302 make_unique (ignore_copies); |
303 return m_rep->subsasgn (type, idx, rhs); | 303 return m_rep->subsasgn (type, idx, rhs); |
304 } | 304 } |
305 | 305 |
306 string_vector map_keys (void) const { return m_rep->map_keys (); } | 306 string_vector map_keys (void) const { return m_rep->map_keys (); } |
307 | 307 |
308 OCTINTERP_API octave_map map_value (void) const; | 308 OCTINTERP_API octave_map map_value (void) const; |
309 | 309 |
310 const cdef_object_rep * get_rep (void) const { return m_rep; } | 310 const cdef_object_rep * get_rep (void) const { return m_rep; } |
311 | 311 |
312 bool ok (void) const { return m_rep->is_valid (); } | 312 bool ok (void) const { return m_rep->is_valid (); } |
313 | 313 |
314 void mark_for_construction (const cdef_class& cls) | 314 void mark_for_construction (const cdef_class& cls) |
315 { | 315 { |
316 m_rep->mark_for_construction (cls); | 316 m_rep->mark_for_construction (cls); |
317 } | 317 } |
318 | 318 |
319 bool is_constructed (void) const { return m_rep->is_constructed (); } | 319 bool is_constructed (void) const { return m_rep->is_constructed (); } |
320 | 320 |
321 bool is_constructed_for (const cdef_class& cls) const | 321 bool is_constructed_for (const cdef_class& cls) const |
322 { | 322 { |
323 return m_rep->is_constructed_for (cls); | 323 return m_rep->is_constructed_for (cls); |
324 } | 324 } |
325 | 325 |
326 bool is_partially_constructed_for (const cdef_class& cls) const | 326 bool is_partially_constructed_for (const cdef_class& cls) const |
327 { | 327 { |
328 return m_rep->is_partially_constructed_for (cls); | 328 return m_rep->is_partially_constructed_for (cls); |
329 } | 329 } |
330 | 330 |
331 void mark_as_constructed (void) { m_rep->mark_as_constructed (); } | 331 void mark_as_constructed (void) { m_rep->mark_as_constructed (); } |
332 | 332 |
333 void mark_as_constructed (const cdef_class& cls) | 333 void mark_as_constructed (const cdef_class& cls) |
334 { m_rep->mark_as_constructed (cls); } | 334 { m_rep->mark_as_constructed (cls); } |
335 | 335 |
336 bool is (const cdef_object& obj) const { return m_rep == obj.m_rep; } | 336 bool is (const cdef_object& obj) const { return m_rep == obj.m_rep; } |
337 | 337 |
338 protected: | 338 protected: |
339 | 339 |
340 cdef_object_rep * get_rep (void) { return m_rep; } | 340 cdef_object_rep * get_rep (void) { return m_rep; } |
341 | 341 |
342 void make_unique (int ignore_copies) | 342 void make_unique (int ignore_copies) |
343 { | 343 { |
344 if (m_rep->m_count > ignore_copies + 1) | 344 if (m_rep->m_count > ignore_copies + 1) |
345 *this = clone (); | 345 *this = clone (); |
346 } | 346 } |
347 | 347 |
348 private: | 348 private: |
349 | 349 |
350 cdef_object_rep *m_rep; | 350 cdef_object_rep *m_rep; |
351 }; | 351 }; |
352 | 352 |
353 class | 353 class |
354 OCTINTERP_API | 354 OCTINTERP_API |
355 cdef_object_base : public cdef_object_rep | 355 cdef_object_base : public cdef_object_rep |
356 { | 356 { |
357 public: | 357 public: |
358 | 358 |
359 cdef_object_base (void) | 359 cdef_object_base (void) |
360 : cdef_object_rep (), m_klass () | 360 : cdef_object_rep (), m_klass () |
361 { } | 361 { } |
362 | 362 |
363 cdef_object_base& operator = (const cdef_object_base&) = delete; | 363 cdef_object_base& operator = (const cdef_object_base&) = delete; |
364 | 364 |
365 ~cdef_object_base (void) { } | 365 ~cdef_object_base (void) { } |
366 | 366 |
367 OCTINTERP_API cdef_class get_class (void) const; | 367 OCTINTERP_API cdef_class get_class (void) const; |
368 | 368 |
369 OCTINTERP_API void set_class (const cdef_class& cls); | 369 OCTINTERP_API void set_class (const cdef_class& cls); |
370 | 370 |
371 cdef_object_rep * empty_clone (void) const | 371 cdef_object_rep * empty_clone (void) const |
372 { | 372 { |
373 return new cdef_object_base (*this); | 373 return new cdef_object_base (*this); |
374 } | 374 } |
375 | 375 |
376 OCTINTERP_API cdef_object_rep * make_array (void) const; | 376 OCTINTERP_API cdef_object_rep * make_array (void) const; |
377 | 377 |
378 protected: | 378 protected: |
379 | 379 |
380 // Restricted copying! | 380 // Restricted copying! |
381 cdef_object_base (const cdef_object_base& obj) | 381 cdef_object_base (const cdef_object_base& obj) |
382 : cdef_object_rep (obj), m_klass (obj.m_klass) | 382 : cdef_object_rep (obj), m_klass (obj.m_klass) |
383 { } | 383 { } |
384 | 384 |
385 private: | 385 private: |
386 | 386 |
387 // The class of the object | 387 // The class of the object |
388 cdef_object m_klass; | 388 cdef_object m_klass; |
389 }; | 389 }; |
390 | 390 |
391 class | 391 class |
392 OCTINTERP_API | 392 OCTINTERP_API |
393 cdef_object_array : public cdef_object_base | 393 cdef_object_array : public cdef_object_base |
394 { | 394 { |
395 public: | 395 public: |
396 | 396 |
397 cdef_object_array (void) : cdef_object_base () { } | 397 cdef_object_array (void) : cdef_object_base () { } |
398 | 398 |
399 cdef_object_array (const Array<cdef_object>& a) | 399 cdef_object_array (const Array<cdef_object>& a) |
400 : cdef_object_base (), m_array (a) | 400 : cdef_object_base (), m_array (a) |
401 { } | 401 { } |
402 | 402 |
403 cdef_object_array& operator = (const cdef_object_array&) = delete; | 403 cdef_object_array& operator = (const cdef_object_array&) = delete; |
404 | 404 |
405 ~cdef_object_array (void) = default; | 405 ~cdef_object_array (void) = default; |
406 | 406 |
407 cdef_object_rep * clone (void) const | 407 cdef_object_rep * clone (void) const |
408 { | 408 { |
409 return new cdef_object_array (*this); | 409 return new cdef_object_array (*this); |
410 } | 410 } |
411 | 411 |
412 dim_vector dims (void) const { return m_array.dims (); } | 412 dim_vector dims (void) const { return m_array.dims (); } |
413 | 413 |
414 bool is_valid (void) const { return true; } | 414 bool is_valid (void) const { return true; } |
415 | 415 |
416 bool is_array (void) const { return true; } | 416 bool is_array (void) const { return true; } |
417 | 417 |
418 Array<cdef_object> array_value (void) const { return m_array; } | 418 Array<cdef_object> array_value (void) const { return m_array; } |
419 | 419 |
420 OCTINTERP_API octave_value_list | 420 OCTINTERP_API octave_value_list |
421 subsref (const std::string& type, const std::list<octave_value_list>& idx, | 421 subsref (const std::string& type, const std::list<octave_value_list>& idx, |
422 int nargout, std::size_t& skip, const cdef_class& context, | 422 int nargout, std::size_t& skip, const cdef_class& context, |
423 bool auto_add); | 423 bool auto_add); |
424 | 424 |
425 OCTINTERP_API octave_value | 425 OCTINTERP_API octave_value |
426 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, | 426 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, |
427 const octave_value& rhs); | 427 const octave_value& rhs); |
428 | 428 |
429 void set_property (octave_idx_type idx, const std::string& pname, | 429 void set_property (octave_idx_type idx, const std::string& pname, |
430 const octave_value& pval) | 430 const octave_value& pval) |
431 { | 431 { |
432 cdef_object& tmp = m_array.elem (idx); | 432 cdef_object& tmp = m_array.elem (idx); |
433 | 433 |
434 return tmp.put (pname, pval); | 434 return tmp.put (pname, pval); |
435 } | 435 } |
436 | 436 |
437 octave_value | 437 octave_value |
438 get_property (octave_idx_type idx, const std::string& pname) const | 438 get_property (octave_idx_type idx, const std::string& pname) const |
439 { | 439 { |
440 cdef_object tmp = m_array.elem (idx); | 440 cdef_object tmp = m_array.elem (idx); |
441 | 441 |
442 return tmp.get (pname); | 442 return tmp.get (pname); |
443 } | 443 } |
444 | 444 |
445 private: | 445 private: |
446 | 446 |
447 Array<cdef_object> m_array; | 447 Array<cdef_object> m_array; |
448 | 448 |
449 void fill_empty_values (void) { fill_empty_values (m_array); } | 449 void fill_empty_values (void) { fill_empty_values (m_array); } |
450 | 450 |
451 OCTINTERP_API void fill_empty_values (Array<cdef_object>& arr); | 451 OCTINTERP_API void fill_empty_values (Array<cdef_object>& arr); |
452 | 452 |
453 // Private copying! | 453 // Private copying! |
454 cdef_object_array (const cdef_object_array& obj) | 454 cdef_object_array (const cdef_object_array& obj) |
455 : cdef_object_base (obj), m_array (obj.m_array) | 455 : cdef_object_base (obj), m_array (obj.m_array) |
456 { } | 456 { } |
457 }; | 457 }; |
458 | 458 |
459 class | 459 class |
460 OCTINTERP_API | 460 OCTINTERP_API |
461 cdef_object_scalar : public cdef_object_base | 461 cdef_object_scalar : public cdef_object_base |
462 { | 462 { |
463 public: | 463 public: |
464 | 464 |
465 cdef_object_scalar (void) : cdef_object_base () { } | 465 cdef_object_scalar (void) : cdef_object_base () { } |
466 | 466 |
467 cdef_object_scalar& operator = (const cdef_object_scalar&) = delete; | 467 cdef_object_scalar& operator = (const cdef_object_scalar&) = delete; |
468 | 468 |
469 ~cdef_object_scalar (void) = default; | 469 ~cdef_object_scalar (void) = default; |
470 | 470 |
471 dim_vector dims (void) const { return dim_vector (1, 1); } | 471 dim_vector dims (void) const { return dim_vector (1, 1); } |
472 | 472 |
473 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame); | 473 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame); |
474 | 474 |
475 void put (const std::string& pname, const octave_value& val) | 475 void put (const std::string& pname, const octave_value& val) |
476 { | 476 { |
477 m_map.assign (pname, val); | 477 m_map.assign (pname, val); |
478 } | 478 } |
479 | 479 |
480 octave_value get (const std::string& pname) const | 480 octave_value get (const std::string& pname) const |
481 { | 481 { |
482 Cell val = m_map.contents (pname); | 482 Cell val = m_map.contents (pname); |
483 | 483 |
484 if (val.numel () < 1) | 484 if (val.numel () < 1) |
485 error ("get: unknown slot: %s", pname.c_str ()); | 485 error ("get: unknown slot: %s", pname.c_str ()); |
486 | 486 |
487 return val(0, 0); | 487 return val(0, 0); |
488 } | 488 } |
489 | 489 |
490 void set_property (octave_idx_type idx, const std::string& pname, | 490 void set_property (octave_idx_type idx, const std::string& pname, |
491 const octave_value& pval) | 491 const octave_value& pval) |
492 { | 492 { |
493 if (idx != 0) | 493 if (idx != 0) |
494 error ("invalid index"); // FIXME | 494 error ("invalid index"); // FIXME |
495 | 495 |
496 put (pname, pval); | 496 put (pname, pval); |
497 } | 497 } |
498 | 498 |
499 octave_value | 499 octave_value |
500 get_property (octave_idx_type idx, const std::string& pname) const | 500 get_property (octave_idx_type idx, const std::string& pname) const |
501 { | 501 { |
502 if (idx != 0) | 502 if (idx != 0) |
503 error ("invalid index"); // FIXME | 503 error ("invalid index"); // FIXME |
504 | 504 |
505 return get (pname); | 505 return get (pname); |
506 } | 506 } |
507 | 507 |
508 OCTINTERP_API octave_value_list | 508 OCTINTERP_API octave_value_list |
509 subsref (const std::string& type, const std::list<octave_value_list>& idx, | 509 subsref (const std::string& type, const std::list<octave_value_list>& idx, |
510 int nargout, std::size_t& skip, const cdef_class& context, | 510 int nargout, std::size_t& skip, const cdef_class& context, |
511 bool auto_add); | 511 bool auto_add); |
512 | 512 |
513 OCTINTERP_API octave_value | 513 OCTINTERP_API octave_value |
514 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, | 514 subsasgn (const std::string& type, const std::list<octave_value_list>& idx, |
515 const octave_value& rhs); | 515 const octave_value& rhs); |
516 | 516 |
517 OCTINTERP_API void mark_for_construction (const cdef_class&); | 517 OCTINTERP_API void mark_for_construction (const cdef_class&); |
518 | 518 |
519 OCTINTERP_API bool is_constructed_for (const cdef_class& cls) const; | 519 OCTINTERP_API bool is_constructed_for (const cdef_class& cls) const; |
520 | 520 |
521 OCTINTERP_API bool | 521 OCTINTERP_API bool |
522 is_partially_constructed_for (const cdef_class& cls) const; | 522 is_partially_constructed_for (const cdef_class& cls) const; |
523 | 523 |
524 void mark_as_constructed (void) { m_ctor_list.clear (); } | 524 void mark_as_constructed (void) { m_ctor_list.clear (); } |
525 | 525 |
526 OCTINTERP_API void mark_as_constructed (const cdef_class& cls); | 526 OCTINTERP_API void mark_as_constructed (const cdef_class& cls); |
527 | 527 |
528 bool is_constructed (void) const { return m_ctor_list.empty (); } | 528 bool is_constructed (void) const { return m_ctor_list.empty (); } |
529 | 529 |
530 protected: | 530 protected: |
531 | 531 |
532 // Object property values | 532 // Object property values |
533 octave_scalar_map m_map; | 533 octave_scalar_map m_map; |
534 | 534 |
535 // Internal/temporary structure used during object construction | 535 // Internal/temporary structure used during object construction |
536 std::map< cdef_class, std::list<cdef_class>> m_ctor_list; | 536 std::map< cdef_class, std::list<cdef_class>> m_ctor_list; |
537 | 537 |
538 protected: | 538 protected: |
539 | 539 |
540 // Restricted object copying! | 540 // Restricted object copying! |
541 cdef_object_scalar (const cdef_object_scalar& obj) | 541 cdef_object_scalar (const cdef_object_scalar& obj) |
542 : cdef_object_base (obj), m_map (obj.m_map), m_ctor_list (obj.m_ctor_list) | 542 : cdef_object_base (obj), m_map (obj.m_map), m_ctor_list (obj.m_ctor_list) |
543 { } | 543 { } |
544 }; | 544 }; |
545 | 545 |
546 class | 546 class |
547 OCTINTERP_API | 547 OCTINTERP_API |
548 handle_cdef_object : public cdef_object_scalar | 548 handle_cdef_object : public cdef_object_scalar |
549 { | 549 { |
550 public: | 550 public: |
551 | 551 |
552 handle_cdef_object (void) : cdef_object_scalar () { } | 552 handle_cdef_object (void) : cdef_object_scalar () { } |
553 | 553 |
554 handle_cdef_object& operator = (const handle_cdef_object&) = delete; | 554 handle_cdef_object& operator = (const handle_cdef_object&) = delete; |
555 | 555 |
556 OCTINTERP_API ~handle_cdef_object (void); | 556 OCTINTERP_API ~handle_cdef_object (void); |
557 | 557 |
558 cdef_object_rep * clone (void) const | 558 cdef_object_rep * clone (void) const |
559 { | 559 { |
560 handle_cdef_object *obj = const_cast<handle_cdef_object *> (this); | 560 handle_cdef_object *obj = const_cast<handle_cdef_object *> (this); |
561 obj->m_count++; | 561 obj->m_count++; |
562 return obj; | 562 return obj; |
563 } | 563 } |
564 | 564 |
565 cdef_object_rep * copy (void) const | 565 cdef_object_rep * copy (void) const |
566 { | 566 { |
567 return new handle_cdef_object (*this); | 567 return new handle_cdef_object (*this); |
568 } | 568 } |
569 | 569 |
570 bool is_valid (void) const { return true; } | 570 bool is_valid (void) const { return true; } |
571 | 571 |
572 bool is_handle_object (void) const { return true; } | 572 bool is_handle_object (void) const { return true; } |
573 | 573 |
574 protected: | 574 protected: |
575 | 575 |
576 // Restricted copying! | 576 // Restricted copying! |
577 handle_cdef_object (const handle_cdef_object& obj) | 577 handle_cdef_object (const handle_cdef_object& obj) |
578 : cdef_object_scalar (obj) | 578 : cdef_object_scalar (obj) |
579 { } | 579 { } |
580 }; | 580 }; |
581 | 581 |
582 class | 582 class |
583 OCTINTERP_API | 583 OCTINTERP_API |
584 value_cdef_object : public cdef_object_scalar | 584 value_cdef_object : public cdef_object_scalar |
585 { | 585 { |
586 public: | 586 public: |
587 | 587 |
588 value_cdef_object (void) : cdef_object_scalar () { } | 588 value_cdef_object (void) : cdef_object_scalar () { } |
589 | 589 |
590 value_cdef_object& operator = (const value_cdef_object&) = delete; | 590 value_cdef_object& operator = (const value_cdef_object&) = delete; |
591 | 591 |
592 OCTINTERP_API ~value_cdef_object (void); | 592 OCTINTERP_API ~value_cdef_object (void); |
593 | 593 |
594 cdef_object_rep * clone (void) const | 594 cdef_object_rep * clone (void) const |
595 { | 595 { |
596 return new value_cdef_object (*this); | 596 return new value_cdef_object (*this); |
597 } | 597 } |
598 | 598 |
599 cdef_object_rep * copy (void) const { return clone (); } | 599 cdef_object_rep * copy (void) const { return clone (); } |
600 | 600 |
601 bool is_valid (void) const { return true; } | 601 bool is_valid (void) const { return true; } |
602 | 602 |
603 bool is_value_object (void) const { return true; } | 603 bool is_value_object (void) const { return true; } |
604 | 604 |
605 private: | 605 private: |
606 | 606 |
607 // Private copying! | 607 // Private copying! |
608 value_cdef_object (const value_cdef_object& obj) | 608 value_cdef_object (const value_cdef_object& obj) |
609 : cdef_object_scalar (obj) | 609 : cdef_object_scalar (obj) |
610 { } | 610 { } |
611 }; | 611 }; |
612 | 612 |
613 class | 613 class |
614 OCTINTERP_API | 614 OCTINTERP_API |
615 cdef_meta_object_rep : public handle_cdef_object | 615 cdef_meta_object_rep : public handle_cdef_object |
616 { | 616 { |
617 public: | 617 public: |
618 | 618 |
619 cdef_meta_object_rep (void) : handle_cdef_object () { } | 619 cdef_meta_object_rep (void) : handle_cdef_object () { } |
620 | 620 |
621 cdef_meta_object_rep& operator = (const cdef_meta_object_rep&) = delete; | 621 cdef_meta_object_rep& operator = (const cdef_meta_object_rep&) = delete; |
622 | 622 |
623 ~cdef_meta_object_rep (void) = default; | 623 ~cdef_meta_object_rep (void) = default; |
624 | 624 |
625 cdef_object_rep * copy (void) const | 625 cdef_object_rep * copy (void) const |
626 { return new cdef_meta_object_rep (*this); } | 626 { return new cdef_meta_object_rep (*this); } |
627 | 627 |
628 bool is_meta_object (void) const { return true; } | 628 bool is_meta_object (void) const { return true; } |
629 | 629 |
630 virtual bool is_class (void) const { return false; } | 630 virtual bool is_class (void) const { return false; } |
631 | 631 |
632 virtual bool is_property (void) const { return false; } | 632 virtual bool is_property (void) const { return false; } |
633 | 633 |
634 virtual bool is_method (void) const { return false; } | 634 virtual bool is_method (void) const { return false; } |
635 | 635 |
636 virtual bool is_package (void) const { return false; } | 636 virtual bool is_package (void) const { return false; } |
637 | 637 |
638 virtual octave_value_list | 638 virtual octave_value_list |
639 meta_subsref (const std::string& /* type */, | 639 meta_subsref (const std::string& /* type */, |
640 const std::list<octave_value_list>& /* idx */, | 640 const std::list<octave_value_list>& /* idx */, |
641 int /* nargout */) | 641 int /* nargout */) |
642 { | 642 { |
643 error ("subsref: invalid meta object"); | 643 error ("subsref: invalid meta object"); |
644 } | 644 } |
645 | 645 |
646 virtual void meta_release (void) { } | 646 virtual void meta_release (void) { } |
647 | 647 |
648 virtual bool meta_accepts_postfix_index (char /* type */) const | 648 virtual bool meta_accepts_postfix_index (char /* type */) const |
649 { | 649 { |
650 return false; | 650 return false; |
651 } | 651 } |
652 | 652 |
653 protected: | 653 protected: |
654 | 654 |
655 // Restricted copying! | 655 // Restricted copying! |
656 cdef_meta_object_rep (const cdef_meta_object_rep& obj) | 656 cdef_meta_object_rep (const cdef_meta_object_rep& obj) |
657 : handle_cdef_object (obj) | 657 : handle_cdef_object (obj) |
658 { } | 658 { } |
659 }; | 659 }; |
660 | 660 |
661 class | 661 class |
662 OCTINTERP_API | 662 OCTINTERP_API |
663 cdef_meta_object : public cdef_object | 663 cdef_meta_object : public cdef_object |
664 { | 664 { |
665 public: | 665 public: |
666 | 666 |
667 cdef_meta_object (void) : cdef_object () { } | 667 cdef_meta_object (void) : cdef_object () { } |
668 | 668 |
669 // Object consistency is checked in sub-classes. | 669 // Object consistency is checked in sub-classes. |
670 cdef_meta_object (const cdef_meta_object& obj) : cdef_object (obj) { } | 670 cdef_meta_object (const cdef_meta_object& obj) : cdef_object (obj) { } |
671 | 671 |
672 cdef_meta_object (cdef_meta_object_rep *r) : cdef_object (r) { } | 672 cdef_meta_object (cdef_meta_object_rep *r) : cdef_object (r) { } |
673 | 673 |
674 cdef_meta_object (const cdef_object& obj) : cdef_object (obj) { } | 674 cdef_meta_object (const cdef_object& obj) : cdef_object (obj) { } |
675 | 675 |
676 cdef_meta_object& operator = (const cdef_object&) = delete; | 676 cdef_meta_object& operator = (const cdef_object&) = delete; |
677 | 677 |
678 ~cdef_meta_object (void) = default; | 678 ~cdef_meta_object (void) = default; |
679 | 679 |
680 bool is_class (void) const { return get_rep ()->is_class (); } | 680 bool is_class (void) const { return get_rep ()->is_class (); } |
681 | 681 |
682 bool is_property (void) const { return get_rep ()->is_property (); } | 682 bool is_property (void) const { return get_rep ()->is_property (); } |
683 | 683 |
684 bool is_method (void) const { return get_rep ()->is_method (); } | 684 bool is_method (void) const { return get_rep ()->is_method (); } |
685 | 685 |
686 bool is_package (void) const { return get_rep ()->is_package (); } | 686 bool is_package (void) const { return get_rep ()->is_package (); } |
687 | 687 |
688 octave_value_list | 688 octave_value_list |
689 meta_subsref (const std::string& type, | 689 meta_subsref (const std::string& type, |
690 const std::list<octave_value_list>& idx, int nargout) | 690 const std::list<octave_value_list>& idx, int nargout) |
691 { | 691 { |
692 return get_rep ()->meta_subsref (type, idx, nargout); | 692 return get_rep ()->meta_subsref (type, idx, nargout); |
693 } | 693 } |
694 | 694 |
695 void meta_release (void) { get_rep ()->meta_release (); } | 695 void meta_release (void) { get_rep ()->meta_release (); } |
696 | 696 |
697 bool meta_accepts_postfix_index (char type) const | 697 bool meta_accepts_postfix_index (char type) const |
698 { | 698 { |
699 return get_rep ()->meta_accepts_postfix_index (type); | 699 return get_rep ()->meta_accepts_postfix_index (type); |
700 } | 700 } |
701 | 701 |
702 private: | 702 private: |
703 | 703 |
704 cdef_meta_object_rep * get_rep (void) | 704 cdef_meta_object_rep * get_rep (void) |
705 { | 705 { |
706 return dynamic_cast<cdef_meta_object_rep *> (cdef_object::get_rep ()); | 706 return dynamic_cast<cdef_meta_object_rep *> (cdef_object::get_rep ()); |
707 } | 707 } |
708 | 708 |
709 const cdef_meta_object_rep * get_rep (void) const | 709 const cdef_meta_object_rep * get_rep (void) const |
710 { | 710 { |
711 return dynamic_cast<const cdef_meta_object_rep *> (cdef_object::get_rep ()); | 711 return dynamic_cast<const cdef_meta_object_rep *> (cdef_object::get_rep ()); |
712 } | 712 } |
713 }; | 713 }; |
714 | 714 |
715 OCTAVE_END_NAMESPACE(octave) | 715 OCTAVE_END_NAMESPACE(octave) |
716 | 716 |
717 #endif | 717 #endif |