@@ 62,7 62,7 @@ struct t_wrapper {
t_object x_obj;
float reserved;
Class* cls;
- Instance inst;
+ Instance* inst = nullptr;
};
class Class : public IConfigurator {
@@ 167,9 167,9 @@ class Class : public IConfigurator {
auto scratch = (const char* const)alloca(p.ksym->size);
auto writePtr = scratch;
PdToBlob(p.ksym->type_descriptor, writePtr, argc, argv);
- *k->var(w->inst.kstate.get(), p.slot) = (void*)scratch;
+ *k->var(w->inst->kstate.get(), p.slot) = (void*)scratch;
if (p.ksym->process) {
- p.ksym->process(w->inst.kstate.get(), outScratch.get(), 1);
+ p.ksym->process(w->inst->kstate.get(), outScratch.get(), 1);
}
}
@@ 216,7 216,7 @@ class Class : public IConfigurator {
}
static void PdResetProc(t_wrapper* w, t_symbol*, int, t_atom*) {
- w->cls->K()->construct(w->inst.kstate.get(), nullptr);
+ w->cls->K()->construct(w->inst->kstate.get(), nullptr);
}
public:
@@ 255,13 255,13 @@ public:
void AddConnections(t_wrapper* wrap) {
for (int i = 1; i < signalSlots.size(); ++i) {
- wrap->inst.inlets.emplace_front(
+ wrap->inst->inlets.emplace_front(
signalinlet_new(&wrap->x_obj, wrap->reserved),
inlet_free);
}
for (auto& p : parameters) {
- wrap->inst.inlets.emplace_front(
+ wrap->inst->inlets.emplace_front(
inlet_new(&wrap->x_obj, &wrap->x_obj.ob_pd,
p.dim > 1 ? &s_list : &s_float,
p.pdsym),
@@ 269,7 269,7 @@ public:
}
for (int i = 0; i < numOutChannels; ++i) {
- wrap->inst.outlets.emplace_front(
+ wrap->inst->outlets.emplace_front(
outlet_new(&wrap->x_obj, &s_signal),
outlet_free);
}
@@ 279,8 279,8 @@ public:
CONSOLE("Constructing %s (%i args)", name.c_str(), argc);
t_wrapper* wrap = (t_wrapper*)pd_new(Pd());
wrap->cls = this;
- new (&wrap->inst) Instance();
- wrap->inst.kstate = ConstructInstance();
+ wrap->inst = new Instance;
+ wrap->inst->kstate = ConstructInstance();
AddConnections(wrap);
// constructor args
@@ 296,21 296,21 @@ public:
}
void Perform(t_wrapper* wrap, t_signal** sig) {
- auto ki = wrap->inst.kstate.get();
+ auto ki = wrap->inst->kstate.get();
for (int i = 0; i < signalSlots.size(); ++i) {
float* ptr = sig[i]->s_vec;
*k->var(ki, signalSlots[i].kslot) = ptr;
}
if (audioClock) {
- audioClock(ki, wrap->inst.outBuffer.data(), sig[0]->s_n);
+ audioClock(ki, wrap->inst->outBuffer.data(), sig[0]->s_n);
float** outChannels = (float**)alloca(sizeof(float*) * numOutChannels);
for (int i = 0; i < numOutChannels; ++i) {
outChannels[i] = sig[signalSlots.size() + i]->s_vec;
}
- Deinterleave(outChannels, wrap->inst.outBuffer.data(), sig[0]->s_n, numOutChannels);
+ Deinterleave(outChannels, wrap->inst->outBuffer.data(), sig[0]->s_n, numOutChannels);
}
}
@@ 326,7 326,7 @@ public:
std::vector<t_int> signals(1);
signals[0] = (t_int)wrap;
- wrap->inst.outBuffer.resize(sys_getblksize() * numOutChannels);
+ wrap->inst->outBuffer.resize(sys_getblksize() * numOutChannels);
for (auto& s : signalSlots) {
signals.emplace_back((t_int)*sp++);
@@ 350,7 350,7 @@ public:
};
void Destructor(t_wrapper* wrap) {
- wrap->inst.~Instance();
+ delete wrap->inst;
}
t_class* Declare(std::string name, krt_class* k, t_newmethod constructor) {