fazekasgy@37: /* fazekasgy@37: fazekasgy@37: * Vampy : This plugin is a wrapper around the Vamp plugin API. fazekasgy@37: * It allows for writing Vamp plugins in Python. fazekasgy@37: fazekasgy@37: * Centre for Digital Music, Queen Mary University of London. fazekasgy@37: * Copyright (C) 2008-2009 Gyorgy Fazekas, QMUL. (See Vamp sources fazekasgy@37: * for licence information.) fazekasgy@37: fazekasgy@37: */ fazekasgy@37: fazekasgy@37: #include fazekasgy@37: #include "PyFeatureSet.h" fazekasgy@37: #include "vamp-sdk/Plugin.h" fazekasgy@37: fazekasgy@37: using namespace std; fazekasgy@37: fazekasgy@37: static int fazekasgy@37: FeatureSet_init(FeatureSetObject *self, PyObject *args, PyObject *kwds) fazekasgy@37: { fazekasgy@37: if (PyDict_Type.tp_init((PyObject *)self, args, kwds) < 0) fazekasgy@37: return -1; fazekasgy@37: return 0; fazekasgy@37: } fazekasgy@37: fazekasgy@37: static int fazekasgy@37: FeatureSetObject_ass_sub(FeatureSetObject *mp, PyObject *v, PyObject *w) fazekasgy@37: { fazekasgy@37: if (!PyInt_CheckExact(v)) { fazekasgy@37: PyErr_SetString(PyExc_ValueError, fazekasgy@37: "Output index must be positive integer."); fazekasgy@37: return 0; fazekasgy@37: } fazekasgy@37: if (w == NULL) fazekasgy@37: return PyDict_DelItem((PyObject *)mp, v); fazekasgy@37: else fazekasgy@37: return PyDict_SetItem((PyObject *)mp, v, w); fazekasgy@37: } fazekasgy@37: fazekasgy@37: #define FeatureSet_alloc PyType_GenericAlloc fazekasgy@37: #define FeatureSet_free PyObject_Del fazekasgy@37: //#define FeatureSet_as_mapping PyDict_Type.tp_as_mapping fazekasgy@37: fazekasgy@37: static PyMappingMethods FeatureSet_as_mapping = *(PyDict_Type.tp_as_mapping); fazekasgy@37: fazekasgy@37: PyTypeObject FeatureSet_Type = PyDict_Type; fazekasgy@37: fazekasgy@37: void fazekasgy@37: initFeatureSetType(void) fazekasgy@37: { fazekasgy@37: /*This type is derived from PyDict. We just override some slots here.*/ fazekasgy@37: /*The typical use case is index based assignment as opposed to object memeber access.*/ fazekasgy@37: FeatureSet_Type.ob_type = &PyType_Type; fazekasgy@37: FeatureSet_Type.tp_base = &PyDict_Type; fazekasgy@37: FeatureSet_Type.tp_bases = PyTuple_Pack(1, FeatureSet_Type.tp_base); fazekasgy@37: FeatureSet_Type.tp_name = "vampy.FeatureSet"; fazekasgy@37: // FeatureSet_Type.tp_new = FeatureSet_new; fazekasgy@37: FeatureSet_Type.tp_init = (initproc)FeatureSet_init; fazekasgy@37: FeatureSet_Type.tp_basicsize = sizeof(FeatureSetObject); fazekasgy@37: FeatureSet_as_mapping.mp_ass_subscript = (objobjargproc)FeatureSetObject_ass_sub; fazekasgy@37: FeatureSet_Type.tp_as_mapping = &FeatureSet_as_mapping; fazekasgy@37: } fazekasgy@37: