PacketizedDataIO.h

00001 /* This file is Copyright 2000-2008 Meyer Sound Laboratories Inc.  See the included LICENSE.txt file for details. */
00002 
00003 #ifndef MusclePacketizedDataIO_h
00004 #define MusclePacketizedDataIO_h
00005 
00006 #include "dataio/DataIO.h"
00007 #include "util/ByteBuffer.h"
00008 
00009 BEGIN_NAMESPACE(muscle);
00010 
00024 class PacketizedDataIO : public DataIO
00025 {
00026 public:
00034    PacketizedDataIO(const DataIORef & slaveIO, uint32 maxTransferUnit = MUSCLE_NO_LIMIT);
00035 
00037    const DataIORef & GetSlaveIO() const {return _slaveIO;}
00038 
00040    void SetSlaveIO(const DataIORef & sio) {_slaveIO = sio;}
00041 
00043    uint32 GetMaxTransferUnit() const {return _maxTransferUnit;}
00044 
00045    virtual int32 Read(void * buffer, uint32 size);
00046    virtual int32 Write(const void * buffer, uint32 size);
00047    virtual status_t Seek(int64 offset, int whence) {return _slaveIO() ? _slaveIO()->Seek(offset, whence) : B_ERROR;}
00048    virtual int64 GetPosition() const {return _slaveIO() ? _slaveIO()->GetPosition() : -1;}
00049    virtual uint64 GetOutputStallLimit() const {return _slaveIO() ? _slaveIO()->GetOutputStallLimit() : MUSCLE_TIME_NEVER;}
00050    virtual void FlushOutput() {if (_slaveIO()) _slaveIO()->FlushOutput();}
00051    virtual void Shutdown() {if (_slaveIO()) _slaveIO()->Shutdown(); _slaveIO.Reset(); _outputBuffer.Clear(true); _inputBuffer.Clear(true); _inputBufferSizeBytesRead = 0;}
00052    virtual const SocketRef & GetSelectSocket() const {return _slaveIO() ? _slaveIO()->GetSelectSocket() : GetNullSocket();}
00053    virtual int64 GetLength() {return _slaveIO() ? _slaveIO()->GetLength() : -1;}
00054 
00055    virtual bool HasBufferedOutput() const {return (_outputBufferBytesSent < _outputBuffer.GetNumBytes());}
00056    virtual void WriteBufferedOutput() {(void) WriteBufferedOutputAux();}
00057 
00058 private:
00059    int32 SlaveRead(void * buffer, uint32 size)        {return _slaveIO() ? _slaveIO()->Read(buffer, size)  : -1;}
00060    int32 SlaveWrite(const void * buffer, uint32 size) {return _slaveIO() ? _slaveIO()->Write(buffer, size) : -1;}
00061    status_t WriteBufferedOutputAux();
00062 
00063    DataIORef _slaveIO;
00064    uint32 _maxTransferUnit;
00065 
00066    ByteBuffer _inputBuffer;
00067    uint32 _inputBufferSize;
00068    uint32 _inputBufferSizeBytesRead;
00069    uint32 _inputBufferBytesRead;
00070   
00071    ByteBuffer _outputBuffer;
00072    uint32 _outputBufferBytesSent;
00073 };
00074 
00075 END_NAMESPACE(muscle);
00076 
00077 #endif

Generated on Thu Jun 5 17:47:53 2008 for MUSCLE by  doxygen 1.5.1