| [534] | 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 |   
 | 
|---|
| [555] | 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);
 | 
|---|
| [534] | 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
 | 
|---|