From 14719fd1f8cc2384398168788357930e29bde5c4 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Mon, 18 Apr 2005 15:11:43 +0000 Subject: check for PD version better reload handling, but still far fom perfect fixed minor other issues fixed buglet fixing strange gcc behavior updates for DSP processing better argument checking svn path=/trunk/; revision=2781 --- externals/grill/py/source/register.cpp | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'externals/grill/py/source/register.cpp') diff --git a/externals/grill/py/source/register.cpp b/externals/grill/py/source/register.cpp index bc2563ae..d26d5504 100644 --- a/externals/grill/py/source/register.cpp +++ b/externals/grill/py/source/register.cpp @@ -10,6 +10,74 @@ WARRANTIES, see the file, "license.txt," in this distribution. #include "main.h" +#if 1 + +PyObject *pybase::GetRegistry(const char *regnm) +{ + if(module) { + FLEXT_ASSERT(dict); // module must have a valid dict + + // add this to module registry + PyObject *reg = PyDict_GetItemString(dict,(char *)regnm); // borrowed!!! + if(reg) + FLEXT_ASSERT(PyDict_Check(reg)); + else { + // make a new empty registry + reg = PyDict_New(); + PyDict_SetItemString(dict,(char *)regnm,reg); + } + return reg; + } + else + return NULL; +} + +void pybase::SetRegistry(const char *regnm,PyObject *reg) +{ + if(module) { + FLEXT_ASSERT(dict); // module must have a valid dict + FLEXT_ASSERT(reg && PyDict_Check(reg)); + PyDict_SetItemString(dict,(char *)regnm,reg); + } +} + +void pybase::Register(PyObject *reg) +{ + if(!module) return; + FLEXT_ASSERT(reg && PyDict_Check(reg)); + + // add this to module registry + Py_INCREF(Py_None); + PyObject *key = PyLong_FromUnsignedLong((size_t)this); + PyDict_SetItem(reg,key,Py_None); +} + +void pybase::Unregister(PyObject *reg) +{ + if(!module) return; + FLEXT_ASSERT(reg && PyDict_Check(reg)); + + // remove this from module registry + PyObject *key = PyLong_FromUnsignedLong((size_t)this); + PyObject *item = PyDict_GetItem(reg,key); + if(!item) + post("py/pyext - Internal error: object not found in registry"); + else + PyDict_DelItem(reg,key); +} + +/* +void pybase::RegLoad(PyObject *reg) +{ + +} + +void pybase::RegUnload(PyObject *reg) +{ +} +*/ + +#else void pybase::Register(const char *regnm) { @@ -79,3 +147,5 @@ void pybase::Reregister(const char *regnm) } } } + +#endif -- cgit v1.2.1