#include <unistd.h>
#include <vector>
#include <time.h>
#include <sys/time.h>
#include <list>
#include <map>
#ifndef BUFFEREDFILEFACTORY_H
#define BUFFEREDFILEFACTORY_H
#ifndef BUFFEREDFILE_H
#include "BufferedFile.h"
#endif
struct lti
{
  bool operator()(int a, int b) const
  { 
	return (a < b);
  }
};
typedef map<int,BufferedFile *> BuffMap;
typedef list<BufferedFile *> BuffVec;
class BufferedFileFactory {
	public:
		BufferedFileFactory();
		BufferedFile * getNewBufferedFile(int fdesc);
		//wait for how long?
		int process(int microTime);
		void closeFile(BufferedFile * f);
		virtual ~BufferedFileFactory();
		void setBufferedFileRead(BufferedFile * bf,bool mode);
		void setBufferedFileWrite(BufferedFile * bf,bool mode);
	private:
		//BuffMap * descriptorToFile;
		BuffVec  descriptorToFile;
		fd_set readSet;
		fd_set writeSet;
		struct timeval tv;
		int maxFd;
};
#endif
