#ifndef EBUFFER_H
#define EBUFFER_H

#include "estr.h"

class estrbuffer
{
 public:
  char *_str;
  int _strlen;

  int ipos;
  int epos;
  bool full;

  estrbuffer();
  estrbuffer(const estrbuffer& oldbuffer);
  ~estrbuffer();
  
  inline int size(){ return(full?_strlen:(epos+_strlen-ipos)%_strlen); }
  inline int free(){ return(_strlen-size()); }
  inline int freecontig(){ return(full?0:(epos>=ipos?_strlen-epos:ipos-epos)); }

  inline void add(int b){ if (b==0) return; epos=(epos+b)%_strlen; if (epos==ipos) full=true; }
  inline void add(char* str,int b){ if (b==0) return; memcpy(&_str[epos],str,b); epos=(epos+b)%_strlen; if (epos==ipos) full=true; }
  
  inline void clear() { ipos=0; epos=0; full=false; }
  void resize(int newsize);
  bool getline(estr& line);
  void getstr(estr& line);
};

#endif

