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