// This may look like C code, but it is really -*- C++ -*- #ifndef TOISEQBUFF_H #define TOISEQBUFF_H #include "toi.h" // Classe de TOI avec buffer, et echantillonnage regulier. // Pour le moment au moins, // il faut que les providers fassent arriver les donnees par samplenum croissant. class TOISeqBuffered : public TOIRegular { public: TOISeqBuffered(int wsz=8192); TOISeqBuffered(string nm, int wsz=8192); virtual ~TOISeqBuffered(); virtual void PrintStatus(ostream & os) const; inline void setDebugLevel(int lev=0) { dbglev=lev; } inline int getDebugLevel() const { return dbglev; } inline int getFirstIn() const { return first_in; } inline int getFirstOut() const { return first_out; } inline int getLastIn() const { return (next_in-1); } inline int getLastOut() const { return (next_out-1); } virtual DataStatus isDataAvailNL(int iStart, int iEnd); virtual DataStatus isDataAvailNL(int i); // override required protected: double* data; int_4* flags; int wsize; int buffsize; int next_in; int next_out; int first_in; int first_out; bool started; double defaultValue; int dbglev; void AllocBuffer(int wsz); #ifdef WITH_SOPHYA virtual Array doGetData(int iStart, int iEnd); virtual TArray doGetFlag(int iStart, int iEnd); #endif virtual void doGetData(int i, double & val, int_4 & flg); virtual void doPutData(int i, double value, int_4 flag=0); virtual void doWontNeedBefore(int i); virtual int nextDataAvail(int iAfter); virtual bool hasSomeData(); inline double & dataRef(int i) { return data[i%buffsize]; } inline int_4 & flagRef(int i) { return flags[i%buffsize]; } inline bool isDataDeleted(int i) { return((i < next_in-buffsize-1) ? true : false); } }; #endif