Mercurial > pytave
annotate oct-py-util.h @ 362:b0677c492655
Overhaul Python object storage and wrapping in pyobject
* oct-py-util.cc, oct-py-util.h (pytave::py_objstore_del,
pytave::py_objstore_get, pytave::py_objstore_put, pytave::pyobject_wrap_object,
pytave::pyobject_unwrap_object): New functions.
(pytave::get_object_from_python): Use pyobject_unwrap_object.
* octave_to_python.cc (pytave::octvalue_to_pyobj): Use pyobject_unwrap_object.
* python_to_octave.cc (pytave::pyobj_to_octvalue): Use pyobject_wrap_object.
(pytave::pyobj_to_oct_pyobject): Delete.
* __py_struct_from_dict__.cc (F__py_objstore_del__, F__py_objstore_get__,
F__py_objstore_put__): New functions.
* @pyobject/pyobject.m (pyobject.m_id): Rename from id.
(pyobject.pyobject): Use __py_objstore_put__, simplify conditional logic.
(pyobject.delete): Use __py_objstore_del__. (pyobject.id): Rename from getid.
* @pyobject/display.m: Use pyobject.id method name, format as hex.
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Thu, 25 Aug 2016 09:51:58 -0700 |
parents | ebd83497ebda |
children | 1470ed26917a |
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 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
3 Copyright (C) 2016 Abhinav Tripathi |
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) |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
24 #define pytave_oct_py_util_h |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
25 |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
26 #include <string> |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
27 #include <boost/python.hpp> |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
28 |
331
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
29 class octave_value; |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
30 |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
31 namespace pytave |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
32 { |
331
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
33 |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
34 void |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
35 get_builtins_module (boost::python::object& builtins_module); |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
36 |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
37 void |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
38 get_object_from_python (const octave_value& oct_value, |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
39 boost::python::object& py_object); |
cee203ea6245
Rename oct-py-util.cc from pytave_utils.cc
Mike Miller <mtmiller@octave.org>
parents:
306
diff
changeset
|
40 |
357
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
41 //! Return a reference to the builtins module. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
42 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
43 //! @return reference to the builtins module |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
44 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
45 py_builtins_module (); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
46 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
47 //! Return a reference to the named function in the given module. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
48 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
49 //! @param module module to find the function in |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
50 //! @param name name of the function |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
51 //! @return a reference to the function, or a null pointer |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
52 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
53 py_find_function (PyObject *module, const std::string& name); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
54 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
55 //! Return a reference to the named function in the given module. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
56 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
57 //! @param module name of the module to find the function in |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
58 //! @param name name of the function |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
59 //! @return a reference to the function, or a null pointer |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
60 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
61 py_find_function (const std::string& module, const std::string& name); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
62 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
63 //! Return a reference to the fully-qualified function name. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
64 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
65 //! @param name fully-qualified name of the function |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
66 //! @return a reference to the function, or a null pointer |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
67 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
68 py_find_function (const std::string& name); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
69 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
70 //! Return a reference to the fully-qualified type name. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
71 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
72 //! @param name fully-qualified name of the type |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
73 //! @return a reference to the type, or a null pointer |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
74 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
75 py_find_type (const std::string& name); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
76 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
77 //! Return a reference to the named module. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
78 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
79 //! @param name fully-qualified name of the module |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
80 //! @return a reference to the module, or a null pointer |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
81 PyObject * |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
82 py_import_module (const std::string& name); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
83 |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
84 //! Check whether an object is an instance of a type. |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
85 //! |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
86 //! @param obj Python object |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
87 //! @param type Python type |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
88 //! @return @c true if @a obj is an instance of @a type, @c false otherwise |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
89 bool |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
90 py_isinstance (PyObject *obj, PyObject *type); |
ebd83497ebda
Add utility functions to look up Python modules, functions, and types
Mike Miller <mtmiller@octave.org>
parents:
333
diff
changeset
|
91 |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
92 std::string |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
93 py_object_class_name (PyObject *obj); |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
94 |
362
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
95 void |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
96 py_objstore_del (uint64_t key); |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
97 |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
98 PyObject * |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
99 py_objstore_get (uint64_t key); |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
100 |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
101 uint64_t |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
102 py_objstore_put (PyObject *obj); |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
103 |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
104 octave_value |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
105 pyobject_wrap_object (PyObject *obj); |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
106 |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
107 PyObject * |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
108 pyobject_unwrap_object (const octave_value& value); |
b0677c492655
Overhaul Python object storage and wrapping in pyobject
Mike Miller <mtmiller@octave.org>
parents:
357
diff
changeset
|
109 |
333
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
110 bool |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
111 is_py_kwargs_argument (PyObject *obj); |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
112 |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
113 PyObject * |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
114 update_py_dict (PyObject *dict_orig, PyObject *dict_new); |
96b78e78a235
pycall: add support for keyword arguments from pyargs (fixes issue #45)
Mike Miller <mtmiller@octave.org>
parents:
331
diff
changeset
|
115 |
306
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
116 } |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
117 |
2ecae5c6eeb6
Refactor code, have common functions in pytave_utils
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff
changeset
|
118 #endif |