1
0
basics/clap/source/clap-stfx.h

42 lines
1.1 KiB
C++

#include "clap/clap.h"
#include <vector>
#include <functional>
#include <initializer_list>
namespace stfx { namespace clap {
template<template<class> class EffectSTFX>
struct Plugin : public clap_plugin {
template<class ...Args>
Plugin(const clap_plugin_descriptor *desc, Args ...args) : effect(args...) {
this->desc = desc;
this->plugin_data = nullptr;
}
private:
stfx::LibraryEffect<float, EffectSTFX> effect;
};
struct Plugins {
template<template<class> class EffectSTFX, class ...Args>
void add(clap_plugin_descriptor desc, std::initializer_list<const char *> features, Args ...args) {
size_t index = featureLists.size();
featureLists.emplace_back(features);
featureLists[index].push_back(nullptr);
desc.features = featureLists[index].data();
descriptors.push_back(desc);
creates.push_back([=](){
return new Plugin<EffectSTFX>(&descriptors[index], args...);
});
}
private:
std::vector<std::vector<const char *>> featureLists;
std::vector<clap_plugin_descriptor> descriptors;
std::vector<std::function<const clap_plugin_t *()>> creates;
};
}} // namespace