// toiproducer.h // Eric Aubourg CEA/DAPNIA/SPP septembre 1999 #ifndef TOIPRODUCER_H #define TOIPRODUCER_H #include #include #include using namespace std; #include "toi.h" #include "ark.h" class TOIAbsorber; class RequestHandler; class TOIProducer { public: TOIProducer() {} virtual ~TOIProducer() {} virtual bool canProduce(TOI const&); virtual bool isProducing(TOI const&); virtual void addTOI(TOI &, TOIAbsorber* client); // exception si pas productible virtual bool canGetValue(long sampleNum, TOI const& toi); // for this samplenum virtual bool canGetPrevValue(long sampleNum, TOI const& toi); virtual bool canGetNextValue(long sampleNum, TOI const& toi); virtual bool canGetValueLater(long sampleNum, TOI const& toi); // Might, later but not now virtual double getPrevValue(long& sampleNum, TOI const& toi); virtual double getNextValue(long& sampleNum, TOI const& toi); virtual double getValue(long sampleNum, TOI const& toi); virtual long firstSampleNum(TOI const&); virtual long lastSampleNum(TOI const&); virtual long wontNeedEarlier(TOI const&, TOIAbsorber* client, long); virtual set getAvailOptions(TOI const&); virtual set getProperAvailOptions(TOI const&); virtual void outManifest(RequestHandler*); virtual void outVersion(RequestHandler*); virtual string getName(); set getPossibleTOIs() {return possibleTOIs;} protected: virtual void computedValue(TOI const& toi, long sampleNum, double value); set possibleTOIs; set producedTOIs; map > clients; //map > lastNeededSample; //map > > history; map > lastNeededSample; map > > history; deque >::const_iterator findHistL(TOI const& toi, long sampleNum); deque >::const_iterator findHistL(deque >& h, long sampleNum); deque >::const_iterator findHistH(TOI const& toi, long sampleNum); deque >::const_iterator findHistH(deque >& h, long sampleNum); }; class ArchFileSet; class TOILowLevProducer : public TOIProducer { public: virtual void handleBlock(ArchFileSet*)=0; // push ! virtual void addTOI(TOI &, TOIAbsorber* client); // exception si pas productible }; //#define CHKPROD if (!isProducing(toi)) throw ArchExc("Not producing " + toi.name); #define CHKPROD toi; #endif