annotate oct-py-object.h @ 397:fc0fb94161de

Add a wrapper for PyObject pointers (fixes issue #81) * oct-py-object.h: Added the new class python_object * oct-py-util.cc: Edited the existing code to use the new wrapper * Makefile.am: Add the new header to the list of headers
author Abhinav Tripathi <genuinelucifer@gmail.com>
date Thu, 13 Apr 2017 02:10:48 -0700
parents
children 3905052ebe1d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
397
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
1 /*
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
2
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
3 Copyright (C) 2017 Abhinav Tripathi
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
4
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
5 This file is part of Pytave.
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
6
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
7 Pytave is free software; you can redistribute it and/or modify it
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
9 Free Software Foundation; either version 3 of the License, or (at your
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
10 option) any later version.
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
11
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
12 Pytave is distributed in the hope that it will be useful, but WITHOUT
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
15 for more details.
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
16
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
18 along with Pytave; see the file COPYING. If not, see
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
20
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
21 */
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
22
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
23 #if ! defined (pytave_oct_py_object_h)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
24 #define pytave_oct_py_object_h
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
25
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
26 namespace pytave
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
27 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
28
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
29 class python_object
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
30 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
31 public:
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
32 python_object (PyObject *obj = 0)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
33 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
34 pyobj = obj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
35 isowned = pyobj != 0;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
36 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
37
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
38 python_object (const python_object& oth)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
39 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
40 pyobj = oth.pyobj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
41 isowned = oth.isowned;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
42 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
43 Py_INCREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
44 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
45
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
46 ~python_object ()
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
47 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
48 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
49 Py_DECREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
50 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
51
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
52 python_object& operator= (const python_object& oth)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
53 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
54 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
55 Py_DECREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
56 pyobj = oth.pyobj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
57 isowned = oth.isowned;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
58 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
59 Py_INCREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
60 return *this;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
61 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
62
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
63 python_object& operator= (PyObject *obj)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
64 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
65 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
66 Py_DECREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
67 pyobj = obj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
68 isowned = pyobj != 0;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
69 if (isowned)
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
70 Py_INCREF (pyobj);
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
71 return *this;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
72 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
73
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
74 operator bool () const
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
75 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
76 return isowned;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
77 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
78
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
79 operator PyObject *()
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
80 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
81 return pyobj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
82 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
83
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
84 bool is_none ()
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
85 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
86 return pyobj && pyobj == Py_None;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
87 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
88
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
89 PyObject *release ()
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
90 {
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
91 isowned = false;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
92 PyObject *ret = pyobj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
93 pyobj = 0;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
94 return ret;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
95 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
96
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
97 private:
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
98 PyObject *pyobj;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
99 bool isowned;
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
100 };
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
101
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
102 }
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
103
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
104 #endif
fc0fb94161de Add a wrapper for PyObject pointers (fixes issue #81)
Abhinav Tripathi <genuinelucifer@gmail.com>
parents:
diff changeset
105