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