Queue

// Dynamically sized first-in first-out queue using po2b memory. Also see class QueueMem in 
// Memory section for additional functions used by this template.
template<typename T> class Queue : public QueueMem
{
public:
    // Get item at front of queue.
    T &operator () () const { return *(T *)GetItem(); }

    // Construct queue. Use estimated maximum items for [incr]. 
    Queue(uint incr = 8) : QueueMem((uint)sizeof(T), incr, Destruct) {}

    // Destructor.
    ~Queue() {}

private:
    static void Destruct(void *ptr) { ((T *)ptr)->~T(); }
};