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 <Python.h>
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: