////////////////////////////////////////////////////////////
//
// Declaration of a class
// AFifo
//
// Copyright 2001 Alexander Liss
//
//
////////////////////////////////////////////////////////////
#ifndef __FIFO_H__
#define __FIFO_H__
#include "AMutex.h"
// AFifo
// default size limit - 10000
template<class T>
class AFifo
{
AFifo(const AFifo& );
AFifo& operator=(const AFifo& );
public:
AFifo(int limit=10000);
~AFifo();
int set_limit(int limit)
{if(limit<2) return 1; size_limit=limit; return 0;}
// returns zero on success
int push(const T& );
int pop(T& );
private:
struct Node
{
T value;
Node *next;
Node(const T& z):value(z),next(0){}
};
AMutex mutex;
int size_limit,size;
Node *start, *end;
};
#endif