annotate vamp-sdk/plugguard.h @ 263:4454843ff384

* OK, we're going to have to place the host stuff in its own namespace too. Otherwise our new SV build on OSX fails to load old plugins because they pull in the host namespace PluginBase and thus report the wrong Vamp version... *sigh*
author cannam
date Thu, 20 Nov 2008 15:01:30 +0000
parents 3cf5bd155e5b
children 03c7167e1f30
rev   line source
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
cannam@233 74 #ifdef _VAMP_NO_PLUGIN_NAMESPACE
cannam@233 75 #define _VAMP_SDK_PLUGSPACE_BEGIN(h)
cannam@233 76 #define _VAMP_SDK_PLUGSPACE_END(h)
cannam@233 77 #else
cannam@233 78 #define _VAMP_SDK_PLUGSPACE_BEGIN(h) \
cannam@230 79 namespace _VampPlugin {
cannam@230 80
cannam@233 81 #define _VAMP_SDK_PLUGSPACE_END(h) \
cannam@230 82 } \
cannam@230 83 using namespace _VampPlugin;
cannam@233 84 #endif
cannam@230 85
cannam@230 86 #endif
cannam@230 87
cannam@230 88 #endif
cannam@230 89