annotate PyOutputDescriptor.cpp @ 35:2ba482378038 vampy2

* Fix compile error with VC++. I am totally at a loss to explain why this should have compiled with any other compiler! * Update VC project file. This code does now build with VC++ without HAVE_NUMPY -- I haven't installed Numpy yet
author cannam
date Thu, 24 Sep 2009 08:52:04 +0000
parents 4f1894c7591b
children
rev   line source
fazekasgy@31 1 #include <Python.h>
fazekasgy@31 2 #include "PyOutputDescriptor.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 /* OutputDescriptor Object's Methods */
fazekasgy@31 12 //Feature objects have no callable methods
fazekasgy@31 13
fazekasgy@31 14 /* PyOutputDescriptor methods implementing protocols */
fazekasgy@31 15 // these functions are called by the interpreter automatically
fazekasgy@31 16
fazekasgy@31 17 /* New OutputDescriptor object */
fazekasgy@31 18 static PyObject *
fazekasgy@31 19 OutputDescriptor_new(PyTypeObject *type, PyObject *args, PyObject *kw)
fazekasgy@31 20 {
fazekasgy@31 21
fazekasgy@31 22 if (!PyArg_ParseTuple(args, ":OutputDescriptor")) {
fazekasgy@31 23 PyErr_SetString(PyExc_TypeError,
fazekasgy@31 24 "Error: OutputDescriptor initialised with arguments.");
fazekasgy@31 25 return NULL;
fazekasgy@31 26 }
fazekasgy@31 27
fazekasgy@31 28 OutputDescriptorObject *self =
fazekasgy@31 29 (OutputDescriptorObject*)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 OutputDescriptorObject_dealloc(OutputDescriptorObject *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 OutputDescriptor_setattr(OutputDescriptorObject *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 OutputDescriptor 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 OutputDescriptor_getattr(OutputDescriptorObject *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 OutputDescriptor_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 OutputDescriptor_alloc PyType_GenericAlloc
fazekasgy@31 90 #define OutputDescriptor_free PyObject_Del
fazekasgy@31 91
fazekasgy@31 92
fazekasgy@31 93 /* REAL-TIME TYPE OBJECT */
fazekasgy@31 94
fazekasgy@31 95 PyTypeObject OutputDescriptor_Type = {
fazekasgy@31 96 PyObject_HEAD_INIT(NULL)
fazekasgy@31 97 0, /*ob_size*/
fazekasgy@31 98 "vampy.OutputDescriptor",/*tp_name*/
fazekasgy@31 99 sizeof(OutputDescriptorObject), /*tp_basicsize*/
fazekasgy@31 100 0, /*tp_itemsize*/
fazekasgy@31 101 (destructor)OutputDescriptorObject_dealloc, /*tp_dealloc*/
fazekasgy@31 102 0, /*tp_print*/
fazekasgy@31 103 (getattrfunc)OutputDescriptor_getattr, /*tp_getattr*/
fazekasgy@31 104 (setattrfunc)OutputDescriptor_setattr, /*tp_setattr*/
fazekasgy@31 105 0, /*tp_compare*/
fazekasgy@31 106 OutputDescriptor_repr, /*tp_repr*/
fazekasgy@31 107 0, /*tp_as_number*/
fazekasgy@31 108 0, /*tp_as_sequence*/
fazekasgy@31 109 0, /*tp_as_mapping*/
fazekasgy@31 110 0, /*tp_hash*/
fazekasgy@31 111 0, /*tp_call*/
fazekasgy@31 112 0, /*tp_str*/
fazekasgy@31 113 0, /*tp_getattro*/
fazekasgy@31 114 0, /*tp_setattro*/
fazekasgy@31 115 0, /*tp_as_buffer*/
fazekasgy@31 116 Py_TPFLAGS_DEFAULT, /*tp_flags*/
fazekasgy@31 117 0, /*tp_doc*/
fazekasgy@31 118 0, /*tp_traverse*/
fazekasgy@31 119 0, /*tp_clear*/
fazekasgy@31 120 0, /*tp_richcompare*/
fazekasgy@31 121 0, /*tp_weaklistoffset*/
fazekasgy@31 122 0, /*tp_iter*/
fazekasgy@31 123 0, /*tp_iternext*/
fazekasgy@31 124 0, /*tp_methods*/ //TypeObject Methods
fazekasgy@31 125 0, /*tp_members*/
fazekasgy@31 126 0, /*tp_getset*/
fazekasgy@31 127 0, /*tp_base*/
fazekasgy@31 128 0, /*tp_dict*/
fazekasgy@31 129 0, /*tp_descr_get*/
fazekasgy@31 130 0, /*tp_descr_set*/
fazekasgy@31 131 0, /*tp_dictoffset*/
fazekasgy@31 132 0, /*tp_init*/
fazekasgy@31 133 OutputDescriptor_alloc, /*tp_alloc*/
fazekasgy@31 134 OutputDescriptor_new, /*tp_new*/
fazekasgy@31 135 OutputDescriptor_free, /*tp_free*/
fazekasgy@31 136 0, /*tp_is_gc*/
fazekasgy@31 137 };
fazekasgy@31 138
fazekasgy@31 139 /* PyOutputDescriptor C++ API */
fazekasgy@31 140