fazekasgy@37
|
1 /*
|
fazekasgy@37
|
2
|
fazekasgy@37
|
3 * Vampy : This plugin is a wrapper around the Vamp plugin API.
|
fazekasgy@37
|
4 * It allows for writing Vamp plugins in Python.
|
fazekasgy@37
|
5
|
fazekasgy@37
|
6 * Centre for Digital Music, Queen Mary University of London.
|
fazekasgy@37
|
7 * Copyright (C) 2008-2009 Gyorgy Fazekas, QMUL. (See Vamp sources
|
fazekasgy@37
|
8 * for licence information.)
|
fazekasgy@37
|
9
|
fazekasgy@37
|
10 */
|
fazekasgy@37
|
11
|
fazekasgy@37
|
12 #include <Python.h>
|
fazekasgy@37
|
13 #include "PyFeatureSet.h"
|
fazekasgy@37
|
14 #include "vamp-sdk/Plugin.h"
|
fazekasgy@37
|
15
|
fazekasgy@37
|
16 using namespace std;
|
fazekasgy@37
|
17
|
fazekasgy@37
|
18 static int
|
fazekasgy@37
|
19 FeatureSet_init(FeatureSetObject *self, PyObject *args, PyObject *kwds)
|
fazekasgy@37
|
20 {
|
fazekasgy@37
|
21 if (PyDict_Type.tp_init((PyObject *)self, args, kwds) < 0)
|
fazekasgy@37
|
22 return -1;
|
fazekasgy@37
|
23 return 0;
|
fazekasgy@37
|
24 }
|
fazekasgy@37
|
25
|
fazekasgy@37
|
26 static int
|
fazekasgy@37
|
27 FeatureSetObject_ass_sub(FeatureSetObject *mp, PyObject *v, PyObject *w)
|
fazekasgy@37
|
28 {
|
fazekasgy@37
|
29 if (!PyInt_CheckExact(v)) {
|
fazekasgy@37
|
30 PyErr_SetString(PyExc_ValueError,
|
fazekasgy@37
|
31 "Output index must be positive integer.");
|
fazekasgy@37
|
32 return 0;
|
fazekasgy@37
|
33 }
|
fazekasgy@37
|
34 if (w == NULL)
|
fazekasgy@37
|
35 return PyDict_DelItem((PyObject *)mp, v);
|
fazekasgy@37
|
36 else
|
fazekasgy@37
|
37 return PyDict_SetItem((PyObject *)mp, v, w);
|
fazekasgy@37
|
38 }
|
fazekasgy@37
|
39
|
fazekasgy@37
|
40 #define FeatureSet_alloc PyType_GenericAlloc
|
fazekasgy@37
|
41 #define FeatureSet_free PyObject_Del
|
fazekasgy@37
|
42 //#define FeatureSet_as_mapping PyDict_Type.tp_as_mapping
|
fazekasgy@37
|
43
|
fazekasgy@37
|
44 static PyMappingMethods FeatureSet_as_mapping = *(PyDict_Type.tp_as_mapping);
|
fazekasgy@37
|
45
|
fazekasgy@37
|
46 PyTypeObject FeatureSet_Type = PyDict_Type;
|
fazekasgy@37
|
47
|
fazekasgy@37
|
48 void
|
fazekasgy@37
|
49 initFeatureSetType(void)
|
fazekasgy@37
|
50 {
|
fazekasgy@37
|
51 /*This type is derived from PyDict. We just override some slots here.*/
|
fazekasgy@37
|
52 /*The typical use case is index based assignment as opposed to object memeber access.*/
|
fazekasgy@37
|
53 FeatureSet_Type.ob_type = &PyType_Type;
|
fazekasgy@37
|
54 FeatureSet_Type.tp_base = &PyDict_Type;
|
fazekasgy@37
|
55 FeatureSet_Type.tp_bases = PyTuple_Pack(1, FeatureSet_Type.tp_base);
|
fazekasgy@37
|
56 FeatureSet_Type.tp_name = "vampy.FeatureSet";
|
fazekasgy@37
|
57 // FeatureSet_Type.tp_new = FeatureSet_new;
|
fazekasgy@37
|
58 FeatureSet_Type.tp_init = (initproc)FeatureSet_init;
|
fazekasgy@37
|
59 FeatureSet_Type.tp_basicsize = sizeof(FeatureSetObject);
|
fazekasgy@37
|
60 FeatureSet_as_mapping.mp_ass_subscript = (objobjargproc)FeatureSetObject_ass_sub;
|
fazekasgy@37
|
61 FeatureSet_Type.tp_as_mapping = &FeatureSet_as_mapping;
|
fazekasgy@37
|
62 }
|
fazekasgy@37
|
63
|