/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #ifndef POLYGRAPH__CLIENT_PIPELINEDCXM_H #define POLYGRAPH__CLIENT_PIPELINEDCXM_H #include "xstd/Queue.h" #include "client/CltXactMgr.h" class CltXact; class Connection; // a manager of a single CltXact that does not share the connection // with other client transactions class PipelinedCxm: public CltXactMgr { public: PipelinedCxm(); virtual void reset(); virtual bool idle() const; void assumeReadControl(CltXact *x, CltXactMgr *oldMgr); virtual void control(CltXact *x); virtual void rewind(CltXact *x); virtual void noteAbort(CltXact *x); virtual void noteDone(CltXact *x); virtual void noteLastXaction(CltXact *x); virtual void noteReadReady(int fd); virtual void noteWriteReady(int fd); virtual Connection *conn(); protected: typedef Queue Line; void prepReading(CltXact *x); void abortLines(CltXact *cause); void abortLine(Line &line, CltXact *cause); void kickNextRead(); protected: Line theFillers; Line theWriters; Line theReaders; Connection *theConn; // cached value }; #endif