#include "toiprocessor.h" #include "toiregwindow.h" #include #ifdef WITH_SOPHYA #include "pexceptions.h" #else #include "apexceptions.h" #endif #define CHKSYNC(ctx) // if (((TOIRegularWindow*)this)->data.size() != ((TOIRegularWindow*)this)->flags.size()) \ // cout << ctx << ((TOIRegularWindow*)this)->data.size() << " " << \ // ((TOIRegularWindow*)this)->flags.size() << endl; \ // ------------------------------------------------------------ // -------------------- TOIRegularWindow -------------------- // ------------------------------------------------------------ TOIRegularWindow::TOIRegularWindow() { i0 = -1; } TOIRegularWindow::TOIRegularWindow(string nm) { i0 = -1; setName(nm); } TOIRegularWindow::~TOIRegularWindow() { } TOI::DataStatus TOIRegularWindow::isDataAvailNL(int iStart, int iEnd) { if (iEnd >= i0 + (long)data.size()) return DATA_NOT_YET; if (iStart < i0) return DATA_DELETED; return DATA_OK; } TOI::DataStatus TOIRegularWindow::isDataAvailNL(int i) { return TOI::isDataAvailNL(i); } void TOIRegularWindow::doWontNeedBefore(int i) { if (i>= i0 + (long)data.size()) i = i0 + (long)data.size() - 1; if (i>i0) { // don't empty list int osz = data.size(); data.erase(data.begin(), data.begin()+(i-i0)); flags.erase(flags.begin(), flags.begin()+(i-i0)); i0 = i; } } #ifndef NO_SOPHYA /* ----- l'interface va etre modifiee, NE PAS UTILISER Array TOIRegularWindow::doGetData(int iStart, int iEnd) { if (!isDataAvailNL(iStart, iEnd)) { throw RangeCheckError("TOI::getData : data not available"); } Array dat(iEnd - iStart + 1); long j0 = iStart - i0; for (int i=0; i TOIRegularWindow::doGetFlag(int iStart, int iEnd) { if (isDataAvailNL(iStart, iEnd) != DATA_OK) throw RangeCheckError("TOI::getData : data not available"); TArray dat(iEnd - iStart + 1); long j0 = iStart - i0; for (int i=0; i=i0+(int)data.size()) { data.insert(data.end(), (long) (i-(i0+data.size())+1), defaultValue); flags.insert(flags.end(), (long) (i-(i0+flags.size())+1), flgdef); } data[i-i0] = value; flags[i-i0] = flag; } bool TOIRegularWindow::hasSomeData() { lock(); bool x = !data.empty(); unlock(); return x; } int TOIRegularWindow::nextDataAvail(int iAfter) { lock(); if (iAfter >= i0 + (long)data.size()) {unlock(); return -1;} if (iAfter < i0) {unlock(); return i0;} unlock(); return iAfter+1; } /* A faire, le nettoyage (heuristique selon demandes ?, guide ? ) */