Mercurial > hg > piper-cpp
changeset 20:7ca64f74add2
Add and use PreservingPluginHandleMapper -- removing the constant variant, which was a misstep
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Fri, 20 May 2016 11:08:53 +0100 |
parents | f379b0e9a8e1 |
children | dff96610ac05 |
files | bits/ConstantPluginHandleMapper.h utilities/json-to-capnp.cpp |
diffstat | 2 files changed, 26 insertions(+), 79 deletions(-) [+] |
line wrap: on
line diff
--- a/bits/ConstantPluginHandleMapper.h Fri May 20 10:25:01 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ - -/* - Vampipe - - Centre for Digital Music, Queen Mary, University of London. - Copyright 2006-2016 Chris Cannam and QMUL. - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, copy, - modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR - ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - Except as contained in this notice, the names of the Centre for - Digital Music; Queen Mary, University of London; and Chris Cannam - shall not be used in advertising or otherwise to promote the sale, - use or other dealings in this Software without prior written - authorization. -*/ - -#ifndef VAMPIPE_CONSTANT_PLUGIN_HANDLE_MAPPER_H -#define VAMPIPE_CONSTANT_PLUGIN_HANDLE_MAPPER_H - -#include "PluginHandleMapper.h" - -namespace vampipe { - -/** - * A trivial PluginHandleMapper, to be used for tests and for - * translating between protocols that contain handles without actually - * loading any plugins. - * - * This mapper only knows about one handle, and if it is asked for - * that one, it returns a fixed plugin pointer (which might never be - * dereferenced, depending on the context in which this class is - * used). The idea would be to create one of these on the fly each - * time a new handle needs to be translated. - */ -class ConstantPluginHandleMapper : public PluginHandleMapper -{ -public: - ConstantPluginHandleMapper(Vamp::Plugin *plugin, int32_t handle) : - m_plugin(plugin), m_handle(handle) { } - - virtual int32_t pluginToHandle(Vamp::Plugin *p) { - if (p == m_plugin) return m_handle; - else throw NotFound(); - } - - virtual Vamp::Plugin *handleToPlugin(int32_t h) { - if (h == m_handle) return m_plugin; - else throw NotFound(); - } - -private: - Vamp::Plugin *m_plugin; - int32_t m_handle; -}; - -} - -#endif
--- a/utilities/json-to-capnp.cpp Fri May 20 10:25:01 2016 +0100 +++ b/utilities/json-to-capnp.cpp Fri May 20 11:08:53 2016 +0100 @@ -2,8 +2,6 @@ #include "VampJson.h" #include "VampnProto.h" -#include "bits/ConstantPluginHandleMapper.h" - #include <iostream> #include <sstream> #include <stdexcept> @@ -37,6 +35,27 @@ return j; } +class PreservingPluginHandleMapper : public PluginHandleMapper +{ +public: + PreservingPluginHandleMapper() : m_handle(0), m_plugin(0) { } + + virtual int32_t pluginToHandle(Vamp::Plugin *p) { + if (p == m_plugin) return m_handle; + else throw NotFound(); + } + + virtual Vamp::Plugin *handleToPlugin(int32_t h) { + m_handle = h; + m_plugin = reinterpret_cast<Vamp::Plugin *>(1); + return m_plugin; + } + +private: + int32_t m_handle; + Vamp::Plugin *m_plugin; +}; + void handle_input(::capnp::MallocMessageBuilder &message, string input) { @@ -50,7 +69,11 @@ throw VampJson::Failure("can't convert Basic block on its own"); } else if (type == "configurationrequest") { - throw VampJson::Failure("not implemented yet"); ///!!! + + auto req = message.initRoot<ConfigurationRequest>(); + PreservingPluginHandleMapper mapper; + VampnProto::buildConfigurationRequest + (req, VampJson::toConfigurationRequest(payload, mapper), mapper); } else if (type == "configurationresponse") { throw VampJson::Failure("not implemented yet"); ///!!!