Mercurial > octave
diff libinterp/octave-value/ov.h @ 23881:5aec653c88e7
new function for accessing classdef objects
* ov.h, ov.cc (octave_value::classdef_object_value): New function.
* ov-base.h, ov-base.cc (octave_base_value::classdef_object_value):
New virtual function.
* ov-classdef.h (octave_classdef::classdef_object_value): New function.
diff --git a/libinterp/octave-value/ov-base.cc b/libinterp/octave-value/ov-base.cc
--- a/libinterp/octave-value/ov-base.cc
+++ b/libinterp/octave-value/ov-base.cc
@@ -45,6 +45,7 @@ along with Octave; see the file COPYING.
#include "ov-base.h"
#include "ov-cell.h"
#include "ov-ch-mat.h"
+#include "ov-classdef.h"
#include "ov-complex.h"
#include "ov-cx-mat.h"
#include "ov-fcn-handle.h"
@@ -884,6 +885,18 @@ octave_base_value::parent_class_names (v
err_wrong_type_arg ("octave_base_value::parent_class_names()", type_name ());
}
+octave_classdef *
+octave_base_value::classdef_object_value (bool silent)
+{
+ octave_classdef *retval = nullptr;
+
+ if (! silent)
+ err_wrong_type_arg ("octave_base_value::classdef_object_value()",
+ type_name ());
+
+ return retval;
+}
+
octave_function *
octave_base_value::function_value (bool silent)
{
diff --git a/libinterp/octave-value/ov-base.h b/libinterp/octave-value/ov-base.h
--- a/libinterp/octave-value/ov-base.h
+++ b/libinterp/octave-value/ov-base.h
@@ -47,6 +47,7 @@ class octave_map;
class octave_scalar_map;
class octave_value;
class octave_value_list;
+class octave_classdef;
class octave_function;
class octave_user_function;
class octave_user_script;
@@ -598,6 +599,8 @@ public:
virtual bool is_instance_of (const std::string&) const
{ return false; }
+ virtual octave_classdef * classdef_object_value (bool silent = false);
+
virtual octave_function * function_value (bool silent = false);
virtual octave_user_function * user_function_value (bool silent = false);
diff --git a/libinterp/octave-value/ov-classdef.h b/libinterp/octave-value/ov-classdef.h
--- a/libinterp/octave-value/ov-classdef.h
+++ b/libinterp/octave-value/ov-classdef.h
@@ -1398,6 +1398,8 @@ public:
octave_base_value * empty_clone (void) const
{ return new octave_classdef (object.empty_clone ()); }
+ octave_classdef * classdef_object_value (bool = false) { return this; }
+
cdef_object get_object (void) const { return object; }
cdef_object& get_object_ref (void) { return object; }
diff --git a/libinterp/octave-value/ov.h b/libinterp/octave-value/ov.h
--- a/libinterp/octave-value/ov.h
+++ b/libinterp/octave-value/ov.h
@@ -986,6 +986,8 @@ public:
bool is_instance_of (const std::string& cls_name) const
{ return rep->is_instance_of (cls_name); }
+ octave_classdef * classdef_object_value (bool silent = false) const;
+
octave_function * function_value (bool silent = false) const;
octave_user_function * user_function_value (bool silent = false) const;
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 11 Aug 2017 09:05:58 -0400 |
parents | d56c18dc1373 |
children | 062ce545b21e |
line wrap: on
line diff
--- a/libinterp/octave-value/ov.h Fri Aug 11 08:05:01 2017 -0700 +++ b/libinterp/octave-value/ov.h Fri Aug 11 09:05:58 2017 -0400 @@ -986,6 +986,8 @@ bool is_instance_of (const std::string& cls_name) const { return rep->is_instance_of (cls_name); } + octave_classdef * classdef_object_value (bool silent = false) const; + octave_function * function_value (bool silent = false) const; octave_user_function * user_function_value (bool silent = false) const;