diff PyParameterDescriptor.cpp @ 37:27bab3a16c9a vampy2final

new branch Vampy2final
author fazekasgy
date Mon, 05 Oct 2009 11:28:00 +0000
parents
children af9c4cee95a8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PyParameterDescriptor.cpp	Mon Oct 05 11:28:00 2009 +0000
@@ -0,0 +1,154 @@
+/*
+
+ * Vampy : This plugin is a wrapper around the Vamp plugin API.
+ * It allows for writing Vamp plugins in Python.
+
+ * Centre for Digital Music, Queen Mary University of London.
+ * Copyright (C) 2008-2009 Gyorgy Fazekas, QMUL. (See Vamp sources 
+ * for licence information.)
+
+*/
+
+#include <Python.h>
+#include "PyParameterDescriptor.h"
+#include "vamp-sdk/Plugin.h"
+#include <string>
+#include "PyTypeInterface.h"
+
+using namespace std;
+using namespace Vamp;
+using Vamp::Plugin;
+
+/*			 ParameterDescriptor Object's Methods 					*/ 
+//these objects have no callable methods
+
+/*		   PyParameterDescriptor methods implementing protocols   	*/ 
+// these functions are called by the interpreter automatically
+
+/* New ParameterDescriptor object */ 
+static PyObject *
+ParameterDescriptor_new(PyTypeObject *type, PyObject *args, PyObject *kw)
+{
+
+	ParameterDescriptorObject *self = 
+	(ParameterDescriptorObject*)type->tp_alloc(type, 0);
+	
+	if (self == NULL) return NULL;
+    self->dict = PyDict_New();
+	if (self->dict == NULL) return NULL;
+
+	/// allow copying objects
+    if (args and PyTuple_Size(args) == 1) {
+		PyObject* arg = PyTuple_GET_ITEM(args,0);
+		if (PyParameterDescriptor_CheckExact(arg))
+			PyDict_Merge(self->dict,PyParameterDescriptor_AS_DICT(arg),0);
+		else if (PyDict_CheckExact(arg)) 
+			PyDict_Merge(self->dict,arg,0);
+		else {
+			PyErr_SetString(PyExc_TypeError, 
+			"Object takes zero or one ParameterDescriptor or dictionary arguments.");
+			return NULL; 
+		}
+	}
+	return (PyObject *) self;
+}
+
+
+/* DESTRUCTOR: delete type object */
+static void
+ParameterDescriptorObject_dealloc(ParameterDescriptorObject *self)
+{
+	Py_XDECREF(self->dict);
+	PyObject_Del(self);
+}
+
+
+/* Set attributes */
+static int
+ParameterDescriptor_setattr(ParameterDescriptorObject *self, char *name, PyObject *v)
+{
+	if (v == NULL) {
+		int rv = PyDict_DelItemString(self->dict, name);
+		if (rv < 0)
+			PyErr_SetString(PyExc_AttributeError,"non-existing ParameterDescriptor attribute");
+		return rv;
+	}
+	else
+		return PyDict_SetItemString(self->dict, name, v);
+}
+
+
+/* Get attributes */
+static PyObject *
+ParameterDescriptor_getattr(ParameterDescriptorObject *self, char *name)
+{
+	if (self->dict != NULL) {
+		PyObject *v = PyDict_GetItemString(self->dict, name);
+		if (v != NULL) 
+		{
+			Py_INCREF(v);
+			return v;
+		}
+	}
+	return NULL;
+}
+
+
+/* String representation */
+static PyObject *
+ParameterDescriptor_repr(PyObject *self)
+{
+	ParameterDescriptorObject* v = (ParameterDescriptorObject*)self;
+	if (v->dict) return PyDict_Type.tp_repr((PyObject *)v->dict);
+	else return PyString_FromString("ParameterDescriptor()");
+}
+
+#define ParameterDescriptor_alloc PyType_GenericAlloc
+#define ParameterDescriptor_free PyObject_Del
+
+PyTypeObject ParameterDescriptor_Type = {
+	PyObject_HEAD_INIT(NULL)
+	0,						/*ob_size*/
+	"vampy.ParameterDescriptor",/*tp_name*/
+	sizeof(ParameterDescriptorObject),	/*tp_basicsize*/
+	0,						/*tp_itemsize*/
+	(destructor)ParameterDescriptorObject_dealloc, /*tp_dealloc*/
+	0,						/*tp_print*/
+	(getattrfunc)ParameterDescriptor_getattr, /*tp_getattr*/
+	(setattrfunc)ParameterDescriptor_setattr, /*tp_setattr*/
+	0,						/*tp_compare*/
+	ParameterDescriptor_repr,			/*tp_repr*/
+	0,						/*tp_as_number*/
+	0,						/*tp_as_sequence*/
+	0,						/*tp_as_mapping*/
+	0,						/*tp_hash*/
+	0,                      /*tp_call*/
+    0,                      /*tp_str*/
+    0,                      /*tp_getattro*/
+    0,                      /*tp_setattro*/
+    0,                      /*tp_as_buffer*/
+    Py_TPFLAGS_DEFAULT,     /*tp_flags*/
+    0,                      /*tp_doc*/
+    0,                      /*tp_traverse*/
+    0,                      /*tp_clear*/
+    0,                      /*tp_richcompare*/
+    0,                      /*tp_weaklistoffset*/
+    0,                      /*tp_iter*/
+    0,                      /*tp_iternext*/
+    0,				        /*tp_methods*/ //TypeObject Methods
+    0,                      /*tp_members*/
+    0,                      /*tp_getset*/
+    0,                      /*tp_base*/
+    0,                      /*tp_dict*/
+    0,                      /*tp_descr_get*/
+    0,                      /*tp_descr_set*/
+    0,                      /*tp_dictoffset*/
+    0,                      /*tp_init*/
+    ParameterDescriptor_alloc,/*tp_alloc*/
+    ParameterDescriptor_new,/*tp_new*/
+    ParameterDescriptor_free,/*tp_free*/
+    0,                      /*tp_is_gc*/
+};
+
+/*		  		 	  PyParameterDescriptor C++ API    				*/
+