fazekasgy@31: #include fazekasgy@31: #include "PyFeatureSet.h" fazekasgy@31: #include "vamp-sdk/Plugin.h" fazekasgy@31: fazekasgy@31: using namespace std; fazekasgy@31: fazekasgy@31: static int fazekasgy@31: FeatureSet_init(FeatureSetObject *self, PyObject *args, PyObject *kwds) fazekasgy@31: { fazekasgy@31: if (PyDict_Type.tp_init((PyObject *)self, args, kwds) < 0) fazekasgy@31: return -1; fazekasgy@31: return 0; fazekasgy@31: } fazekasgy@31: fazekasgy@31: static int fazekasgy@31: FeatureSetObject_ass_sub(FeatureSetObject *mp, PyObject *v, PyObject *w) fazekasgy@31: { fazekasgy@31: // cerr << "called FeatureSetObject_ass_sub" << endl; fazekasgy@31: if (!PyInt_CheckExact(v)) { fazekasgy@31: /// TODO: Set ValueError here. fazekasgy@32: cerr << "ValueError: Output index must be positive integer" << endl; fazekasgy@31: return 0; fazekasgy@31: } fazekasgy@31: if (w == NULL) fazekasgy@31: return PyDict_DelItem((PyObject *)mp, v); fazekasgy@31: else fazekasgy@31: return PyDict_SetItem((PyObject *)mp, v, w); fazekasgy@31: } fazekasgy@31: fazekasgy@31: #define FeatureSet_alloc PyType_GenericAlloc fazekasgy@31: #define FeatureSet_free PyObject_Del fazekasgy@31: //#define FeatureSet_as_mapping PyDict_Type.tp_as_mapping fazekasgy@31: fazekasgy@31: static PyMappingMethods FeatureSet_as_mapping = *(PyDict_Type.tp_as_mapping); fazekasgy@31: fazekasgy@31: PyTypeObject FeatureSet_Type = PyDict_Type; fazekasgy@31: // PyTypeObject FeatureSet_Type = { fazekasgy@31: // PyObject_HEAD_INIT(NULL) fazekasgy@31: // 0, /*ob_size*/ fazekasgy@31: // "vampy.FeatureSet", /*tp_name*/ fazekasgy@31: // sizeof(FeatureSetObject), /*tp_basicsize*/ fazekasgy@31: // 0, /*tp_itemsize*/ fazekasgy@31: // (destructor)FeatureSetObject_dealloc, /*tp_dealloc*/ fazekasgy@31: // 0,//PyDict_Type.tp_print, /*tp_print*/ fazekasgy@31: // 0,//PyDict_Type.tp_getattr, /*tp_getattr*/ fazekasgy@31: // 0,//PyDict_Type.tp_setattr, /*tp_setattr*/ fazekasgy@31: // 0, /*tp_compare*/ fazekasgy@31: // 0,//PyDict_Type.tp_repr, /*tp_repr*/ fazekasgy@31: // 0, /*tp_as_number*/ fazekasgy@31: // 0, /*tp_as_sequence*/ fazekasgy@31: // FeatureSet_as_mapping, /*tp_as_mapping*/ fazekasgy@31: // 0, /*tp_hash*/ fazekasgy@31: // 0,//Feature_test, /*tp_call*/ // call on an instance fazekasgy@31: // 0, /*tp_str*/ fazekasgy@31: // PyDict_Type.tp_getattro,/*tp_getattro*/ fazekasgy@31: // 0,//PyDict_Type.tp_setattro,/*tp_setattro*/ fazekasgy@31: // 0, /*tp_as_buffer*/ fazekasgy@31: // Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ fazekasgy@31: // 0, /*tp_doc*/ fazekasgy@31: // PyDict_Type.tp_traverse, /*tp_traverse*/ fazekasgy@31: // PyDict_Type.tp_clear, /*tp_clear*/ fazekasgy@31: // 0, /*tp_richcompare*/ fazekasgy@31: // 0, /*tp_weaklistoffset*/ fazekasgy@31: // 0, /*tp_iter*/ fazekasgy@31: // 0, /*tp_iternext*/ fazekasgy@31: // PyDict_Type.tp_methods, /*tp_methods*/ //TypeObject Methods fazekasgy@31: // PyDict_Type.tp_members, /*tp_members*/ fazekasgy@31: // PyDict_Type.tp_getset, /*tp_getset*/ fazekasgy@31: // 0, /*tp_base*/ fazekasgy@31: // PyDict_Type.tp_dict, /*tp_dict*/ fazekasgy@31: // 0, /*tp_descr_get*/ fazekasgy@31: // 0, /*tp_descr_set*/ fazekasgy@31: // PyDict_Type.tp_dictoffset, /*tp_dictoffset*/ fazekasgy@31: // (initproc)FeatureSet_init, /*tp_init*/ fazekasgy@31: // FeatureSet_alloc, /*tp_alloc*/ fazekasgy@31: // FeatureSet_new, /*tp_new*/ fazekasgy@31: // FeatureSet_free, /*tp_free*/ fazekasgy@31: // 0, /*tp_is_gc*/ fazekasgy@31: // }; fazekasgy@31: fazekasgy@31: fazekasgy@31: void fazekasgy@31: initFeatureSetType(void) fazekasgy@31: { fazekasgy@31: /*This type is derived from PyDict. We just override some slots here.*/ fazekasgy@31: /*The typical use case is index based assignment as opposed to object memeber access.*/ fazekasgy@31: FeatureSet_Type.ob_type = &PyType_Type; fazekasgy@31: FeatureSet_Type.tp_base = &PyDict_Type; fazekasgy@31: FeatureSet_Type.tp_bases = PyTuple_Pack(1, FeatureSet_Type.tp_base); fazekasgy@31: FeatureSet_Type.tp_name = "vampy.FeatureSet"; fazekasgy@31: // FeatureSet_Type.tp_new = FeatureSet_new; fazekasgy@31: FeatureSet_Type.tp_init = (initproc)FeatureSet_init; fazekasgy@31: FeatureSet_Type.tp_basicsize = sizeof(FeatureSetObject); fazekasgy@31: FeatureSet_as_mapping.mp_ass_subscript = (objobjargproc)FeatureSetObject_ass_sub; fazekasgy@31: FeatureSet_Type.tp_as_mapping = &FeatureSet_as_mapping; fazekasgy@31: } fazekasgy@31: