00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZStream_Limited__
00026 #define __ZStream_Limited__ 1
00027
00028 #include "zconfig.h"
00029
00030 #include "ZStream.h"
00031 #include "ZStreamer.h"
00032
00033
00034 #pragma mark -
00035 #pragma mark * ZStreamR_Limited
00036
00038
00039 class ZStreamR_Limited : public ZStreamR
00040 {
00041 public:
00042 ZStreamR_Limited(uint64 iLimit, const ZStreamR& iStreamSource);
00043 ~ZStreamR_Limited();
00044
00045
00046 virtual void Imp_Read(void* iDest, size_t iCount, size_t* oCountRead);
00047 virtual size_t Imp_CountReadable();
00048
00049 virtual void Imp_CopyToDispatch(const ZStreamW& iStreamW, uint64 iCount,
00050 uint64* oCountRead, uint64* oCountWritten);
00051
00052 virtual void Imp_CopyTo(const ZStreamW& iStreamW, uint64 iCount,
00053 uint64* oCountRead, uint64* oCountWritten);
00054
00055 virtual void Imp_Skip(uint64 iCount, uint64* oCountSkipped);
00056
00057 protected:
00058 const ZStreamR& fStreamSource;
00059 uint64 fCountRemaining;
00060 };
00061
00062
00063
00064
00065 #pragma mark -
00066 #pragma mark * ZStreamW_Limited
00067
00069
00070 class ZStreamW_Limited : public ZStreamW
00071 {
00072 public:
00073 ZStreamW_Limited(uint64 iLimit, const ZStreamW& iStreamSink);
00074 ~ZStreamW_Limited();
00075
00076
00077 virtual void Imp_Write(const void* iSource, size_t iCount, size_t* oCountWritten);
00078 virtual void Imp_Flush();
00079
00080 protected:
00081 const ZStreamW& fStreamSink;
00082 uint64 fCountRemaining;
00083 };
00084
00085
00086
00087
00088 #pragma mark -
00089 #pragma mark * ZStreamRPos_Limited
00090
00094 class ZStreamRPos_Limited : public ZStreamRPos
00095 {
00096 public:
00097 ZStreamRPos_Limited(uint64 iOffset, uint64 iLimit, const ZStreamRPos& iStreamSource);
00098 ~ZStreamRPos_Limited();
00099
00100
00101 virtual void Imp_Read(void* iDest, size_t iCount, size_t* oCountRead);
00102
00103
00104 virtual uint64 Imp_GetPosition();
00105 virtual void Imp_SetPosition(uint64 iPosition);
00106
00107 virtual uint64 Imp_GetSize();
00108
00109 protected:
00110 const ZStreamRPos& fStreamSource;
00111 uint64 fOffset;
00112 uint64 fLimit;
00113 };
00114
00115
00116 #pragma mark -
00117 #pragma mark * ZStreamerRPos_Limited
00118
00120
00121 class ZStreamerRPos_Limited : public ZStreamerRPos
00122 {
00123 public:
00124 ZStreamerRPos_Limited(uint64 iOffset, uint64 iLimit, ZRef<ZStreamerRPos> iStreamer);
00125
00126 virtual ~ZStreamerRPos_Limited();
00127
00128
00129 virtual const ZStreamRPos& GetStreamRPos();
00130
00131 protected:
00132 ZRef<ZStreamerRPos> fStreamer;
00133 ZStreamRPos_Limited fStream;
00134 };
00135
00136
00137 #endif // __ZStream_Limited__