Rev 14647 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14647 | cbradney | 1 | /* copyright 2003 Jim Bublitz <jbublitz@nwinternet.com> |
2 | |||
3 | This library is free software; you can redistribute it and/or |
||
4 | modify it under the terms of the GNU General Public License as |
||
5 | published by the Free Software Foundation; either version 2 of |
||
6 | the License, or (at your option) any later version. |
||
7 | |||
8 | This library is distributed in the hope that it will be useful, |
||
9 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
||
11 | Library General Public License for more details. |
||
12 | |||
13 | You should have received a copy of the GNU Library General Public License |
||
14 | along with this library; see the file COPYING.LIB. If not, write to |
||
18122 | mrdocs | 15 | the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
16 | Boston, MA 02110-1301, USA. |
||
14647 | cbradney | 17 | */ |
18 | |||
19 | #ifndef __pythonize_h__ |
||
20 | #define __pythonize_h__ |
||
21 | |||
22 | // Pythonize is a general purpose library that wraps the Python |
||
23 | // interpreter with an interface to a set of common operations |
||
24 | // used when embedding the interpreter. |
||
25 | |||
26 | #include <Python.h> |
||
27 | |||
28 | struct ObjectRef |
||
29 | { |
||
30 | ObjectRef (ObjectRef *oi, PyObject *o); |
||
31 | ~ObjectRef () { |
||
32 | Py_XDECREF (object); |
||
33 | } |
||
34 | |||
35 | PyObject *object; // pointer to an object we created |
||
36 | ObjectRef *prevObject; // pointer to next object on the stack |
||
37 | }; |
||
38 | |||
39 | class Pythonize |
||
40 | { |
||
41 | public: |
||
42 | Pythonize (); |
||
43 | ~Pythonize (); |
||
44 | |||
45 | // adds a path to sys.path |
||
46 | bool appendToSysPath (const char* newPath); |
||
47 | |||
48 | // imports a module into the interpreter |
||
49 | // or gets a PyObject for an already loaded module |
||
50 | PyObject *importModule (char *moduleName); |
||
51 | |||
52 | // returns an object from a loaded module |
||
53 | // you must decref the object returned when done with it (new reference returned) |
||
54 | PyObject *getNewObjectRef (PyObject *module, char *object) { |
||
55 | return PyObject_GetAttrString (module, object); |
||
56 | } |
||
57 | |||
58 | int getPythonInit () { |
||
59 | return pythonInit; |
||
60 | } |
||
61 | |||
62 | // decrements the ref count of an object |
||
63 | void decref (PyObject *object) { |
||
64 | Py_XDECREF (object); |
||
65 | } |
||
66 | |||
67 | // runs a script on the current sys.path |
||
68 | bool runScript (char *scriptPath); |
||
69 | |||
70 | // executes a string of Python in the interpreter |
||
71 | bool runString (char *str); |
||
72 | |||
73 | // runs a callable Python object |
||
74 | PyObject *runFunction(PyObject *object, PyObject *args); |
||
75 | void *runFunctionVoid(PyObject *object, PyObject *args); |
||
76 | |||
77 | private: |
||
78 | int pythonInit; // status of Py_Initialize |
||
79 | ObjectRef *objects; // a stack of PyObjects (used in destructor) |
||
80 | }; |
||
81 | |||
82 | extern "C" { |
||
83 | Pythonize *initialize(); |
||
84 | void finalize(); |
||
85 | |||
86 | // adds a path to sys.path |
||
87 | bool appendToSysPath (const char* newPath); |
||
88 | |||
89 | // imports a module into the interpreter |
||
90 | // or gets a PyObject for an already loaded module |
||
91 | PyObject *importModule (char *moduleName); |
||
92 | |||
93 | // returns an object from a loaded module |
||
94 | // you must decref the object returned when done with it (new reference returned) |
||
95 | PyObject *getNewObjectRef (PyObject *module, char *object); |
||
96 | |||
97 | bool getPythonInit(); |
||
98 | |||
99 | // decrements the ref count of an object |
||
100 | void decref (PyObject *object); |
||
101 | |||
102 | // runs a script on the current sys.path |
||
103 | bool runScript (char *scriptPath); |
||
104 | |||
105 | // executes a string of Python in the interpreter |
||
106 | bool runString (char *str); |
||
107 | |||
108 | // runs a callable Python object |
||
109 | PyObject *runFunction (PyObject *object, PyObject *args); |
||
110 | } |
||
111 | |||
112 | #endif |