Hi,
struct MyParams {
double v1;
bool v2;
};
class Processor : public AudioEffect
{
//....
std::atomic<MyParams*> setStateParams;
std::atomic<MyParams*> toDeleteParams;
MyParams processParams;
};
tresult process (ProcessData& data)
{
auto stateParams = setStateParams.exchange (nullptr);
if (stateParams)
{
processParams = *stateParams;
auto test = toDeleteParams.exchange (stateParams);
assert (test == nullptr);
}
//....
}
void cleanupMemory()
{
auto toDelete = toDeleteParams.exchange (nullptr); // cleanup memory
if (toDelete)
delete toDelete;
toDelete = setStateParams.exchange (nullptr); // cleanup memory
if (toDelete)
delete toDelete;
}
tresult setState (IBStream* stream)
{
//....
cleanupMemory ();
// allocate new state
auto stateParams = new MyParams;
// read state from stream into stateParams !
setStateParams.exchange (stateParams);
}
tresult setActive (bool state)
{
if(!state)
cleanupMemory ();
}
Coded out of my head, so typos may very well happened.
I hope this makes it clear.
Cheers,
Arne.