Skip to content

Instantly share code, notes, and snippets.

@jaz303
Created November 1, 2012 21:29
Show Gist options
  • Save jaz303/3996722 to your computer and use it in GitHub Desktop.
Save jaz303/3996722 to your computer and use it in GitHub Desktop.
#ifndef BUFFERPOOL_H
#define BUFFERPOOL_H
#include <QObject>
template <class T, class R = T>
class ObjectPool
{
public:
ObjectPool(int count)
: m_count(count),
m_numTaken(0)
{
m_pool = new T[m_count];
m_free = new T*[m_count];
for (int i = 0; i < m_count; i++) {
m_free[i] = &m_pool[i];
}
}
~ObjectPool()
{
delete[] m_pool;
delete[] m_free;
}
R* take()
{
if (m_numTaken == m_count) {
return 0;
} else {
return (R*)m_free[m_numTaken++];
}
}
void replace(R* item)
{
m_free[--m_numTaken] = (T*)item;
}
private:
int m_count;
T *m_pool;
T **m_free;
int m_numTaken;
};
#include "bdpbridgequeuedmessage.h"
typedef ObjectPool<BDPBridgeQueuedMessage> MessagePool;
typedef ObjectPool<char[256],quint8> BufferPool;
#endif // BUFFERPOOL_H
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment