// this is the extent server

#ifndef extent_server_h
#define extent_server_h

#include <string>
#include <map>
#include "extent_protocol.h"


struct object {
	std::string value;
	extent_protocol::attr fi;
};

class extent_server {

private:

	int putq; 
	pthread_mutex_t putq_lock;
	int getq;
	pthread_mutex_t getq_lock;

  std::string filename(extent_protocol::extentid_t id);
  int nput;
  int nget;
  int ngetattr;
  int nremove;
  std::map<extent_protocol::extentid_t, object *> * data_map;
 // pthread_mutex_t mutex;
  //some helper functions
  extent_protocol::attr * copy(extent_protocol::attr); 
  void print_stats();
 public:
  extent_server();

  int put(extent_protocol::extentid_t id, std::string, int &);
  int get(extent_protocol::extentid_t id, std::string &);
  int getattr(extent_protocol::extentid_t id, extent_protocol::attr &);
  int setattr(extent_protocol::extentid_t id, extent_protocol::attr , int &);
  int remove(extent_protocol::extentid_t id, int &);
  int print_map(int, int &);
};

#endif 







