annotate PyFeatureSet.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 "PyFeatureSet.h"
fazekasgy@31 3 #include "vamp-sdk/Plugin.h"
fazekasgy@31 4
fazekasgy@31 5 using namespace std;
fazekasgy@31 6
fazekasgy@31 7 static int
fazekasgy@31 8 FeatureSet_init(FeatureSetObject *self, PyObject *args, PyObject *kwds)
fazekasgy@31 9 {
fazekasgy@31 10 if (PyDict_Type.tp_init((PyObject *)self, args, kwds) < 0)
fazekasgy@31 11 return -1;
fazekasgy@31 12 return 0;
fazekasgy@31 13 }
fazekasgy@31 14
fazekasgy@31 15 static int
fazekasgy@31 16 FeatureSetObject_ass_sub(FeatureSetObject *mp, PyObject *v, PyObject *w)
fazekasgy@31 17 {
fazekasgy@31 18 // cerr << "called FeatureSetObject_ass_sub" << endl;
fazekasgy@31 19 if (!PyInt_CheckExact(v)) {
fazekasgy@31 20 /// TODO: Set ValueError here.
fazekasgy@32 21 cerr << "ValueError: Output index must be positive integer" << endl;
fazekasgy@31 22 return 0;
fazekasgy@31 23 }
fazekasgy@31 24 if (w == NULL)
fazekasgy@31 25 return PyDict_DelItem((PyObject *)mp, v);
fazekasgy@31 26 else
fazekasgy@31 27 return PyDict_SetItem((PyObject *)mp, v, w);
fazekasgy@31 28 }
fazekasgy@31 29
fazekasgy@31 30 #define FeatureSet_alloc PyType_GenericAlloc
fazekasgy@31 31 #define FeatureSet_free PyObject_Del
fazekasgy@31 32 //#define FeatureSet_as_mapping PyDict_Type.tp_as_mapping
fazekasgy@31 33
fazekasgy@31 34 static PyMappingMethods FeatureSet_as_mapping = *(PyDict_Type.tp_as_mapping);
fazekasgy@31 35
fazekasgy@31 36 PyTypeObject FeatureSet_Type = PyDict_Type;
fazekasgy@31 37 // PyTypeObject FeatureSet_Type = {
fazekasgy@31 38 // PyObject_HEAD_INIT(NULL)
fazekasgy@31 39 // 0, /*ob_size*/
fazekasgy@31 40 // "vampy.FeatureSet", /*tp_name*/
fazekasgy@31 41 // sizeof(FeatureSetObject), /*tp_basicsize*/
fazekasgy@31 42 // 0, /*tp_itemsize*/
fazekasgy@31 43 // (destructor)FeatureSetObject_dealloc, /*tp_dealloc*/
fazekasgy@31 44 // 0,//PyDict_Type.tp_print, /*tp_print*/
fazekasgy@31 45 // 0,//PyDict_Type.tp_getattr, /*tp_getattr*/
fazekasgy@31 46 // 0,//PyDict_Type.tp_setattr, /*tp_setattr*/
fazekasgy@31 47 // 0, /*tp_compare*/
fazekasgy@31 48 // 0,//PyDict_Type.tp_repr, /*tp_repr*/
fazekasgy@31 49 // 0, /*tp_as_number*/
fazekasgy@31 50 // 0, /*tp_as_sequence*/
fazekasgy@31 51 // FeatureSet_as_mapping, /*tp_as_mapping*/
fazekasgy@31 52 // 0, /*tp_hash*/
fazekasgy@31 53 // 0,//Feature_test, /*tp_call*/ // call on an instance
fazekasgy@31 54 // 0, /*tp_str*/
fazekasgy@31 55 // PyDict_Type.tp_getattro,/*tp_getattro*/
fazekasgy@31 56 // 0,//PyDict_Type.tp_setattro,/*tp_setattro*/
fazekasgy@31 57 // 0, /*tp_as_buffer*/
fazekasgy@31 58 // Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
fazekasgy@31 59 // 0, /*tp_doc*/
fazekasgy@31 60 // PyDict_Type.tp_traverse, /*tp_traverse*/
fazekasgy@31 61 // PyDict_Type.tp_clear, /*tp_clear*/
fazekasgy@31 62 // 0, /*tp_richcompare*/
fazekasgy@31 63 // 0, /*tp_weaklistoffset*/
fazekasgy@31 64 // 0, /*tp_iter*/
fazekasgy@31 65 // 0, /*tp_iternext*/
fazekasgy@31 66 // PyDict_Type.tp_methods, /*tp_methods*/ //TypeObject Methods
fazekasgy@31 67 // PyDict_Type.tp_members, /*tp_members*/
fazekasgy@31 68 // PyDict_Type.tp_getset, /*tp_getset*/
fazekasgy@31 69 // 0, /*tp_base*/
fazekasgy@31 70 // PyDict_Type.tp_dict, /*tp_dict*/
fazekasgy@31 71 // 0, /*tp_descr_get*/
fazekasgy@31 72 // 0, /*tp_descr_set*/
fazekasgy@31 73 // PyDict_Type.tp_dictoffset, /*tp_dictoffset*/
fazekasgy@31 74 // (initproc)FeatureSet_init, /*tp_init*/
fazekasgy@31 75 // FeatureSet_alloc, /*tp_alloc*/
fazekasgy@31 76 // FeatureSet_new, /*tp_new*/
fazekasgy@31 77 // FeatureSet_free, /*tp_free*/
fazekasgy@31 78 // 0, /*tp_is_gc*/
fazekasgy@31 79 // };
fazekasgy@31 80
fazekasgy@31 81
fazekasgy@31 82 void
fazekasgy@31 83 initFeatureSetType(void)
fazekasgy@31 84 {
fazekasgy@31 85 /*This type is derived from PyDict. We just override some slots here.*/
fazekasgy@31 86 /*The typical use case is index based assignment as opposed to object memeber access.*/
fazekasgy@31 87 FeatureSet_Type.ob_type = &PyType_Type;
fazekasgy@31 88 FeatureSet_Type.tp_base = &PyDict_Type;
fazekasgy@31 89 FeatureSet_Type.tp_bases = PyTuple_Pack(1, FeatureSet_Type.tp_base);
fazekasgy@31 90 FeatureSet_Type.tp_name = "vampy.FeatureSet";
fazekasgy@31 91 // FeatureSet_Type.tp_new = FeatureSet_new;
fazekasgy@31 92 FeatureSet_Type.tp_init = (initproc)FeatureSet_init;
fazekasgy@31 93 FeatureSet_Type.tp_basicsize = sizeof(FeatureSetObject);
fazekasgy@31 94 FeatureSet_as_mapping.mp_ass_subscript = (objobjargproc)FeatureSetObject_ass_sub;
fazekasgy@31 95 FeatureSet_Type.tp_as_mapping = &FeatureSet_as_mapping;
fazekasgy@31 96 }
fazekasgy@31 97