Mercurial > pytave
annotate oct-py-util.h @ 409:b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
* oct-py-util.h (pytave::py_isinstance): New function overload.
* __py_struct_from_dict__.cc (F__py_isinstance__): Use it.
* python_to_octave.cc (pytave::pyobj_to_octvalue): Use it.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Tue, 02 May 2017 17:44:02 -0700 |
parents | c4b78e449c62 |
children |
rev | line source |
---|---|
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
1 /* |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
2 |
364
1470ed26917a
Use pyobject_unwrap_object when an existing PyObject is expected
Mike Miller <mtmiller@octave.org>
parents:
362
diff
changeset
|
3 Copyright (C) 2016 Mike Miller |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
4 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
5 This file is part of Pytave. |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
6 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
7 Pytave is free software; you can redistribute it and/or modify it |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
8 under the terms of the GNU General Public License as published by the |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
9 Free Software Foundation; either version 3 of the License, or (at your |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
10 option) any later version. |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
11 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
12 Pytave is distributed in the hope that it will be useful, but WITHOUT |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
15 for more details. |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
16 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
17 You should have received a copy of the GNU General Public License |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
18 along with Pytave; see the file COPYING. If not, see |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
19 <http://www.gnu.org/licenses/>. |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
20 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
21 */ |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
22 |
331
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
23 #if ! defined (pytave_oct_py_util_h) |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
24 #define pytave_oct_py_util_h 1 |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
25 |
364
1470ed26917a
Use pyobject_unwrap_object when an existing PyObject is expected
Mike Miller <mtmiller@octave.org>
parents:
362
diff
changeset
|
26 #include <Python.h> |
1470ed26917a
Use pyobject_unwrap_object when an existing PyObject is expected
Mike Miller <mtmiller@octave.org>
parents:
362
diff
changeset
|
27 #include <stdint.h> |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
28 #include <string> |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
29 |
331
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
30 class octave_value; |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
31 |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
32 namespace pytave |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
33 { |
331
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
34 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
35 //! Return a reference to the builtins module. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
36 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
37 //! @return reference to the builtins module |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
38 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
39 py_builtins_module (); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
40 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
41 //! Return a reference to the named function in the given module. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
42 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
43 //! @param module module to find the function in |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
44 //! @param name name of the function |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
45 //! @return a reference to the function, or a null pointer |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
46 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
47 py_find_function (PyObject *module, const std::string& name); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
48 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
49 //! Return a reference to the named function in the given module. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
50 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
51 //! @param module name of the module to find the function in |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
52 //! @param name name of the function |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
53 //! @return a reference to the function, or a null pointer |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
54 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
55 py_find_function (const std::string& module, const std::string& name); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
56 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
57 //! Return a reference to the fully-qualified function name. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
58 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
59 //! @param name fully-qualified name of the function |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
60 //! @return a reference to the function, or a null pointer |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
61 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
62 py_find_function (const std::string& name); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
63 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
64 //! Return a reference to the fully-qualified type name. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
65 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
66 //! @param name fully-qualified name of the type |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
67 //! @return a reference to the type, or a null pointer |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
68 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
69 py_find_type (const std::string& name); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
70 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
71 //! Return a reference to the named module. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
72 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
73 //! @param name fully-qualified name of the module |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
74 //! @return a reference to the module, or a null pointer |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
75 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
76 py_import_module (const std::string& name); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
77 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
78 //! Check whether an object is an instance of a type. |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
79 //! |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
80 //! @param obj Python object |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
81 //! @param type Python type |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
82 //! @return @c true if @a obj is an instance of @a type, @c false otherwise |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
83 bool |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
84 py_isinstance (PyObject *obj, PyObject *type); |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
85 |
409
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
86 //! Check whether an object is an instance of a type. |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
87 //! |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
88 //! @param obj Python object |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
89 //! @param typestr name of a Python type |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
90 //! @return @c true if @a obj is an instance of the type named by @a typestr, |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
91 //! @c false otherwise |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
92 inline bool |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
93 py_isinstance (PyObject *obj, const std::string& typestr) |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
94 { |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
95 return py_isinstance (obj, py_find_type (typestr)); |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
96 } |
b9b8790d1082
Add overload of py_isinstance taking a string decribing a type
Mike Miller <mtmiller@octave.org>
parents:
402
diff
changeset
|
97 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
98 std::string |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
99 py_object_class_name (PyObject *obj); |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
100 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
101 void |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
102 py_objstore_del (uint64_t key); |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
103 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
104 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
105 py_objstore_get (uint64_t key); |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
106 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
107 uint64_t |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
108 py_objstore_put (PyObject *obj); |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
109 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
110 octave_value |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
111 pyobject_wrap_object (PyObject *obj); |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
112 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
113 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
114 pyobject_unwrap_object (const octave_value& value); |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
115 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
116 bool |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
117 is_py_kwargs_argument (PyObject *obj); |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
118 |
402
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
119 PyObject * |
c4b78e449c62
maint: indent functions declared in the pytave namespace
Mike Miller <mtmiller@octave.org>
parents:
364
diff
changeset
|
120 update_py_dict (PyObject *dict_orig, PyObject *dict_new); |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
121 |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
122 } |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
123 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
124 #endif |