diff options
Diffstat (limited to 'intern/python/testmodule/testmodule.c')
-rw-r--r-- | intern/python/testmodule/testmodule.c | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/intern/python/testmodule/testmodule.c b/intern/python/testmodule/testmodule.c new file mode 100644 index 00000000000..8ad894d8aad --- /dev/null +++ b/intern/python/testmodule/testmodule.c @@ -0,0 +1,182 @@ +/** + * $Id$ + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + */ + +/***********************/ + +/* (c) Jan Walter 2000 */ +/***********************/ + +/* CVS */ +/* $Author$ */ +/* $Date$ */ +/* $RCSfile$ */ +/* $Revision$ */ + +#include "Python.h" + +/************************************/ +/* struct for the class "TestClass" */ +/************************************/ + +typedef struct { + PyObject_HEAD + PyObject* memberVariable; +} testclass; + +staticforward PyTypeObject TestclassType; + +/************************************/ +/* make instance of class TestClass */ +/************************************/ + +static testclass* +newtestclass() +{ + testclass* tc; + tc = PyObject_NEW(testclass, &TestclassType); + if (tc == NULL) + { + return NULL; + } + tc->memberVariable = PyString_FromString("initValue"); + + return tc; +} + +/*********************************/ +/* instance methods of TestClass */ +/*********************************/ + +static PyObject* +testclass_memberFunction(PyObject* tc, PyObject* args) +{ + PyRun_SimpleString("print \"inside memberFunction() ...\"\n"); + + Py_INCREF(Py_None); + + return Py_None; +} + +static struct PyMethodDef testclass_methods[] = { + { "memberFunction", testclass_memberFunction, METH_VARARGS }, + { NULL, NULL } +}; + +/*********************************/ +/* basic operations on TestClass */ +/*********************************/ + +static PyObject* +testclass_dealloc(testclass* tc) +{ + PyMem_DEL(tc); +} + +static PyObject* +testclass_getattr(testclass* tc, char* name) +{ + if (strcmp(name, "memberVariable") == 0) + { + return Py_BuildValue("O", tc->memberVariable); + } + else + { + return Py_FindMethod(testclass_methods, (PyObject*) tc, name); + } +} + +static int +testclass_setattr(testclass* tc, char* name, PyObject* attr) +{ + if (strcmp(name, "memberVariable") == 0) + { + Py_XDECREF(tc->memberVariable); + tc->memberVariable = attr; + Py_INCREF(attr); + } + else + { + PyErr_SetString(PyExc_AttributeError, name); + + return -1; + } + + return 0; +} + +/************************************/ +/* table of functions for TestClass */ +/************************************/ + +static PyTypeObject TestclassType = { + PyObject_HEAD_INIT(&PyType_Type) + 0, /* ob_size */ + "testclass", /* tp_name */ + sizeof(testclass), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor) testclass_dealloc, /* tp_dealloc */ + (printfunc) 0, /* tp_print */ + (getattrfunc) testclass_getattr, /* tp_getattr */ + (setattrfunc) testclass_setattr, /* tp_setattr */ + (cmpfunc) 0, /* tp_compare */ + (reprfunc) 0, /* tp_repr */ + /* there is more ... */ +}; /* see Include/object.h */ + +/***********************************/ +/* constructor for class TestClass */ +/***********************************/ + +static PyObject* +testclass_new(PyObject* self, PyObject* args) +{ + if (!PyArg_ParseTuple(args, "")) + { + return NULL; + } + + return (PyObject*) newtestclass(); +} + +/*********************/ +/* module testmodule */ +/*********************/ + +static struct PyMethodDef testmodule_methods[] = { + { "TestClass", testclass_new, METH_VARARGS }, + { NULL, NULL } +}; + +void +inittestmodule() +{ + (void) Py_InitModule("testmodule", testmodule_methods); +} |