| cannam@230 | 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */ | 
| cannam@230 | 2 | 
| cannam@230 | 3 /* | 
| cannam@230 | 4     Vamp | 
| cannam@230 | 5 | 
| cannam@230 | 6     An API for audio analysis and feature extraction plugins. | 
| cannam@230 | 7 | 
| cannam@230 | 8     Centre for Digital Music, Queen Mary, University of London. | 
| cannam@230 | 9     Copyright 2006 Chris Cannam. | 
| cannam@230 | 10 | 
| cannam@230 | 11     Permission is hereby granted, free of charge, to any person | 
| cannam@230 | 12     obtaining a copy of this software and associated documentation | 
| cannam@230 | 13     files (the "Software"), to deal in the Software without | 
| cannam@230 | 14     restriction, including without limitation the rights to use, copy, | 
| cannam@230 | 15     modify, merge, publish, distribute, sublicense, and/or sell copies | 
| cannam@230 | 16     of the Software, and to permit persons to whom the Software is | 
| cannam@230 | 17     furnished to do so, subject to the following conditions: | 
| cannam@230 | 18 | 
| cannam@230 | 19     The above copyright notice and this permission notice shall be | 
| cannam@230 | 20     included in all copies or substantial portions of the Software. | 
| cannam@230 | 21 | 
| cannam@230 | 22     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
| cannam@230 | 23     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
| cannam@230 | 24     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | 
| cannam@230 | 25     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR | 
| cannam@230 | 26     ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF | 
| cannam@230 | 27     CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | 
| cannam@230 | 28     WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | 
| cannam@230 | 29 | 
| cannam@230 | 30     Except as contained in this notice, the names of the Centre for | 
| cannam@230 | 31     Digital Music; Queen Mary, University of London; and Chris Cannam | 
| cannam@230 | 32     shall not be used in advertising or otherwise to promote the sale, | 
| cannam@230 | 33     use or other dealings in this Software without prior written | 
| cannam@230 | 34     authorization. | 
| cannam@230 | 35 */ | 
| cannam@230 | 36 | 
| cannam@234 | 37 #ifndef _VAMP_SDK_PLUGGUARD_H_ | 
| cannam@234 | 38 #define _VAMP_SDK_PLUGGUARD_H_ | 
| cannam@230 | 39 | 
| cannam@230 | 40 /** | 
| cannam@230 | 41  * Normal usage should be: | 
| cannam@230 | 42  * | 
| cannam@230 | 43  * - Plugins include vamp-sdk/Plugin.h or vamp-sdk/PluginBase.h. | 
| cannam@230 | 44  *   These files include this header, which specifies an appropriate | 
| cannam@230 | 45  *   namespace for the plugin classes to avoid any risk of conflict | 
| cannam@230 | 46  *   with non-plugin class implementations in the host on load. | 
| cannam@230 | 47  * | 
| cannam@230 | 48  * - Hosts include vamp-hostsdk/Plugin.h, vamp-hostsdk/PluginBase.h, | 
| cannam@233 | 49  *   vamp-hostsdk/PluginHostAdapter, vamp-hostsdk/PluginLoader.h etc. | 
| cannam@233 | 50  *   These files include vamp-hostsdk/hostguard.h, which makes a note | 
| cannam@230 | 51  *   that we are in a host.  A file such as vamp-hostsdk/Plugin.h | 
| cannam@230 | 52  *   then simply includes vamp-sdk/Plugin.h, and this guard header | 
| cannam@230 | 53  *   takes notice of the fact that it has been included from a host | 
| cannam@230 | 54  *   and leaves the plugin namespace unset. | 
| cannam@230 | 55  * | 
| cannam@230 | 56  * Problems will occur when a host includes files directly from the | 
| cannam@230 | 57  * vamp-sdk directory.  There are two reasons this might happen: | 
| cannam@230 | 58  * mistake, perhaps owing to ignorance of the fact that this isn't | 
| cannam@230 | 59  * allowed (particularly since it was the normal mechanism in v1 of | 
| cannam@230 | 60  * the SDK); and a wish to incorporate plugin code directly into the | 
| cannam@230 | 61  * host rather than having to load it. | 
| cannam@230 | 62  * | 
| cannam@230 | 63  * What if the host does include a vamp-sdk header by mistake?  We can | 
| cannam@230 | 64  * catch it if it's included before something from vamp-hostsdk.  If | 
| cannam@230 | 65  * it's included after something from vamp-hostsdk, it will work OK | 
| cannam@234 | 66  * anyway.  The remaining problem case is where nothing from | 
| cannam@234 | 67  * vamp-hostsdk is included in the same file.  We can't catch that. | 
| cannam@230 | 68  */ | 
| cannam@230 | 69 | 
| cannam@263 | 70 #ifndef _VAMP_IN_HOSTSDK | 
| cannam@230 | 71 | 
| cannam@243 | 72 #define _VAMP_IN_PLUGINSDK 1 | 
| cannam@230 | 73 | 
| Chris@539 | 74 #define VAMP_SDK_VERSION "2.10" | 
| Chris@337 | 75 #define VAMP_SDK_MAJOR_VERSION 2 | 
| Chris@539 | 76 #define VAMP_SDK_MINOR_VERSION 10 | 
| Chris@337 | 77 | 
| cannam@233 | 78 #ifdef _VAMP_NO_PLUGIN_NAMESPACE | 
| cannam@233 | 79 #define _VAMP_SDK_PLUGSPACE_BEGIN(h) | 
| cannam@233 | 80 #define _VAMP_SDK_PLUGSPACE_END(h) | 
| cannam@233 | 81 #else | 
| cannam@265 | 82 #ifdef _VAMP_PLUGIN_IN_HOST_NAMESPACE | 
| cannam@265 | 83 #define _VAMP_SDK_PLUGSPACE_BEGIN(h) \ | 
| cannam@265 | 84 	namespace _VampHost { | 
| cannam@265 | 85 | 
| cannam@265 | 86 #define _VAMP_SDK_PLUGSPACE_END(h) \ | 
| cannam@265 | 87 	} \ | 
| cannam@265 | 88 	using namespace _VampHost; | 
| cannam@265 | 89 #else | 
| cannam@233 | 90 #define _VAMP_SDK_PLUGSPACE_BEGIN(h) \ | 
| cannam@230 | 91 	namespace _VampPlugin { | 
| cannam@230 | 92 | 
| cannam@233 | 93 #define _VAMP_SDK_PLUGSPACE_END(h) \ | 
| cannam@230 | 94 	} \ | 
| cannam@230 | 95 	using namespace _VampPlugin; | 
| cannam@233 | 96 #endif | 
| cannam@265 | 97 #endif | 
| cannam@230 | 98 | 
| cannam@230 | 99 #endif | 
| cannam@230 | 100 | 
| cannam@230 | 101 #endif | 
| cannam@230 | 102 |