Changeset 1464 in Sophya for trunk/ArchTOIPipe/Kernel/toi.cc
- Timestamp:
- Apr 11, 2001, 12:01:44 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ArchTOIPipe/Kernel/toi.cc
r1462 r1464 9 9 #endif 10 10 11 #define CHKSYNC(ctx)12 // if (((TOIRegularWindow*)this)->data.size() != ((TOIRegularWindow*)this)->flags.size()) \13 // cout << ctx << ((TOIRegularWindow*)this)->data.size() << " " << \14 // ((TOIRegularWindow*)this)->flags.size() << endl; \15 11 16 12 TOI::TOI() { … … 73 69 } 74 70 75 #ifndef NO_SOPHYA 71 /* 72 RZCMV ----- l'interface va etre modifiee, NE PAS UTILISER 73 #ifndef NO_SOPHYA 76 74 Array TOI::getError(int iStart, int iEnd) { 77 75 if (errorTOI == NULL) throw NotFoundExc("TOI::getDataError : no Error TOI"); 78 return errorTOI->getData(iStart, iEnd); 76 return errorTOI->getData(iStart, iEnd); 77 } 78 Array TOI::getData(int iStart, int iEnd) { 79 lock(); 80 Array a = doGetData(iStart, iEnd); 81 unlock(); 82 if (fgsigput) { fgsigput = false; broadcast(); } 83 return a; 84 } 85 TArray<int_4> TOI::getFlag(int iStart, int iEnd) { 86 lock(); 87 TArray<int_4> a = doGetFlag(iStart, iEnd); 88 unlock(); 89 if (fgsigput) { fgsigput = false; broadcast(); } 90 return a; 79 91 } 80 92 #endif 81 82 /*RZCMV 93 l'interface va etre modifiee, NE PAS UTILISER ---- 94 */ 95 96 97 /* 98 RZCMV ------- A revoir les getError() ... 83 99 double TOI::getError(int i) { 84 100 if (errorTOI == NULL) throw NotFoundExc("TOI::getDataError : no Error TOI"); … … 94 110 */ 95 111 96 #ifndef NO_SOPHYA97 Array TOI::getData(int iStart, int iEnd) {98 lock();99 Array a = doGetData(iStart, iEnd);100 unlock();101 if (fgsigput) { fgsigput = false; broadcast(); }102 return a;103 }104 #endif105 106 112 double TOI::getData(int i) { 107 113 lock(); 108 int_ 4flg;114 int_8 flg; 109 115 double dat; 110 116 doGetData(i, dat, flg); … … 114 120 } 115 121 116 void TOI::getData(int i, double &data,int_ 4&flag) {122 void TOI::getData(int i, double &data,int_8 &flag) { 117 123 lock(); 118 124 doGetData(i, data, flag); … … 122 128 } 123 129 124 125 126 #ifndef NO_SOPHYA127 TArray<int_4> TOI::getFlag(int iStart, int iEnd) {128 lock();129 TArray<int_4> a = doGetFlag(iStart, iEnd);130 unlock();131 if (fgsigput) { fgsigput = false; broadcast(); }132 return a;133 }134 #endif135 136 130 137 138 139 void TOI::putData(int i, double value, int_4 flag) { 131 132 void TOI::putData(int i, double value, int_8 flag) { 140 133 lock(); 141 134 doPutData(i, value, flag); … … 208 201 209 202 210 TOIRegularWindow::TOIRegularWindow() {211 i0 = -1;212 }213 214 TOIRegularWindow::TOIRegularWindow(string nm) {215 i0 = -1;216 setName(nm);217 }218 219 TOIRegularWindow::~TOIRegularWindow() {220 }221 222 TOI::DataStatus TOIRegularWindow::isDataAvailNL(int iStart, int iEnd) {223 if (iEnd >= i0 + (long)data.size()) return DATA_NOT_YET;224 if (iStart < i0) return DATA_DELETED;225 return DATA_OK;226 }227 228 TOI::DataStatus TOIRegularWindow::isDataAvailNL(int i) {229 return TOI::isDataAvailNL(i);230 }231 232 void TOIRegularWindow::doWontNeedBefore(int i) {233 if (i>= i0 + (long)data.size())234 i = i0 + (long)data.size() - 1;235 if (i>i0) { // don't empty list236 int osz = data.size();237 data.erase(data.begin(), data.begin()+(i-i0));238 flags.erase(flags.begin(), flags.begin()+(i-i0));239 i0 = i;240 }241 }242 243 244 #ifndef NO_SOPHYA245 Array TOIRegularWindow::doGetData(int iStart, int iEnd) {246 if (!isDataAvailNL(iStart, iEnd)) {247 throw RangeCheckError("TOI::getData : data not available");248 }249 Array dat(iEnd - iStart + 1);250 long j0 = iStart - i0;251 for (int i=0; i<iEnd-iStart+1; i++) {252 dat[i] = data[i+j0];253 }254 return dat;255 }256 #endif257 258 void TOIRegularWindow::doGetData(int i, double & val, int_4 & flg) {259 if (isDataAvailNL(i) != DATA_OK) {260 cerr << "TOI::getData : data not available " << i << endl;261 throw RangeCheckError("TOI::getData : data not available");262 }263 264 val = data[i - i0];265 flg = flags[i - i0];266 267 }268 269 270 #ifndef NO_SOPHYA271 TArray<int_4> TOIRegularWindow::doGetFlag(int iStart, int iEnd) {272 if (isDataAvailNL(iStart, iEnd) != DATA_OK) throw RangeCheckError("TOI::getData : data not available");273 TArray<int_4> dat(iEnd - iStart + 1);274 long j0 = iStart - i0;275 for (int i=0; i<iEnd-iStart+1; i++) {276 dat[i] = flags[i+j0];277 }278 return dat;279 }280 #endif281 282 /*RZCMV283 int_4 TOIRegularWindow::doGetFlag(int i) {284 if (isDataAvailNL(i) != DATA_OK) {285 cerr << "TOI::getFlag : data not available " << i << endl;286 throw RangeCheckError("TOI::getFlag : data not available");287 }288 return flags[i - i0];289 }290 */291 292 293 void TOIRegularWindow::doPutData(int i, double value, int_4 flag) {294 if (i0 == -1) {295 data.insert(data.begin(), 1, defaultValue);296 flags.insert(flags.begin(), 1, 0);297 i0 = i;298 } else if (i<i0) {299 data.insert(data.begin(), i0-i, defaultValue);300 flags.insert(flags.begin(), i0-i, 0);301 i0 = i;302 } else if (i>=i0+(int)data.size()) {303 data.insert(data.end(), (long) (i-(i0+data.size())+1), defaultValue);304 flags.insert(flags.end(), (long) (i-(i0+flags.size())+1), 0);305 }306 data[i-i0] = value;307 flags[i-i0] = flag;308 }309 310 bool TOIRegularWindow::hasSomeData() {311 lock();312 bool x = !data.empty();313 unlock();314 return x;315 }316 317 int TOIRegularWindow::nextDataAvail(int iAfter) {318 lock();319 if (iAfter >= i0 + (long)data.size()) {unlock(); return -1;}320 if (iAfter < i0) {unlock(); return i0;}321 unlock();322 return iAfter+1;323 }324 325 /* A faire, le nettoyage (heuristique selon demandes ?, guide ? ) */326 327
Note:
See TracChangeset
for help on using the changeset viewer.