annotate PyFeature.h @ 46:af9c4cee95a8

VC++ fixes. Much of this is changing "and" to "&&". I had never realised until today that "and" is in fact a keyword in C++, albeit not one that has been there since the start, so this should compile (I eventually looked this up having been puzzled by how this code could ever build with any other compiler). However, despite its keywordness, "and" still doesn't seem to be acceptable to VC++. Possibly there's an option to change this, or one could use a macro -- but why not just stick with the token that compilers are known to like?
author cannam
date Mon, 05 Oct 2009 16:14:25 +0000
parents 27bab3a16c9a
children f5c028376bf9
rev   line source
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 /*
fazekasgy@37 13 NOTES: There are two ways to implement the Vamp::Feature wrapper.
fazekasgy@37 14 1) We could keep a Vamp::Feature in the object and
fazekasgy@37 15 convert the values on the fly as they are inserted.
fazekasgy@37 16 However, this requires a way to convert back to Python for
fazekasgy@37 17 this object to be fully usable in python code. These conversions
fazekasgy@37 18 are otherwise unnecessary.
fazekasgy@37 19
fazekasgy@37 20 2) Keep the python attribute objects in a dict as it is normally
fazekasgy@37 21 done in python classes, and convert when the object is returned.
fazekasgy@37 22 This way the object is usable by the interpreter until it is returned
fazekasgy@37 23 to the C++ plugin wrapper.
fazekasgy@37 24 This is different form the Vampy:PyRealTime implementation where the
fazekasgy@37 25 two-way conversion makes more sense (in fact required). Note: For
fazekasgy@37 26 a host implementation option 1) will be required.
fazekasgy@37 27
fazekasgy@37 28 */
fazekasgy@37 29
fazekasgy@37 30 #ifndef _PYFEATURE_H_
fazekasgy@37 31 #define _PYFEATURE_H_
fazekasgy@37 32
fazekasgy@37 33 #include "vamp-sdk/Plugin.h"
fazekasgy@37 34 // #include "PyTypeInterface.h"
fazekasgy@37 35
fazekasgy@37 36
fazekasgy@37 37 typedef struct {
fazekasgy@37 38 PyObject_HEAD
fazekasgy@37 39 PyObject *dict;
fazekasgy@37 40 // Vamp::Plugin::Feature *feature;
fazekasgy@37 41 /// pointer to type interface required: PyTypeInterface ti;
fazekasgy@37 42 } FeatureObject;
fazekasgy@37 43
fazekasgy@37 44 PyAPI_DATA(PyTypeObject) Feature_Type;
fazekasgy@37 45
fazekasgy@37 46 #define PyFeature_CheckExact(v) ((v)->ob_type == &Feature_Type)
fazekasgy@37 47 #define PyFeature_Check(v) PyObject_TypeCheck(v, &Feature_Type)
fazekasgy@37 48
fazekasgy@37 49 ///fast macro version as per API convention
fazekasgy@37 50 #define PyFeature_AS_DICT(v) ((const FeatureObject* const) (v))->dict
fazekasgy@37 51 // #define PyFeature_AS_FEATURE(v) ((const FeatureObject* const) (v))->feature
fazekasgy@37 52
fazekasgy@37 53
fazekasgy@37 54 /* PyFeature C++ API */
fazekasgy@37 55
fazekasgy@37 56 /* Not required here:
fazekasgy@37 57 we will never have to pass a feature back from the wrapper */
fazekasgy@37 58 // PyAPI_FUNC(PyObject *)
fazekasgy@37 59 // PyFeature_FromFeature(Vamp::Plugin::Feature&);
fazekasgy@37 60
fazekasgy@37 61 // PyAPI_FUNC(const Vamp::Plugin::Feature*)
fazekasgy@37 62 // PyFeature_AsFeature (PyObject *self);
fazekasgy@37 63
fazekasgy@37 64
fazekasgy@37 65
fazekasgy@37 66 #endif