annotate PyParameterDescriptor.cpp @ 51:c1e4f706ca9a

Fix numpy version incompatibility issues and updated some example plugins.
author fazekasgy
date Thu, 08 Oct 2009 08:47:28 +0000
parents af9c4cee95a8
children
rev   line source
fazekasgy@37 1 /*
fazekasgy@37 2
fazekasgy@37 3 * Vampy : This plugin is a wrapper around the Vamp plugin API.
fazekasgy@37 4 * It allows for writing Vamp plugins in Python.
fazekasgy@37 5
fazekasgy@37 6 * Centre for Digital Music, Queen Mary University of London.
fazekasgy@37 7 * Copyright (C) 2008-2009 Gyorgy Fazekas, QMUL. (See Vamp sources
fazekasgy@37 8 * for licence information.)
fazekasgy@37 9
fazekasgy@37 10 */
fazekasgy@37 11
fazekasgy@37 12 #include <Python.h>
fazekasgy@37 13 #include "PyParameterDescriptor.h"
fazekasgy@37 14 #include "vamp-sdk/Plugin.h"
fazekasgy@37 15 #include <string>
fazekasgy@37 16 #include "PyTypeInterface.h"
fazekasgy@37 17
fazekasgy@37 18 using namespace std;
fazekasgy@37 19 using namespace Vamp;
fazekasgy@37 20 using Vamp::Plugin;
fazekasgy@37 21
fazekasgy@37 22 /* ParameterDescriptor Object's Methods */
fazekasgy@37 23 //these objects have no callable methods
fazekasgy@37 24
fazekasgy@37 25 /* PyParameterDescriptor methods implementing protocols */
fazekasgy@37 26 // these functions are called by the interpreter automatically
fazekasgy@37 27
fazekasgy@37 28 /* New ParameterDescriptor object */
fazekasgy@37 29 static PyObject *
fazekasgy@37 30 ParameterDescriptor_new(PyTypeObject *type, PyObject *args, PyObject *kw)
fazekasgy@37 31 {
fazekasgy@37 32
fazekasgy@37 33 ParameterDescriptorObject *self =
fazekasgy@37 34 (ParameterDescriptorObject*)type->tp_alloc(type, 0);
fazekasgy@37 35
fazekasgy@37 36 if (self == NULL) return NULL;
fazekasgy@37 37 self->dict = PyDict_New();
fazekasgy@37 38 if (self->dict == NULL) return NULL;
fazekasgy@37 39
fazekasgy@37 40 /// allow copying objects
cannam@46 41 if (args && PyTuple_Size(args) == 1) {
fazekasgy@37 42 PyObject* arg = PyTuple_GET_ITEM(args,0);
fazekasgy@37 43 if (PyParameterDescriptor_CheckExact(arg))
fazekasgy@37 44 PyDict_Merge(self->dict,PyParameterDescriptor_AS_DICT(arg),0);
fazekasgy@37 45 else if (PyDict_CheckExact(arg))
fazekasgy@37 46 PyDict_Merge(self->dict,arg,0);
fazekasgy@37 47 else {
fazekasgy@37 48 PyErr_SetString(PyExc_TypeError,
fazekasgy@37 49 "Object takes zero or one ParameterDescriptor or dictionary arguments.");
fazekasgy@37 50 return NULL;
fazekasgy@37 51 }
fazekasgy@37 52 }
fazekasgy@37 53 return (PyObject *) self;
fazekasgy@37 54 }
fazekasgy@37 55
fazekasgy@37 56
fazekasgy@37 57 /* DESTRUCTOR: delete type object */
fazekasgy@37 58 static void
fazekasgy@37 59 ParameterDescriptorObject_dealloc(ParameterDescriptorObject *self)
fazekasgy@37 60 {
fazekasgy@37 61 Py_XDECREF(self->dict);
fazekasgy@37 62 PyObject_Del(self);
fazekasgy@37 63 }
fazekasgy@37 64
fazekasgy@37 65
fazekasgy@37 66 /* Set attributes */
fazekasgy@37 67 static int
fazekasgy@37 68 ParameterDescriptor_setattr(ParameterDescriptorObject *self, char *name, PyObject *v)
fazekasgy@37 69 {
fazekasgy@37 70 if (v == NULL) {
fazekasgy@37 71 int rv = PyDict_DelItemString(self->dict, name);
fazekasgy@37 72 if (rv < 0)
fazekasgy@37 73 PyErr_SetString(PyExc_AttributeError,"non-existing ParameterDescriptor attribute");
fazekasgy@37 74 return rv;
fazekasgy@37 75 }
fazekasgy@37 76 else
fazekasgy@37 77 return PyDict_SetItemString(self->dict, name, v);
fazekasgy@37 78 }
fazekasgy@37 79
fazekasgy@37 80
fazekasgy@37 81 /* Get attributes */
fazekasgy@37 82 static PyObject *
fazekasgy@37 83 ParameterDescriptor_getattr(ParameterDescriptorObject *self, char *name)
fazekasgy@37 84 {
fazekasgy@37 85 if (self->dict != NULL) {
fazekasgy@37 86 PyObject *v = PyDict_GetItemString(self->dict, name);
fazekasgy@37 87 if (v != NULL)
fazekasgy@37 88 {
fazekasgy@37 89 Py_INCREF(v);
fazekasgy@37 90 return v;
fazekasgy@37 91 }
fazekasgy@51 92 PyErr_SetString(PyExc_AttributeError,"non-existing ParameterDescriptor attribute");
fazekasgy@37 93 }
fazekasgy@37 94 return NULL;
fazekasgy@37 95 }
fazekasgy@37 96
fazekasgy@37 97
fazekasgy@37 98 /* String representation */
fazekasgy@37 99 static PyObject *
fazekasgy@37 100 ParameterDescriptor_repr(PyObject *self)
fazekasgy@37 101 {
fazekasgy@37 102 ParameterDescriptorObject* v = (ParameterDescriptorObject*)self;
fazekasgy@37 103 if (v->dict) return PyDict_Type.tp_repr((PyObject *)v->dict);
fazekasgy@37 104 else return PyString_FromString("ParameterDescriptor()");
fazekasgy@37 105 }
fazekasgy@37 106
fazekasgy@37 107 #define ParameterDescriptor_alloc PyType_GenericAlloc
fazekasgy@37 108 #define ParameterDescriptor_free PyObject_Del
fazekasgy@37 109
fazekasgy@37 110 PyTypeObject ParameterDescriptor_Type = {
fazekasgy@37 111 PyObject_HEAD_INIT(NULL)
fazekasgy@37 112 0, /*ob_size*/
fazekasgy@37 113 "vampy.ParameterDescriptor",/*tp_name*/
fazekasgy@37 114 sizeof(ParameterDescriptorObject), /*tp_basicsize*/
fazekasgy@37 115 0, /*tp_itemsize*/
fazekasgy@37 116 (destructor)ParameterDescriptorObject_dealloc, /*tp_dealloc*/
fazekasgy@37 117 0, /*tp_print*/
fazekasgy@37 118 (getattrfunc)ParameterDescriptor_getattr, /*tp_getattr*/
fazekasgy@37 119 (setattrfunc)ParameterDescriptor_setattr, /*tp_setattr*/
fazekasgy@37 120 0, /*tp_compare*/
fazekasgy@37 121 ParameterDescriptor_repr, /*tp_repr*/
fazekasgy@37 122 0, /*tp_as_number*/
fazekasgy@37 123 0, /*tp_as_sequence*/
fazekasgy@37 124 0, /*tp_as_mapping*/
fazekasgy@37 125 0, /*tp_hash*/
fazekasgy@37 126 0, /*tp_call*/
fazekasgy@37 127 0, /*tp_str*/
fazekasgy@37 128 0, /*tp_getattro*/
fazekasgy@37 129 0, /*tp_setattro*/
fazekasgy@37 130 0, /*tp_as_buffer*/
fazekasgy@37 131 Py_TPFLAGS_DEFAULT, /*tp_flags*/
fazekasgy@37 132 0, /*tp_doc*/
fazekasgy@37 133 0, /*tp_traverse*/
fazekasgy@37 134 0, /*tp_clear*/
fazekasgy@37 135 0, /*tp_richcompare*/
fazekasgy@37 136 0, /*tp_weaklistoffset*/
fazekasgy@37 137 0, /*tp_iter*/
fazekasgy@37 138 0, /*tp_iternext*/
fazekasgy@37 139 0, /*tp_methods*/ //TypeObject Methods
fazekasgy@37 140 0, /*tp_members*/
fazekasgy@37 141 0, /*tp_getset*/
fazekasgy@37 142 0, /*tp_base*/
fazekasgy@37 143 0, /*tp_dict*/
fazekasgy@37 144 0, /*tp_descr_get*/
fazekasgy@37 145 0, /*tp_descr_set*/
fazekasgy@37 146 0, /*tp_dictoffset*/
fazekasgy@37 147 0, /*tp_init*/
fazekasgy@37 148 ParameterDescriptor_alloc,/*tp_alloc*/
fazekasgy@37 149 ParameterDescriptor_new,/*tp_new*/
fazekasgy@37 150 ParameterDescriptor_free,/*tp_free*/
fazekasgy@37 151 0, /*tp_is_gc*/
fazekasgy@37 152 };
fazekasgy@37 153
fazekasgy@37 154 /* PyParameterDescriptor C++ API */
fazekasgy@37 155