123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /*
- 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 <http://www.gnu.org/licenses/>.
- */
- #ifndef QUEUE_H
- #define QUEUE_H
- template<class T>
- class MyQueue;
- template<class T>
- class MyQueueNode
- {
- public:
- MyQueueNode(T* data)
- {
- next = 0;
- this->data = data;
- }
- friend class MyQueue<T>;
- private:
- T* data;
- MyQueueNode<T>* next;
- };
- template<class T>
- class MyQueue
- {
- public:
- MyQueue()
- {
- head = tail = 0;
- }
- ~MyQueue() {
- clear();
- }
- void push(T* data)
- {
- if (head == 0)
- {
- tail = head = new MyQueueNode<T>(data);
- }
- else
- {
- tail->next = new MyQueueNode<T>(data);
- tail = tail->next;
- }
- }
- T* pop()
- {
- if (head == 0)
- {
- return 0;
- }
- T* data = head->data;
- MyQueueNode<T>* 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<T>* d = head;
- while(d != 0) {
- count++;
- d = d->next;
- }
- return(count);
- }
- private:
- MyQueueNode<T>* head;
- MyQueueNode<T>* tail;
- };
- #endif
|