#ifndef GRID_SERIALISATION_ABSTRACT_READER_H
#define GRID_SERIALISATION_ABSTRACT_READER_H

namespace Grid {
 class Writer  {
public:

  virtual ~Writer() {};

  virtual void push(const std::string &s) = 0;
  virtual void pop(void) =0;
  virtual void write( const std::string& s,const std::string &output      ) =0;
  virtual void write( const std::string& s,const  int16_t    output      ) =0;
  virtual void write( const std::string& s,const uint16_t    output      ) =0;
  virtual void write( const std::string& s,const  int32_t    output      ) =0;
  virtual void write( const std::string& s,const uint32_t    output      ) =0;
  virtual void write( const std::string& s,const  int64_t    output      ) =0;
  virtual void write( const std::string& s,const uint64_t    output      ) =0;
  virtual void write( const std::string& s,const  float      output      ) =0;
  virtual void write( const std::string& s,const double      output      ) =0;
  virtual void write( const std::string& s,const bool        output      ) =0;
  
};

class Reader {
public:



  virtual ~Reader() {};

  virtual void read( const std::string& s,std::string &output      ) =0;
  virtual void push(const std::string &s) =0;
  virtual void pop(void) = 0;

  virtual void read( const std::string& s,  int16_t  &output      ) =0;
  virtual void read( const std::string& s, uint16_t  &output      ) =0;
  virtual void read( const std::string& s,  int32_t  &output      ) =0;
  virtual void read( const std::string& s, uint32_t  &output      ) =0;
  virtual void read( const std::string& s,  int64_t  &output      ) =0;
  virtual void read( const std::string& s, uint64_t  &output      ) =0;
  virtual void read( const std::string& s,  float    &output      ) =0;
  virtual void read( const std::string& s, double    &output      ) =0;
  virtual void read( const std::string& s, bool      &output      ) =0;
  
};

}
#endif