/* EQ2Emulator: Everquest II Server Emulator Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net) This file is part of EQ2Emulator. EQ2Emulator is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. EQ2Emulator is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with EQ2Emulator. If not, see . */ #ifndef QUEUE_H #define QUEUE_H template class MyQueue; template class MyQueueNode { public: MyQueueNode(T* data) { next = 0; this->data = data; } friend class MyQueue; private: T* data; MyQueueNode* next; }; template class MyQueue { public: MyQueue() { head = tail = 0; } ~MyQueue() { clear(); } void push(T* data) { if (head == 0) { tail = head = new MyQueueNode(data); } else { tail->next = new MyQueueNode(data); tail = tail->next; } } T* pop() { if (head == 0) { return 0; } T* data = head->data; MyQueueNode* next_node = head->next; delete head; head = next_node; return data; } T* top() { if (head == 0) { return 0; } return head->data; } bool empty() { if (head == 0) { return true; } return false; } void clear() { T* d = 0; while((d = pop())) { delete d; } return; } int count() { int count = 0; MyQueueNode* d = head; while(d != 0) { count++; d = d->next; } return(count); } private: MyQueueNode* head; MyQueueNode* tail; }; #endif