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 __ZStreamR_Boundary__
00026 #define __ZStreamR_Boundary__ 1
00027 #include "zconfig.h"
00028
00029 #include "ZStreamer.h"
00030
00031 #include <string>
00032
00033
00034 #pragma mark -
00035 #pragma mark * ZStreamR_Boundary
00036
00038
00039 class ZStreamR_Boundary : public ZStreamR
00040 {
00041 public:
00042 ZStreamR_Boundary(const std::string& iBoundary, const ZStreamR& iStreamSource);
00043 ZStreamR_Boundary(const void* iBoundary, size_t iBoundarySize, const ZStreamR& iStreamSource);
00044 ~ZStreamR_Boundary();
00045
00046
00047 virtual void Imp_Read(void* iDest, size_t iCount, size_t* oCountRead);
00048 virtual size_t Imp_CountReadable();
00049
00050
00051 bool HitBoundary() const;
00052 void Reset();
00053
00054 protected:
00055 void Internal_Init();
00056
00057 const ZStreamR& fStreamSource;
00058 std::string fBoundary;
00059 size_t fDistance[256];
00060 uint8* fBuffer;
00061 size_t fDataStart;
00062 size_t fDataEnd;
00063 bool fHitBoundary;
00064 };
00065
00066
00067 #pragma mark -
00068 #pragma mark * ZStreamerR_Boundary
00069
00071
00072 class ZStreamerR_Boundary : public ZStreamerR
00073 {
00074 public:
00075 ZStreamerR_Boundary(const std::string& iBoundary, ZRef<ZStreamerR> iStreamerSource);
00076
00077 ZStreamerR_Boundary(const void* iBoundary, size_t iBoundarySize,
00078 ZRef<ZStreamerR> iStreamerSource);
00079
00080 virtual ~ZStreamerR_Boundary();
00081
00082
00083 virtual const ZStreamR& GetStreamR();
00084
00085 protected:
00086 ZRef<ZStreamerR> fStreamerSource;
00087 ZStreamR_Boundary fStream;
00088 };
00089
00090
00091
00092
00093
00094
00095 #endif // __ZStreamR_Boundary__