source: Sophya/trunk/ArchTOIPipe/Kernel/toi.h@ 1367

Last change on this file since 1367 was 1365, checked in by aubourg, 25 years ago

pipeline TOI archeops

File size: 3.4 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2#ifndef TOI_H
3#define TOI_H
4
5#include "config.h"
6
7#include <pthread.h>
8#include <vector>
9using namespace std;
10
11#ifdef WITH_SOPHYA
12#include "array.h"
13#include "pexceptions.h"
14using namespace SOPHYA;
15#else
16#include "apexceptions.h"
17#endif
18
19
20
21class TOIProcessor;
22
23class TOI {
24public:
25 TOI();
26 TOI(string name);
27 virtual ~TOI();
28
29#ifdef WITH_SOPHYA
30 virtual Array getData(int iStart, int iEnd);
31 virtual Array getError(int iStart, int iEnd);
32 virtual TArray<int_4> getFlag(int iStart, int iEnd);
33#endif
34
35 virtual double getData(int i);
36 virtual double getError(int i);
37 virtual int_4 getFlag(int i);
38
39 enum DataStatus {DATA_OK=0, DATA_DELETED, DATA_NOT_YET};
40 virtual DataStatus isDataAvail(int iStart, int iEnd);
41 virtual DataStatus isDataAvail(int i);
42 virtual void waitForData(int iStart, int iEnd);
43 virtual void waitForData(int i);
44 virtual void waitForAnyData();
45 virtual int nextDataAvail(int iAfter)=0;
46 virtual bool hasSomeData()=0;
47
48 virtual void putData(int i, double value, int_4 flag=0);
49 virtual void putDataError(int i, double value,
50 double error, int_4 flag=0);
51
52 virtual void wontNeedBefore(int i);
53
54 bool dbg;
55
56 void setName(string n) {name =n;}
57 string getName() {return name;}
58
59protected:
60 TOI* errorTOI;
61 pthread_mutex_t mutex;
62 TOIProcessor* producer;
63 vector<TOIProcessor*> consumers;
64 double defaultValue;
65
66#ifdef WITH_SOPHYA
67 virtual Array doGetData(int iStart, int iEnd)=0;
68 virtual TArray<int_4> doGetFlag(int iStart, int iEnd)=0;
69#endif
70 virtual double doGetData(int i)=0;
71 virtual int_4 doGetFlag(int i)=0;
72 virtual void doPutData(int i, double value, int_4 flag=0)=0;
73 virtual void doWontNeedBefore(int i);
74
75 virtual DataStatus isDataAvailNL(int iStart, int iEnd)=0;
76 virtual DataStatus isDataAvailNL(int i);
77
78 virtual void setProducer(TOIProcessor* prod);
79 virtual void addConsumer(TOIProcessor* prod);
80 friend class TOIProcessor;
81
82 string name;
83
84 virtual int getMinSn();
85 virtual int getMaxSn();
86 void TOIInit();
87
88 void lock() {pthread_mutex_lock(&mutex);}
89 void unlock() {pthread_mutex_unlock(&mutex);}
90
91};
92
93class TOIRegular : public TOI {
94};
95
96// Classe de TOI avec une fenetre glissante, et echantillonnage regulier.
97// Pour le moment au moins,
98// il faut que les providers fassent arriver les donnees par samplenum croissant.
99class TOIRegularWindow : public TOIRegular {
100public:
101 TOIRegularWindow();
102 TOIRegularWindow(string nm);
103 ~TOIRegularWindow();
104
105 virtual DataStatus isDataAvailNL(int iStart, int iEnd);
106 virtual DataStatus isDataAvailNL(int i); // override required
107
108
109//protected:
110 vector<double> data;
111 vector<int_4> flags;
112 long i0;
113 double defaultValue;
114
115#ifdef WITH_SOPHYA
116 virtual Array doGetData(int iStart, int iEnd);
117 virtual TArray<int_4> doGetFlag(int iStart, int iEnd);
118#endif
119 virtual double doGetData(int i);
120 virtual int_4 doGetFlag(int i);
121
122 virtual void doPutData(int i, double value, int_4 flag=0);
123 virtual void doWontNeedBefore(int i);
124
125 virtual int nextDataAvail(int iAfter);
126 virtual bool hasSomeData();
127};
128
129#endif
Note: See TracBrowser for help on using the repository browser.