/* 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<CltXact> 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
syntax highlighted by Code2HTML, v. 0.9.1