annotate PyParameterDescriptor.cpp @ 32:a8231788216c vampy2

Vampy2: accept numpy array return types.
author fazekasgy
date Mon, 21 Sep 2009 13:56:28 +0000
parents 4f1894c7591b
children
rev   line source
fazekasgy@31 1 #include <Python.h>
fazekasgy@31 2 #include "PyParameterDescriptor.h"
fazekasgy@31 3 #include "vamp-sdk/Plugin.h"
fazekasgy@31 4 #include <string>
fazekasgy@31 5 #include "PyTypeInterface.h"
fazekasgy@31 6
fazekasgy@31 7 using namespace std;
fazekasgy@31 8 using namespace Vamp;
fazekasgy@31 9 using Vamp::Plugin;
fazekasgy@31 10
fazekasgy@31 11 /* ParameterDescriptor Object's Methods */
fazekasgy@31 12 //Feature objects have no callable methods
fazekasgy@31 13
fazekasgy@31 14 /* PyParameterDescriptor methods implementing protocols */
fazekasgy@31 15 // these functions are called by the interpreter automatically
fazekasgy@31 16
fazekasgy@31 17 /* New ParameterDescriptor object */
fazekasgy@31 18 static PyObject *
fazekasgy@31 19 ParameterDescriptor_new(PyTypeObject *type, PyObject *args, PyObject *kw)
fazekasgy@31 20 {
fazekasgy@31 21
fazekasgy@31 22 if (!PyArg_ParseTuple(args, ":ParameterDescriptor")) {
fazekasgy@31 23 PyErr_SetString(PyExc_TypeError,
fazekasgy@31 24 "Error: ParameterDescriptor initialised with arguments.");
fazekasgy@31 25 return NULL;
fazekasgy@31 26 }
fazekasgy@31 27
fazekasgy@31 28 ParameterDescriptorObject *self =
fazekasgy@31 29 (ParameterDescriptorObject*)type->tp_alloc(type, 0);
fazekasgy@31 30
fazekasgy@31 31 if (self == NULL) return NULL;
fazekasgy@31 32 self->dict = PyDict_New();
fazekasgy@31 33 if (self->dict == NULL) return NULL;
fazekasgy@31 34 return (PyObject *) self;
fazekasgy@31 35 }
fazekasgy@31 36
fazekasgy@31 37
fazekasgy@31 38 /* DESTRUCTOR: delete type object */
fazekasgy@31 39 static void
fazekasgy@31 40 ParameterDescriptorObject_dealloc(ParameterDescriptorObject *self)
fazekasgy@31 41 {
fazekasgy@31 42 Py_XDECREF(self->dict);
fazekasgy@31 43 PyObject_Del(self);
fazekasgy@31 44 }
fazekasgy@31 45
fazekasgy@31 46
fazekasgy@31 47 /* Set attributes */
fazekasgy@31 48 static int
fazekasgy@31 49 ParameterDescriptor_setattr(ParameterDescriptorObject *self, char *name, PyObject *v)
fazekasgy@31 50 {
fazekasgy@31 51 if (v == NULL) {
fazekasgy@31 52 int rv = PyDict_DelItemString(self->dict, name);
fazekasgy@31 53 if (rv < 0)
fazekasgy@31 54 PyErr_SetString(PyExc_AttributeError,"non-existing ParameterDescriptor attribute");
fazekasgy@31 55 return rv;
fazekasgy@31 56 }
fazekasgy@31 57 else
fazekasgy@31 58 return PyDict_SetItemString(self->dict, name, v);
fazekasgy@31 59 }
fazekasgy@31 60
fazekasgy@31 61
fazekasgy@31 62 /* Get attributes */
fazekasgy@31 63 static PyObject *
fazekasgy@31 64 ParameterDescriptor_getattr(ParameterDescriptorObject *self, char *name)
fazekasgy@31 65 {
fazekasgy@31 66 if (self->dict != NULL) {
fazekasgy@31 67 PyObject *v = PyDict_GetItemString(self->dict, name);
fazekasgy@31 68 if (v != NULL)
fazekasgy@31 69 {
fazekasgy@31 70 Py_INCREF(v);
fazekasgy@31 71 return v;
fazekasgy@31 72 }
fazekasgy@31 73 }
fazekasgy@31 74 return NULL;
fazekasgy@31 75 }
fazekasgy@31 76
fazekasgy@31 77
fazekasgy@31 78 /* String representation */
fazekasgy@31 79 static PyObject *
fazekasgy@31 80 ParameterDescriptor_repr(PyObject *self)
fazekasgy@31 81 {
fazekasgy@31 82 // if (PyFeature_CheckExact(self)) {}
fazekasgy@31 83 // PyObject* intdict = self
fazekasgy@31 84 return Py_BuildValue("s",
fazekasgy@31 85 "not yet implemented");
fazekasgy@31 86 // ((RealTimeObject*)self)->rt->toString().c_str());
fazekasgy@31 87 }
fazekasgy@31 88
fazekasgy@31 89 #define ParameterDescriptor_alloc PyType_GenericAlloc
fazekasgy@31 90 #define ParameterDescriptor_free PyObject_Del
fazekasgy@31 91
fazekasgy@31 92 PyTypeObject ParameterDescriptor_Type = {
fazekasgy@31 93 PyObject_HEAD_INIT(NULL)
fazekasgy@31 94 0, /*ob_size*/
fazekasgy@31 95 "vampy.ParameterDescriptor",/*tp_name*/
fazekasgy@31 96 sizeof(ParameterDescriptorObject), /*tp_basicsize*/
fazekasgy@31 97 0, /*tp_itemsize*/
fazekasgy@31 98 (destructor)ParameterDescriptorObject_dealloc, /*tp_dealloc*/
fazekasgy@31 99 0, /*tp_print*/
fazekasgy@31 100 (getattrfunc)ParameterDescriptor_getattr, /*tp_getattr*/
fazekasgy@31 101 (setattrfunc)ParameterDescriptor_setattr, /*tp_setattr*/
fazekasgy@31 102 0, /*tp_compare*/
fazekasgy@31 103 ParameterDescriptor_repr, /*tp_repr*/
fazekasgy@31 104 0, /*tp_as_number*/
fazekasgy@31 105 0, /*tp_as_sequence*/
fazekasgy@31 106 0, /*tp_as_mapping*/
fazekasgy@31 107 0, /*tp_hash*/
fazekasgy@31 108 0, /*tp_call*/
fazekasgy@31 109 0, /*tp_str*/
fazekasgy@31 110 0, /*tp_getattro*/
fazekasgy@31 111 0, /*tp_setattro*/
fazekasgy@31 112 0, /*tp_as_buffer*/
fazekasgy@31 113 Py_TPFLAGS_DEFAULT, /*tp_flags*/
fazekasgy@31 114 0, /*tp_doc*/
fazekasgy@31 115 0, /*tp_traverse*/
fazekasgy@31 116 0, /*tp_clear*/
fazekasgy@31 117 0, /*tp_richcompare*/
fazekasgy@31 118 0, /*tp_weaklistoffset*/
fazekasgy@31 119 0, /*tp_iter*/
fazekasgy@31 120 0, /*tp_iternext*/
fazekasgy@31 121 0, /*tp_methods*/ //TypeObject Methods
fazekasgy@31 122 0, /*tp_members*/
fazekasgy@31 123 0, /*tp_getset*/
fazekasgy@31 124 0, /*tp_base*/
fazekasgy@31 125 0, /*tp_dict*/
fazekasgy@31 126 0, /*tp_descr_get*/
fazekasgy@31 127 0, /*tp_descr_set*/
fazekasgy@31 128 0, /*tp_dictoffset*/
fazekasgy@31 129 0, /*tp_init*/
fazekasgy@31 130 ParameterDescriptor_alloc,/*tp_alloc*/
fazekasgy@31 131 ParameterDescriptor_new,/*tp_new*/
fazekasgy@31 132 ParameterDescriptor_free,/*tp_free*/
fazekasgy@31 133 0, /*tp_is_gc*/
fazekasgy@31 134 };
fazekasgy@31 135
fazekasgy@31 136 /* PyParameterDescriptor C++ API */
fazekasgy@31 137