diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2005-04-18 15:11:43 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2005-04-18 15:11:43 +0000 |
commit | 14719fd1f8cc2384398168788357930e29bde5c4 (patch) | |
tree | 8e7abc2070a13d6a40abd9a1d46b5c4688329249 /externals/grill/py/source/register.cpp | |
parent | f61347eda1d8f25fa6eb6542bd7eea32d894b6b2 (diff) |
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
Diffstat (limited to 'externals/grill/py/source/register.cpp')
-rw-r--r-- | externals/grill/py/source/register.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
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 |