home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-06-19 | 1.7 KB | 89 lines | [TEXT/CWIE] |
- // PipeInput.h
-
- #ifndef PipeInput_h
- #define PipeInput_h
-
- #ifndef BufferMaster_h
- #include "BufferMaster.h"
- #endif
- #ifndef Sleeper_h
- #include "Sleeper.h"
- #endif
- #ifndef PipePacket_h
- #include "PipePacket.h"
- #endif
- #ifndef TaskSequencer_h
- #include "TaskSequencer.h"
- #endif
-
- class TeeBase;
-
- class PipeInput
- {
- friend class PipeInputMaster;
-
- private:
- BufferMaster buffer;
- const Data ring;
- TeeBase& pipe;
-
- PipePacket entering;
- PipePacket exiting;
-
- Sleeper sleep;
- uint32 acceptLength;
-
- TaskSequencer<PipeInput> sequence;
- typedef TaskStep<PipeInput> Step;
-
- PipeInput( Data theRing, TeeBase& thePipe );
- void Reset();
- void PushIn( PipePacket );
- void PushOut();
- uint32 Audit() const;
- const uint8 *ExitingStart() const;
- const uint8 *EnteringEnd() const;
-
- void MoveBuffer();
-
- Step DoPass( bool dying, DeferredTaskTime );
-
- Step TryAccept( bool dying, DeferredTaskTime );
-
- Step StartFlush( bool dying, DeferredTaskTime );
- Step FinishFlush( bool dying, DeferredTaskTime );
-
- public:
- ::Buffer& Buffer() { return buffer; }
- const ::Buffer& Buffer() const { return buffer; }
-
- uint32 PotentialLength() const;
- uint32 RingLength() const { return ring.Length(); }
-
- uint32 LargestAcceptSize() const;
- uint32 ReasonableAcceptSize() const;
- uint32 ReasonablePassSize() const;
-
- Task *Pass();
- Task *Accept( uint32 requiredSize );
- Task *Flush();
- };
-
- class PipeInputMaster: public PipeInput
- {
- public:
- PipeInputMaster( Data theRing, TeeBase& thePipe )
- : PipeInput( theRing, thePipe )
- {}
-
- ~PipeInputMaster() {}
-
- PipeInput::Reset;
- PipeInput::PushIn;
- PipeInput::Audit;
- PipeInput::ExitingStart;
- PipeInput::EnteringEnd;
- };
-
- #endif
-