#pragma once #include #include "../shape/Point.h" #include "BufferConsumer.h" class ConsumerManager { public: ConsumerManager() {} ~ConsumerManager() {} std::shared_ptr consumerRegister(std::vector& buffer) { std::shared_ptr consumer = std::make_shared(buffer); juce::SpinLock::ScopedLockType scope(consumerLock); consumers.push_back(consumer); return consumer; } void consumerRead(std::shared_ptr consumer) { consumer->waitUntilFull(); juce::SpinLock::ScopedLockType scope(consumerLock); consumers.erase(std::remove(consumers.begin(), consumers.end(), consumer), consumers.end()); } void consumerStop(std::shared_ptr consumer) { if (consumer != nullptr) { juce::SpinLock::ScopedLockType scope(consumerLock); consumer->forceNotify(); } } protected: juce::SpinLock consumerLock; std::vector> consumers; };