GNU Octave 7.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
cdef-object.h
Go to the documentation of this file.
1////////////////////////////////////////////////////////////////////////
2//
3// Copyright (C) 2012-2022 The Octave Project Developers
4//
5// See the file COPYRIGHT.md in the top-level directory of this
6// distribution or <https://octave.org/copyright/>.
7//
8// This file is part of Octave.
9//
10// Octave is free software: you can redistribute it and/or modify it
11// under the terms of the GNU General Public License as published by
12// the Free Software Foundation, either version 3 of the License, or
13// (at your option) any later version.
14//
15// Octave is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18// GNU General Public License for more details.
19//
20// You should have received a copy of the GNU General Public License
21// along with Octave; see the file COPYING. If not, see
22// <https://www.gnu.org/licenses/>.
23//
24////////////////////////////////////////////////////////////////////////
25
26#if ! defined (octave_cdef_object_h)
27#define octave_cdef_object_h 1
28
29#include "octave-config.h"
30
31#include <map>
32#include <string>
33
34#include "oct-refcount.h"
35
36#include "cdef-fwd.h"
37#include "error.h"
38#include "oct-map.h"
39#include "ov.h"
40#include "ovl.h"
41
42namespace octave
43{
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
46 // cdef_object, such that it can contain cdef_object objects.
47
48 class
49 OCTINTERP_API
51 {
52 public:
53
54 friend class cdef_object;
55
56 cdef_object_rep (void) : m_count (1) { }
57
58 cdef_object_rep& operator = (const cdef_object_rep&) = delete;
59
60 virtual ~cdef_object_rep (void) = default;
61
62 virtual cdef_class get_class (void) const;
63
64 virtual void set_class (const cdef_class&)
65 {
66 err_invalid_object ("set_class");
67 }
68
69 virtual cdef_object_rep * clone (void) const
70 {
71 err_invalid_object ("clone");
72 }
73
74 virtual cdef_object_rep * empty_clone (void) const
75 {
76 err_invalid_object ("empty_clone");
77 }
78
79 virtual cdef_object_rep * copy (void) const
80 {
81 err_invalid_object ("copy");
82 }
83
84 virtual cdef_object_rep * make_array (void) const
85 {
86 err_invalid_object ("make_array");
87 }
88
89 virtual bool is_array (void) const { return false; }
90
91 virtual bool is_value_object (void) const { return false; }
92
93 virtual bool is_handle_object (void) const { return false; }
94
95 virtual bool is_meta_object (void) const { return false; }
96
97 virtual Array<cdef_object> array_value (void) const
98 {
99 err_invalid_object ("array_value");
100 }
101
102 virtual void put (const std::string&, const octave_value&)
103 { err_invalid_object ("put"); }
104
105 virtual octave_value get (const std::string&) const
106 {
107 err_invalid_object ("get");
108 }
109
110 virtual void set_property (octave_idx_type, const std::string&,
111 const octave_value&)
112 {
113 err_invalid_object ("set_property");
114 }
115
116 virtual octave_value get_property (octave_idx_type, const std::string&) const
117 {
118 err_invalid_object ("get_property");
119 }
120
121 virtual void break_closure_cycles (const std::shared_ptr<stack_frame>&)
122 {
123 err_invalid_object ("break_closure_cycles");
124 }
125
126 virtual octave_value_list
127 subsref (const std::string&, const std::list<octave_value_list>&,
128 int, std::size_t&, const cdef_class&, bool)
129 {
130 err_invalid_object ("subsref");
131 }
132
133 virtual octave_value
134 subsasgn (const std::string&, const std::list<octave_value_list>&,
135 const octave_value&)
136 {
137 err_invalid_object ("subsasgn");
138 }
139
140 virtual string_vector map_keys (void) const;
141
142 virtual bool is_valid (void) const { return false; }
143
144 OCTINTERP_API std::string class_name (void) const;
145
146 virtual void mark_for_construction (const cdef_class&)
147 {
148 err_invalid_object ("mark_for_construction");
149 }
150
151 virtual bool is_constructed_for (const cdef_class&) const
152 {
153 err_invalid_object ("is_constructed_for");
154 }
155
156 virtual bool is_partially_constructed_for (const cdef_class&) const
157 {
158 err_invalid_object ("is_partially_constructed_for");
159 }
160
161 virtual void mark_as_constructed (void)
162 {
163 err_invalid_object ("mark_as_constructed");
164 }
165
166 virtual void mark_as_constructed (const cdef_class&)
167 {
168 err_invalid_object ("mark_as_constructed");
169 }
170
171 virtual bool is_constructed (void) const
172 {
173 err_invalid_object ("is_constructed");
174 }
175
176 virtual octave_idx_type static_count (void) const { return 0; }
177
178 virtual void destroy (void) { delete this; }
179
180 OCTINTERP_API void release (const cdef_object& obj);
181
182 virtual dim_vector dims (void) const { return dim_vector (); }
183
184 protected:
185
186 // Reference count
188
189 // Restricted copying.
190
191 cdef_object_rep (const cdef_object_rep&) : m_count (1) { }
192
193 private:
194
195 OCTAVE_NORETURN void err_invalid_object (const char *who) const
196 {
197 error ("%s: invalid object", who);
198 }
199 };
200
201 class
202 OCTINTERP_API
204 {
205 public:
206
207 // FIXME: use a null object?
208 cdef_object (void) : m_rep (new cdef_object_rep ()) { }
209
210 cdef_object (const cdef_object& obj) : m_rep (obj.m_rep) { m_rep->m_count++; }
211
212 cdef_object (cdef_object_rep *r) : m_rep (r) { }
213
214 virtual ~cdef_object (void) { m_rep->release (*this); }
215
216 cdef_object& operator = (const cdef_object& obj)
217 {
218 if (m_rep != obj.m_rep)
219 {
220 m_rep->release (*this);
221
222 m_rep = obj.m_rep;
223 m_rep->m_count++;
224 }
225
226 return *this;
227 }
228
229 OCTINTERP_API cdef_class get_class (void) const;
230
231 void set_class (const cdef_class& cls) { m_rep->set_class (cls); }
232
233 std::string class_name (void) const { return m_rep->class_name (); }
234
235 cdef_object clone (void) const { return cdef_object (m_rep->clone ()); }
236
238 {
239 return cdef_object (m_rep->empty_clone ());
240 }
241
242 dim_vector dims (void) const { return m_rep->dims (); }
243
245 {
246 return cdef_object (m_rep->make_array ());
247 }
248
249 cdef_object copy (void) const { return cdef_object (m_rep->copy ()); }
250
251 bool is_array (void) const { return m_rep->is_array (); }
252
253 bool is_value_object (void) const { return m_rep->is_value_object (); }
254
255 bool is_handle_object (void) const { return m_rep->is_handle_object (); }
256
257 bool is_meta_object (void) const { return m_rep->is_meta_object (); }
258
259 Array<cdef_object> array_value (void) const { return m_rep->array_value (); }
260
261 void put (const std::string& pname, const octave_value& val)
262 {
263 m_rep->put (pname, val);
264 }
265
266 octave_value get (const std::string& pname) const
267 {
268 return m_rep->get (pname);
269 }
270
271 void set_property (octave_idx_type idx, const std::string& pname,
272 const octave_value& pval)
273 {
274 return m_rep->set_property (idx, pname, pval);
275 }
276
278 get_property (octave_idx_type idx, const std::string& pname) const
279 {
280 return m_rep->get_property (idx, pname);
281 }
282
283 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame)
284 {
285 m_rep->break_closure_cycles (frame);
286 }
287
289 subsref (const std::string& type, const std::list<octave_value_list>& idx,
290 int nargout, std::size_t& skip, const cdef_class& context,
291 bool auto_add = false)
292 {
293 return m_rep->subsref (type, idx, nargout, skip, context, auto_add);
294 }
295
297 subsasgn (const std::string& type, const std::list<octave_value_list>& idx,
298 const octave_value& rhs, int ignore_copies = 0)
299 {
300 make_unique (ignore_copies);
301 return m_rep->subsasgn (type, idx, rhs);
302 }
303
304 string_vector map_keys (void) const { return m_rep->map_keys (); }
305
306 OCTINTERP_API octave_map map_value (void) const;
307
308 const cdef_object_rep * get_rep (void) const { return m_rep; }
309
310 bool ok (void) const { return m_rep->is_valid (); }
311
313 {
314 m_rep->mark_for_construction (cls);
315 }
316
317 bool is_constructed (void) const { return m_rep->is_constructed (); }
318
319 bool is_constructed_for (const cdef_class& cls) const
320 {
321 return m_rep->is_constructed_for (cls);
322 }
323
325 {
326 return m_rep->is_partially_constructed_for (cls);
327 }
328
329 void mark_as_constructed (void) { m_rep->mark_as_constructed (); }
330
332 { m_rep->mark_as_constructed (cls); }
333
334 bool is (const cdef_object& obj) const { return m_rep == obj.m_rep; }
335
336 protected:
337
338 cdef_object_rep * get_rep (void) { return m_rep; }
339
340 void make_unique (int ignore_copies)
341 {
342 if (m_rep->m_count > ignore_copies + 1)
343 *this = clone ();
344 }
345
346 private:
347
349 };
350
351 class
352 OCTINTERP_API
354 {
355 public:
356
358 : cdef_object_rep (), m_klass ()
359 { }
360
361 cdef_object_base& operator = (const cdef_object_base&) = delete;
362
364
365 OCTINTERP_API cdef_class get_class (void) const;
366
367 OCTINTERP_API void set_class (const cdef_class& cls);
368
370 {
371 return new cdef_object_base (*this);
372 }
373
374 OCTINTERP_API cdef_object_rep * make_array (void) const;
375
376 protected:
377
378 // Restricted copying!
380 : cdef_object_rep (obj), m_klass (obj.m_klass)
381 { }
382
383 private:
384
385 // The class of the object
387 };
388
389 class
390 OCTINTERP_API
392 {
393 public:
394
396
398 : cdef_object_base (), m_array (a)
399 { }
400
401 cdef_object_array& operator = (const cdef_object_array&) = delete;
402
403 ~cdef_object_array (void) = default;
404
405 cdef_object_rep * clone (void) const
406 {
407 return new cdef_object_array (*this);
408 }
409
410 dim_vector dims (void) const { return m_array.dims (); }
411
412 bool is_valid (void) const { return true; }
413
414 bool is_array (void) const { return true; }
415
416 Array<cdef_object> array_value (void) const { return m_array; }
417
418 OCTINTERP_API octave_value_list
419 subsref (const std::string& type, const std::list<octave_value_list>& idx,
420 int nargout, std::size_t& skip, const cdef_class& context,
421 bool auto_add);
422
423 OCTINTERP_API octave_value
424 subsasgn (const std::string& type, const std::list<octave_value_list>& idx,
425 const octave_value& rhs);
426
427 void set_property (octave_idx_type idx, const std::string& pname,
428 const octave_value& pval)
429 {
430 cdef_object& tmp = m_array.elem (idx);
431
432 return tmp.put (pname, pval);
433 }
434
436 get_property (octave_idx_type idx, const std::string& pname) const
437 {
438 cdef_object tmp = m_array.elem (idx);
439
440 return tmp.get (pname);
441 }
442
443 private:
444
446
447 void fill_empty_values (void) { fill_empty_values (m_array); }
448
449 OCTINTERP_API void fill_empty_values (Array<cdef_object>& arr);
450
451 // Private copying!
453 : cdef_object_base (obj), m_array (obj.m_array)
454 { }
455 };
456
457 class
458 OCTINTERP_API
460 {
461 public:
462
464
465 cdef_object_scalar& operator = (const cdef_object_scalar&) = delete;
466
467 ~cdef_object_scalar (void) = default;
468
469 dim_vector dims (void) const { return dim_vector (1, 1); }
470
471 void break_closure_cycles (const std::shared_ptr<stack_frame>& frame);
472
473 void put (const std::string& pname, const octave_value& val)
474 {
475 m_map.assign (pname, val);
476 }
477
478 octave_value get (const std::string& pname) const
479 {
480 Cell val = m_map.contents (pname);
481
482 if (val.numel () < 1)
483 error ("get: unknown slot: %s", pname.c_str ());
484
485 return val(0, 0);
486 }
487
488 void set_property (octave_idx_type idx, const std::string& pname,
489 const octave_value& pval)
490 {
491 if (idx != 0)
492 error ("invalid index"); // FIXME
493
494 put (pname, pval);
495 }
496
498 get_property (octave_idx_type idx, const std::string& pname) const
499 {
500 if (idx != 0)
501 error ("invalid index"); // FIXME
502
503 return get (pname);
504 }
505
506 OCTINTERP_API octave_value_list
507 subsref (const std::string& type, const std::list<octave_value_list>& idx,
508 int nargout, std::size_t& skip, const cdef_class& context,
509 bool auto_add);
510
511 OCTINTERP_API octave_value
512 subsasgn (const std::string& type, const std::list<octave_value_list>& idx,
513 const octave_value& rhs);
514
515 OCTINTERP_API void mark_for_construction (const cdef_class&);
516
517 OCTINTERP_API bool is_constructed_for (const cdef_class& cls) const;
518
519 OCTINTERP_API bool
520 is_partially_constructed_for (const cdef_class& cls) const;
521
522 void mark_as_constructed (void) { m_ctor_list.clear (); }
523
524 OCTINTERP_API void mark_as_constructed (const cdef_class& cls);
525
526 bool is_constructed (void) const { return m_ctor_list.empty (); }
527
528 protected:
529
530 // Object property values
532
533 // Internal/temporary structure used during object construction
534 std::map< cdef_class, std::list<cdef_class>> m_ctor_list;
535
536 protected:
537
538 // Restricted object copying!
540 : cdef_object_base (obj), m_map (obj.m_map), m_ctor_list (obj.m_ctor_list)
541 { }
542 };
543
544 class
545 OCTINTERP_API
547 {
548 public:
549
551
552 handle_cdef_object& operator = (const handle_cdef_object&) = delete;
553
554 OCTINTERP_API ~handle_cdef_object (void);
555
556 cdef_object_rep * clone (void) const
557 {
558 handle_cdef_object *obj = const_cast<handle_cdef_object *> (this);
559 obj->m_count++;
560 return obj;
561 }
562
563 cdef_object_rep * copy (void) const
564 {
565 return new handle_cdef_object (*this);
566 }
567
568 bool is_valid (void) const { return true; }
569
570 bool is_handle_object (void) const { return true; }
571
572 protected:
573
574 // Restricted copying!
576 : cdef_object_scalar (obj)
577 { }
578 };
579
580 class
581 OCTINTERP_API
583 {
584 public:
585
587
588 value_cdef_object& operator = (const value_cdef_object&) = delete;
589
590 OCTINTERP_API ~value_cdef_object (void);
591
592 cdef_object_rep * clone (void) const
593 {
594 return new value_cdef_object (*this);
595 }
596
597 cdef_object_rep * copy (void) const { return clone (); }
598
599 bool is_valid (void) const { return true; }
600
601 bool is_value_object (void) const { return true; }
602
603 private:
604
605 // Private copying!
607 : cdef_object_scalar (obj)
608 { }
609 };
610
611 class
612 OCTINTERP_API
614 {
615 public:
616
618
619 cdef_meta_object_rep& operator = (const cdef_meta_object_rep&) = delete;
620
621 ~cdef_meta_object_rep (void) = default;
622
623 cdef_object_rep * copy (void) const
624 { return new cdef_meta_object_rep (*this); }
625
626 bool is_meta_object (void) const { return true; }
627
628 virtual bool is_class (void) const { return false; }
629
630 virtual bool is_property (void) const { return false; }
631
632 virtual bool is_method (void) const { return false; }
633
634 virtual bool is_package (void) const { return false; }
635
636 virtual octave_value_list
637 meta_subsref (const std::string& /* type */,
638 const std::list<octave_value_list>& /* idx */,
639 int /* nargout */)
640 {
641 error ("subsref: invalid meta object");
642 }
643
644 virtual void meta_release (void) { }
645
646 virtual bool meta_accepts_postfix_index (char /* type */) const
647 {
648 return false;
649 }
650
651 protected:
652
653 // Restricted copying!
655 : handle_cdef_object (obj)
656 { }
657 };
658
659 class
660 OCTINTERP_API
662 {
663 public:
664
666
667 // Object consistency is checked in sub-classes.
669
671
672 cdef_meta_object (const cdef_object& obj) : cdef_object (obj) { }
673
674 cdef_meta_object& operator = (const cdef_object&) = delete;
675
676 ~cdef_meta_object (void) = default;
677
678 bool is_class (void) const { return get_rep ()->is_class (); }
679
680 bool is_property (void) const { return get_rep ()->is_property (); }
681
682 bool is_method (void) const { return get_rep ()->is_method (); }
683
684 bool is_package (void) const { return get_rep ()->is_package (); }
685
687 meta_subsref (const std::string& type,
688 const std::list<octave_value_list>& idx, int nargout)
689 {
690 return get_rep ()->meta_subsref (type, idx, nargout);
691 }
692
693 void meta_release (void) { get_rep ()->meta_release (); }
694
695 bool meta_accepts_postfix_index (char type) const
696 {
697 return get_rep ()->meta_accepts_postfix_index (type);
698 }
699
700 private:
701
703 {
704 return dynamic_cast<cdef_meta_object_rep *> (cdef_object::get_rep ());
705 }
706
707 const cdef_meta_object_rep * get_rep (void) const
708 {
709 return dynamic_cast<const cdef_meta_object_rep *> (cdef_object::get_rep ());
710 }
711 };
712}
713
714#endif
N Dimensional Array with copy-on-write semantics.
Definition: Array.h:129
octave_idx_type numel(void) const
Number of elements in the array.
Definition: Array.h:411
Definition: Cell.h:43
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:94
virtual bool is_package(void) const
Definition: cdef-object.h:634
virtual void meta_release(void)
Definition: cdef-object.h:644
cdef_meta_object_rep(const cdef_meta_object_rep &obj)
Definition: cdef-object.h:654
bool is_meta_object(void) const
Definition: cdef-object.h:626
virtual bool is_property(void) const
Definition: cdef-object.h:630
virtual octave_value_list meta_subsref(const std::string &, const std::list< octave_value_list > &, int)
Definition: cdef-object.h:637
virtual bool is_class(void) const
Definition: cdef-object.h:628
cdef_object_rep * copy(void) const
Definition: cdef-object.h:623
virtual bool meta_accepts_postfix_index(char) const
Definition: cdef-object.h:646
~cdef_meta_object_rep(void)=default
virtual bool is_method(void) const
Definition: cdef-object.h:632
const cdef_meta_object_rep * get_rep(void) const
Definition: cdef-object.h:707
bool is_class(void) const
Definition: cdef-object.h:678
bool is_method(void) const
Definition: cdef-object.h:682
bool is_package(void) const
Definition: cdef-object.h:684
~cdef_meta_object(void)=default
cdef_meta_object(const cdef_meta_object &obj)
Definition: cdef-object.h:668
bool meta_accepts_postfix_index(char type) const
Definition: cdef-object.h:695
bool is_property(void) const
Definition: cdef-object.h:680
cdef_meta_object(cdef_meta_object_rep *r)
Definition: cdef-object.h:670
cdef_meta_object(const cdef_object &obj)
Definition: cdef-object.h:672
octave_value_list meta_subsref(const std::string &type, const std::list< octave_value_list > &idx, int nargout)
Definition: cdef-object.h:687
cdef_meta_object_rep * get_rep(void)
Definition: cdef-object.h:702
~cdef_object_array(void)=default
bool is_valid(void) const
Definition: cdef-object.h:412
void set_property(octave_idx_type idx, const std::string &pname, const octave_value &pval)
Definition: cdef-object.h:427
cdef_object_array(const Array< cdef_object > &a)
Definition: cdef-object.h:397
cdef_object_rep * clone(void) const
Definition: cdef-object.h:405
cdef_object_array(const cdef_object_array &obj)
Definition: cdef-object.h:452
Array< cdef_object > array_value(void) const
Definition: cdef-object.h:416
Array< cdef_object > m_array
Definition: cdef-object.h:445
octave_value get_property(octave_idx_type idx, const std::string &pname) const
Definition: cdef-object.h:436
bool is_array(void) const
Definition: cdef-object.h:414
dim_vector dims(void) const
Definition: cdef-object.h:410
cdef_object_base(const cdef_object_base &obj)
Definition: cdef-object.h:379
cdef_object_rep * empty_clone(void) const
Definition: cdef-object.h:369
virtual octave_idx_type static_count(void) const
Definition: cdef-object.h:176
virtual bool is_constructed_for(const cdef_class &) const
Definition: cdef-object.h:151
virtual void break_closure_cycles(const std::shared_ptr< stack_frame > &)
Definition: cdef-object.h:121
virtual cdef_object_rep * make_array(void) const
Definition: cdef-object.h:84
virtual void destroy(void)
Definition: cdef-object.h:178
virtual cdef_object_rep * empty_clone(void) const
Definition: cdef-object.h:74
virtual ~cdef_object_rep(void)=default
virtual void set_class(const cdef_class &)
Definition: cdef-object.h:64
refcount< octave_idx_type > m_count
Definition: cdef-object.h:187
virtual octave_value get(const std::string &) const
Definition: cdef-object.h:105
virtual void put(const std::string &, const octave_value &)
Definition: cdef-object.h:102
virtual bool is_handle_object(void) const
Definition: cdef-object.h:93
OCTAVE_NORETURN void err_invalid_object(const char *who) const
Definition: cdef-object.h:195
virtual bool is_partially_constructed_for(const cdef_class &) const
Definition: cdef-object.h:156
virtual bool is_array(void) const
Definition: cdef-object.h:89
virtual octave_value subsasgn(const std::string &, const std::list< octave_value_list > &, const octave_value &)
Definition: cdef-object.h:134
virtual void mark_as_constructed(const cdef_class &)
Definition: cdef-object.h:166
virtual void set_property(octave_idx_type, const std::string &, const octave_value &)
Definition: cdef-object.h:110
cdef_object_rep(const cdef_object_rep &)
Definition: cdef-object.h:191
virtual bool is_constructed(void) const
Definition: cdef-object.h:171
virtual bool is_valid(void) const
Definition: cdef-object.h:142
virtual cdef_object_rep * clone(void) const
Definition: cdef-object.h:69
virtual cdef_object_rep * copy(void) const
Definition: cdef-object.h:79
virtual octave_value get_property(octave_idx_type, const std::string &) const
Definition: cdef-object.h:116
virtual void mark_as_constructed(void)
Definition: cdef-object.h:161
virtual octave_value_list subsref(const std::string &, const std::list< octave_value_list > &, int, std::size_t &, const cdef_class &, bool)
Definition: cdef-object.h:127
virtual dim_vector dims(void) const
Definition: cdef-object.h:182
virtual Array< cdef_object > array_value(void) const
Definition: cdef-object.h:97
virtual bool is_value_object(void) const
Definition: cdef-object.h:91
virtual void mark_for_construction(const cdef_class &)
Definition: cdef-object.h:146
virtual bool is_meta_object(void) const
Definition: cdef-object.h:95
void set_property(octave_idx_type idx, const std::string &pname, const octave_value &pval)
Definition: cdef-object.h:488
dim_vector dims(void) const
Definition: cdef-object.h:469
octave_value get(const std::string &pname) const
Definition: cdef-object.h:478
void put(const std::string &pname, const octave_value &val)
Definition: cdef-object.h:473
bool is_constructed(void) const
Definition: cdef-object.h:526
~cdef_object_scalar(void)=default
octave_value get_property(octave_idx_type idx, const std::string &pname) const
Definition: cdef-object.h:498
cdef_object_scalar(const cdef_object_scalar &obj)
Definition: cdef-object.h:539
octave_scalar_map m_map
Definition: cdef-object.h:531
std::map< cdef_class, std::list< cdef_class > > m_ctor_list
Definition: cdef-object.h:534
void break_closure_cycles(const std::shared_ptr< stack_frame > &frame)
Definition: cdef-object.h:283
bool is(const cdef_object &obj) const
Definition: cdef-object.h:334
void make_unique(int ignore_copies)
Definition: cdef-object.h:340
bool is_constructed_for(const cdef_class &cls) const
Definition: cdef-object.h:319
void mark_for_construction(const cdef_class &cls)
Definition: cdef-object.h:312
void set_property(octave_idx_type idx, const std::string &pname, const octave_value &pval)
Definition: cdef-object.h:271
bool is_value_object(void) const
Definition: cdef-object.h:253
bool is_constructed(void) const
Definition: cdef-object.h:317
cdef_object make_array(void) const
Definition: cdef-object.h:244
cdef_object_rep * m_rep
Definition: cdef-object.h:348
Array< cdef_object > array_value(void) const
Definition: cdef-object.h:259
void put(const std::string &pname, const octave_value &val)
Definition: cdef-object.h:261
void set_class(const cdef_class &cls)
Definition: cdef-object.h:231
bool ok(void) const
Definition: cdef-object.h:310
octave_value_list subsref(const std::string &type, const std::list< octave_value_list > &idx, int nargout, std::size_t &skip, const cdef_class &context, bool auto_add=false)
Definition: cdef-object.h:289
std::string class_name(void) const
Definition: cdef-object.h:233
bool is_handle_object(void) const
Definition: cdef-object.h:255
bool is_meta_object(void) const
Definition: cdef-object.h:257
cdef_object clone(void) const
Definition: cdef-object.h:235
bool is_partially_constructed_for(const cdef_class &cls) const
Definition: cdef-object.h:324
cdef_object(const cdef_object &obj)
Definition: cdef-object.h:210
const cdef_object_rep * get_rep(void) const
Definition: cdef-object.h:308
void mark_as_constructed(const cdef_class &cls)
Definition: cdef-object.h:331
octave_value subsasgn(const std::string &type, const std::list< octave_value_list > &idx, const octave_value &rhs, int ignore_copies=0)
Definition: cdef-object.h:297
octave_value get(const std::string &pname) const
Definition: cdef-object.h:266
cdef_object empty_clone(void) const
Definition: cdef-object.h:237
dim_vector dims(void) const
Definition: cdef-object.h:242
cdef_object(cdef_object_rep *r)
Definition: cdef-object.h:212
cdef_object copy(void) const
Definition: cdef-object.h:249
string_vector map_keys(void) const
Definition: cdef-object.h:304
virtual ~cdef_object(void)
Definition: cdef-object.h:214
cdef_object_rep * get_rep(void)
Definition: cdef-object.h:338
octave_value get_property(octave_idx_type idx, const std::string &pname) const
Definition: cdef-object.h:278
void mark_as_constructed(void)
Definition: cdef-object.h:329
bool is_array(void) const
Definition: cdef-object.h:251
cdef_object_rep * clone(void) const
Definition: cdef-object.h:556
handle_cdef_object(const handle_cdef_object &obj)
Definition: cdef-object.h:575
cdef_object_rep * copy(void) const
Definition: cdef-object.h:563
bool is_valid(void) const
Definition: cdef-object.h:568
bool is_handle_object(void) const
Definition: cdef-object.h:570
cdef_object_rep * clone(void) const
Definition: cdef-object.h:592
bool is_valid(void) const
Definition: cdef-object.h:599
cdef_object_rep * copy(void) const
Definition: cdef-object.h:597
value_cdef_object(const value_cdef_object &obj)
Definition: cdef-object.h:606
bool is_value_object(void) const
Definition: cdef-object.h:601
void error(const char *fmt,...)
Definition: error.cc:980
std::string release(void)
Definition: defaults.cc:143
class OCTINTERP_API cdef_object
Definition: cdef-fwd.h:34