// queue.h -- rozhraní třídy Queue
#ifndef QUEUE_H_
#define QUEUE_H_
// Tato fronta bude obsahovat položky třídy Customer
class Customer
{
private:
	long arrive; // čas příchodu zákazníka
	int processtime;// doba odbavení zákazníka
public:
	Customer() { arrive = processtime = 0; }
	void set(long when);
	long when() const { return arrive; }
	int ptime() const { return processtime; }
};

typedef Customer Item;

class Queue
{
private:
// definice s platností uvnitř třídy
	// Node definice vnořené struktury existující pouze uvnitř třídy
	struct Node { Item item; struct Node * next;};
	enum {Q_SIZE = 10};
// privátní členové třídy
	Node * front; // ukazatel na začátek fronty
	Node * rear; // ukazatel na konec fronty
	int items; // aktuální počet položek fronty
	const int qsize;// maximální počet položek fronty
	// preventivní definice nutné pro zamezení veřejného kopírování
	Queue(const Queue & q) : qsize(0) { }
	Queue & operator=(const Queue & q) { return *this;}
public:
	Queue(int qs = Q_SIZE); // vytvoří frontu s limitem qs
	~Queue();
	bool isempty() const;
	bool isfull() const;
	int queuecount() const;
	bool enqueue(const Item &item); // přidá položku na konec
	bool dequeue(Item &item); // odebere položku ze začátku
};
#endif
