| 1 | // toiproducer.h
 | 
|---|
| 2 | // Eric Aubourg         CEA/DAPNIA/SPP   septembre 1999
 | 
|---|
| 3 | 
 | 
|---|
| 4 | #ifndef TOIPRODUCER_H
 | 
|---|
| 5 | #define TOIPRODUCER_H
 | 
|---|
| 6 | 
 | 
|---|
| 7 | #include <set>
 | 
|---|
| 8 | #include <map>
 | 
|---|
| 9 | #include <deque>
 | 
|---|
| 10 | 
 | 
|---|
| 11 | using namespace std;
 | 
|---|
| 12 | 
 | 
|---|
| 13 | #include "toi.h"
 | 
|---|
| 14 | #include "ark.h"
 | 
|---|
| 15 | 
 | 
|---|
| 16 | class TOIAbsorber;
 | 
|---|
| 17 | class RequestHandler;
 | 
|---|
| 18 | 
 | 
|---|
| 19 | class TOIProducer {
 | 
|---|
| 20 | public:
 | 
|---|
| 21 |   TOIProducer() {}
 | 
|---|
| 22 |   virtual ~TOIProducer() {}
 | 
|---|
| 23 |   
 | 
|---|
| 24 |   virtual bool   canProduce(TOI const&);
 | 
|---|
| 25 |   virtual bool   isProducing(TOI const&);
 | 
|---|
| 26 |   virtual void   addTOI(TOI &, TOIAbsorber* client);     // exception si pas productible
 | 
|---|
| 27 |   virtual bool   canGetValue(long sampleNum, TOI const& toi); // for this samplenum
 | 
|---|
| 28 |   virtual bool   canGetPrevValue(long sampleNum, TOI const& toi); 
 | 
|---|
| 29 |   virtual bool   canGetNextValue(long sampleNum, TOI const& toi); 
 | 
|---|
| 30 |   virtual bool   canGetValueLater(long sampleNum, TOI const& toi);  // Might, later but not now
 | 
|---|
| 31 |   
 | 
|---|
| 32 |   virtual double getPrevValue(long& sampleNum, TOI const& toi);
 | 
|---|
| 33 |   virtual double getNextValue(long& sampleNum, TOI const& toi);
 | 
|---|
| 34 |   virtual double getValue(long sampleNum, TOI const& toi);
 | 
|---|
| 35 |   
 | 
|---|
| 36 |   virtual long   firstSampleNum(TOI const&);
 | 
|---|
| 37 |   virtual long   lastSampleNum(TOI const&);
 | 
|---|
| 38 |   
 | 
|---|
| 39 |   virtual long   wontNeedEarlier(TOI const&, TOIAbsorber* client, long);
 | 
|---|
| 40 |   
 | 
|---|
| 41 |   virtual set<string> getAvailOptions(TOI const&);
 | 
|---|
| 42 |   virtual set<string> getProperAvailOptions(TOI const&);
 | 
|---|
| 43 |   
 | 
|---|
| 44 |   virtual void outManifest(RequestHandler*);
 | 
|---|
| 45 |   virtual void outVersion(RequestHandler*);
 | 
|---|
| 46 |   virtual string getName();
 | 
|---|
| 47 |   
 | 
|---|
| 48 |   set<TOI> getPossibleTOIs() {return possibleTOIs;}
 | 
|---|
| 49 |   
 | 
|---|
| 50 |   
 | 
|---|
| 51 | protected:
 | 
|---|
| 52 |   virtual void   computedValue(TOI const& toi, long sampleNum, double value);
 | 
|---|
| 53 | 
 | 
|---|
| 54 |   set<TOI>                               possibleTOIs;
 | 
|---|
| 55 |   set<TOI>                               producedTOIs;
 | 
|---|
| 56 |   map<TOIAbsorber*, set<TOI> >           clients;
 | 
|---|
| 57 |   //map<TOI, map<TOIAbsorber*, long> >     lastNeededSample; 
 | 
|---|
| 58 |   //map<TOI, deque<pair<long, double> > >  history;
 | 
|---|
| 59 |   map<int, map<TOIAbsorber*, long> >     lastNeededSample; 
 | 
|---|
| 60 |   map<int, deque<pair<long, double> > >  history;
 | 
|---|
| 61 |   
 | 
|---|
| 62 |   deque<pair<long, double> >::const_iterator findHistL(TOI const& toi, long sampleNum);
 | 
|---|
| 63 |   deque<pair<long, double> >::const_iterator findHistL(deque<pair<long, double> >& h, long sampleNum);
 | 
|---|
| 64 |   deque<pair<long, double> >::const_iterator findHistH(TOI const& toi, long sampleNum);
 | 
|---|
| 65 |   deque<pair<long, double> >::const_iterator findHistH(deque<pair<long, double> >& h, long sampleNum);
 | 
|---|
| 66 | };
 | 
|---|
| 67 | 
 | 
|---|
| 68 | class ArchFileSet;
 | 
|---|
| 69 | class TOILowLevProducer : public TOIProducer {
 | 
|---|
| 70 | public:
 | 
|---|
| 71 |   virtual void handleBlock(ArchFileSet*)=0; // push !
 | 
|---|
| 72 |   virtual void   addTOI(TOI &, TOIAbsorber* client);     // exception si pas productible
 | 
|---|
| 73 | };
 | 
|---|
| 74 | 
 | 
|---|
| 75 | //#define CHKPROD if (!isProducing(toi)) throw ArchExc("Not producing " + toi.name);
 | 
|---|
| 76 | #define CHKPROD toi;
 | 
|---|
| 77 | 
 | 
|---|
| 78 | 
 | 
|---|
| 79 | #endif
 | 
|---|