#ifndef GENERIC_QUEUE_H #define GENERIC_QUEUE_H #pragma once #include #include #pragma warning( disable : 4786 ) template class Queue { public: Queue(int s=-1); ~Queue(); void Enqueue(Type); Type Dequeue(); void allocate(int s); void LockSize(int s){lock_size=s;}; Type *element; int num; int array_size; int lock_size; Type &operator[](int i){assert(i>=0 && i Queue::Queue(int s){ num=0; array_size=0; element=NULL; lock_size=s; } template Queue::~Queue(){ num=0; if(element) { delete[] element; element = NULL; } } template void Queue::allocate(int s){ assert(s>0); assert(s>=num); Type *old=element; array_size=s; element=new Type[array_size]; assert(element); for(int i=0;i void Queue::Enqueue(Type t) { if(lock_size==-1) { assert(num<=array_size); if(num==array_size) { allocate((array_size)?array_size*2:16); } element[num++]=t; } else { assert(lock_size!=0); if(num>=lock_size) { Dequeue(); element[num++]=t; } else { element[num++]=t; } } } template Type Queue::Dequeue() { assert(num>0); Type result=element[0]; for(int i=1;i