aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/py/source/register.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-04-18 15:11:43 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-04-18 15:11:43 +0000
commit14719fd1f8cc2384398168788357930e29bde5c4 (patch)
tree8e7abc2070a13d6a40abd9a1d46b5c4688329249 /externals/grill/py/source/register.cpp
parentf61347eda1d8f25fa6eb6542bd7eea32d894b6b2 (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.cpp70
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