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 __ZStrim_Tee__
00026 #define __ZStrim_Tee__ 1
00027 #include "zconfig.h"
00028 
00029 #include "ZStrim.h"
00030 #include "ZStrimmer.h"
00031 
00032 
00033 #pragma mark -
00034 #pragma mark * ZStrimR_Tee
00035 
00037 
00038 class ZStrimR_Tee : public ZStrimR
00039         {
00040 public:
00041         ZStrimR_Tee(const ZStrimR& iSource, const ZStrimW& iSink);
00042 
00043 
00044         virtual void Imp_ReadUTF32(UTF32* iDest, size_t iCount, size_t* oCount);
00045 
00046 private:
00047         const ZStrimR& fSource;
00048         const ZStrimW& fSink;
00049         };
00050 
00051 
00052 #pragma mark -
00053 #pragma mark * ZStrimmerR_Tee
00054 
00056 
00057 class ZStrimmerR_Tee : public ZStrimmerR
00058         {
00059 public:
00060         ZStrimmerR_Tee(ZRef<ZStrimmerR> iStrimmerSource, ZRef<ZStrimmerW> iStrimmerSink);
00061         virtual ~ZStrimmerR_Tee();
00062 
00063 
00064         virtual const ZStrimR& GetStrimR();
00065 
00066 protected:
00067         ZRef<ZStrimmerR> fStrimmerSource;
00068         ZRef<ZStrimmerW> fStrimmerSink;
00069         ZStrimR_Tee fStrim;
00070         };
00071 
00072 
00073 #pragma mark -
00074 #pragma mark * ZStrimW_Tee
00075 
00077 
00078 class ZStrimW_Tee : public ZStrimW_NativeUTF32
00079         {
00080 public:
00081         ZStrimW_Tee(const ZStrimW& iSink1, const ZStrimW& iSink2);
00082 
00083 
00084         virtual void Imp_WriteUTF32(const UTF32* iSource, size_t iCountCU, size_t* oCountCU);
00085         virtual void Imp_Flush();
00086 
00087 private:
00088         const ZStrimW& fSink1;
00089         const ZStrimW& fSink2;
00090         };
00091 
00092 
00093 #pragma mark -
00094 #pragma mark * ZStrimmerW_Tee
00095 
00097 
00098 class ZStrimmerW_Tee : public ZStrimmerW
00099         {
00100 public:
00101         ZStrimmerW_Tee(ZRef<ZStrimmerW> iStrimmerSink1, ZRef<ZStrimmerW> iStrimmerSink2);
00102         virtual ~ZStrimmerW_Tee();
00103 
00104 
00105         virtual const ZStrimW& GetStrimW();
00106 
00107 protected:
00108         ZRef<ZStrimmerW> fStrimmerSink1;
00109         ZRef<ZStrimmerW> fStrimmerSink2;
00110         ZStrimW_Tee fStrim;
00111         };
00112 
00113 #endif // __ZStrim_Tee__