Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
81
Src/nu/SampleQueue.h
Normal file
81
Src/nu/SampleQueue.h
Normal file
|
@ -0,0 +1,81 @@
|
|||
#pragma once
|
||||
#include <bfc/platform/types.h>
|
||||
#include <deque>
|
||||
#include "../nu/AutoLock.h"
|
||||
|
||||
template <class SampleData>
|
||||
class SampleQueue
|
||||
{
|
||||
public:
|
||||
void PushFree(SampleData *new_sample)
|
||||
{
|
||||
queue_guard.Lock();
|
||||
free_queue.push_front(new_sample);
|
||||
queue_guard.Unlock();
|
||||
}
|
||||
|
||||
void PushProcessed(SampleData *new_sample)
|
||||
{
|
||||
queue_guard.Lock();
|
||||
processed_queue.push_front(new_sample);
|
||||
queue_guard.Unlock();
|
||||
}
|
||||
|
||||
// will return 0 if none ready
|
||||
SampleData *PopProcessed()
|
||||
{
|
||||
SampleData *sample=0;
|
||||
queue_guard.Lock();
|
||||
if (!processed_queue.empty())
|
||||
{
|
||||
sample = processed_queue.back();
|
||||
processed_queue.pop_back();
|
||||
}
|
||||
queue_guard.Unlock();
|
||||
return sample;
|
||||
}
|
||||
|
||||
SampleData *PopFree()
|
||||
{
|
||||
SampleData *sample=0;
|
||||
queue_guard.Lock();
|
||||
if (!free_queue.empty())
|
||||
{
|
||||
sample = free_queue.back();
|
||||
free_queue.pop_back();
|
||||
}
|
||||
queue_guard.Unlock();
|
||||
if (!sample)
|
||||
sample = new SampleData;
|
||||
return sample;
|
||||
}
|
||||
|
||||
void Trim()
|
||||
{
|
||||
queue_guard.Lock();
|
||||
//free_queue.deleteAll();
|
||||
auto it_f = free_queue.begin();
|
||||
while (it_f != free_queue.end())
|
||||
{
|
||||
SampleData* p = *it_f;
|
||||
delete p;
|
||||
it_f = free_queue.erase(it_f);
|
||||
}
|
||||
|
||||
//processed_queue.deleteAll();
|
||||
auto it_p = processed_queue.begin();
|
||||
while (it_p != processed_queue.end())
|
||||
{
|
||||
SampleData* p = *it_p;
|
||||
delete p;
|
||||
it_p = processed_queue.erase(it_p);
|
||||
}
|
||||
queue_guard.Unlock();
|
||||
}
|
||||
|
||||
private:
|
||||
std::deque<SampleData*> free_queue;
|
||||
std::deque<SampleData*> processed_queue;
|
||||
|
||||
Nullsoft::Utility::LockGuard queue_guard;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue