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_Tee__
00026 #define __ZStream_Tee__ 1
00027
00028 #include "zconfig.h"
00029
00030 #include "ZStreamer.h"
00031
00032
00033 #pragma mark -
00034 #pragma mark * ZStreamR_Tee
00035
00037
00038 class ZStreamR_Tee : public ZStreamR
00039 {
00040 public:
00041 ZStreamR_Tee(const ZStreamR& iStreamR, const ZStreamW& iStreamW);
00042 ~ZStreamR_Tee();
00043
00044 virtual void Imp_Read(void* iDest, size_t iCount, size_t* oCountRead);
00045 virtual size_t Imp_CountReadable();
00046
00047 protected:
00048 const ZStreamR& fStreamR;
00049 const ZStreamW& fStreamW;
00050 };
00051
00052
00053 #pragma mark -
00054 #pragma mark * ZStreamerR_Tee
00055
00057
00058 class ZStreamerR_Tee : public ZStreamerR
00059 {
00060 public:
00061 ZStreamerR_Tee(ZRef<ZStreamerR> iStreamerR, ZRef<ZStreamerW> iStreamerW);
00062 virtual ~ZStreamerR_Tee();
00063
00064
00065 virtual const ZStreamR& GetStreamR();
00066
00067 protected:
00068 ZRef<ZStreamerR> fStreamerR;
00069 ZRef<ZStreamerW> fStreamerW;
00070 ZStreamR_Tee fStream;
00071 };
00072
00073
00074 #pragma mark -
00075 #pragma mark * ZStreamW_Tee
00076
00078
00079 class ZStreamW_Tee : public ZStreamW
00080 {
00081 public:
00082 ZStreamW_Tee(const ZStreamW& iStreamSink1, const ZStreamW& iStreamSink2);
00083 ~ZStreamW_Tee();
00084
00085
00086 virtual void Imp_Write(const void* iSource, size_t iCount, size_t* oCountWritten);
00087 virtual void Imp_Flush();
00088
00089 protected:
00090 const ZStreamW& fStreamSink1;
00091 const ZStreamW& fStreamSink2;
00092 };
00093
00094
00095 #pragma mark -
00096 #pragma mark * ZStreamerW_Tee
00097
00099
00100 class ZStreamerW_Tee : public ZStreamerW
00101 {
00102 public:
00103 ZStreamerW_Tee(ZRef<ZStreamerW> iStreamerSink1, ZRef<ZStreamerW> iStreamerSink2);
00104 virtual ~ZStreamerW_Tee();
00105
00106
00107 virtual const ZStreamW& GetStreamW();
00108
00109 protected:
00110 ZRef<ZStreamerW> fStreamerSink1;
00111 ZRef<ZStreamerW> fStreamerSink2;
00112 ZStreamW_Tee fStream;
00113 };
00114
00115 #endif // __ZStream_Tee__