WvStreams
wvtypedencoder.h
00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
00004  *
00005  * An abstraction for encoders that manipulate typed buffers.
00006  */
00007 #ifndef __WVTYPEDENCODER_H
00008 #define __WVTYPEDENCODER_H
00009 
00010 #include "wvencoder.h"
00011 #include "wvbufbase.h"
00012 
00032 template<class IT, class OT, class S = WvEncoder>
00033 class WvTypedEncoder : public S
00034 {
00035 public:
00036     typedef IT IType;
00037     typedef OT OType;
00038     typedef WvBufBase<IType> IBuffer;
00039     typedef WvBufBase<OType> OBuffer;
00040     typedef WvBufViewBase<IType> IBufferView;
00041     typedef WvBufViewBase<OType> OBufferView;
00042 
00047     bool encode(IBuffer &inbuf, OBuffer &outbuf, bool flush = false,
00048         bool finish = false)
00049     {
00050         WvBufView inview(inbuf);
00051         WvBufView outview(outbuf);
00052         return S::encode(inview, outview, flush, finish);
00053     }
00054 
00059     bool flush(IBuffer &inbuf, OBuffer &outbuf, bool finish = false)
00060     {
00061         WvBufView inview(inbuf);
00062         WvBufView outview(outbuf);
00063         return S::flush(inview, outview, finish);
00064     }
00065 
00070     bool finish(OBuffer &outbuf)
00071     {
00072         WvBufView outview(outbuf);
00073         return S::finish(outview);
00074     }
00075     
00076     bool encode(WvBuf &inbuf, WvBuf &outbuf,
00077         bool flush = false, bool finish = false)
00078     {
00079         return S::encode(inbuf, outbuf, flush, finish);
00080     }
00081     bool flush(WvBuf &inbuf, WvBuf &outbuf,
00082         bool finish = false)
00083     {
00084         return S::flush(inbuf, outbuf, finish);
00085     }
00086     bool finish(WvBuf &outbuf)
00087     {
00088         return S::finish(outbuf);
00089     }
00090 
00091 protected:
00096     virtual bool _typedencode(IBuffer &inbuf, OBuffer &outbuf,
00097         bool flush) = 0;
00098     
00103     virtual bool _typedfinish(OBuffer &outbuf)
00104         { return true; }
00105 
00107     virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00108         bool flush)
00109     {
00110         IBufferView inview(inbuf);
00111         OBufferView outview(outbuf);
00112         return _typedencode(inview, outview, flush);
00113     }
00114     
00116     virtual bool _finish(WvBuf &outbuf)
00117     {
00118         OBufferView outview(outbuf);
00119         return _typedfinish(outview);
00120     }
00121 };
00122 
00129 template<class IT, class S>
00130 class WvTypedEncoder<IT, unsigned char, S> : public S
00131 {
00132 public:
00133     typedef IT IType;
00134     typedef unsigned char OType;
00135     typedef WvBufBase<IType> IBuffer;
00136     typedef WvBufBase<OType> OBuffer;
00137     typedef WvBufViewBase<IType> IBufferView;
00138     typedef WvBufViewBase<OType> OBufferView;
00139 
00144     bool encode(IBuffer &inbuf, OBuffer &outbuf, bool flush = false,
00145         bool finish = false)
00146     {
00147         WvBufView inview(inbuf);
00148         return S::encode(inview, outbuf, flush, finish);
00149     }
00150 
00155     bool flush(IBuffer &inbuf, OBuffer &outbuf, bool finish = false)
00156     {
00157         WvBufView inview(inbuf);
00158         return S::flush(inview, outbuf, finish);
00159     }
00160     
00161     bool encode(WvBuf &inbuf, WvBuf &outbuf,
00162         bool flush = false, bool finish = false)
00163     {
00164         return S::encode(inbuf, outbuf, flush, finish);
00165     }
00166     bool flush(WvBuf &inbuf, WvBuf &outbuf,
00167         bool finish = false)
00168     {
00169         return S::flush(inbuf, outbuf, finish);
00170     }
00171 
00172 protected:
00177     virtual bool _typedencode(IBuffer &inbuf, OBuffer &outbuf,
00178         bool flush) = 0;
00179     
00184     virtual bool _typedfinish(OBuffer &outbuf)
00185         { return true; }
00186     
00188     virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00189         bool flush)
00190     {
00191         IBufferView inview(inbuf);
00192         return _typedencode(inview, outbuf, flush);
00193     }
00194     
00196     virtual bool _finish(WvBuf &outbuf)
00197     {
00198         return _typedfinish(outbuf);
00199     }
00200 };
00201 
00202 
00207 template<class S>
00208 class WvTypedEncoder<unsigned char, unsigned char, S> : public S
00209 {
00210 public:
00211     typedef unsigned char IType;
00212     typedef unsigned char OType;
00213     typedef WvBufBase<IType> IBuffer;
00214     typedef WvBufBase<OType> OBuffer;
00215     typedef WvBufViewBase<IType> IBufferView;
00216     typedef WvBufViewBase<OType> OBufferView;
00217 
00218 protected:
00223     virtual bool _typedencode(IBuffer &inbuf, OBuffer &outbuf,
00224         bool flush) = 0;
00225     
00230     virtual bool _typedfinish(OBuffer &outbuf)
00231         { return true; }
00232 
00234     virtual bool _encode(WvBuf &inbuf, WvBuf &outbuf,
00235         bool flush)
00236     {
00237         return _typedencode(inbuf, outbuf, flush);
00238     }
00239     
00241     virtual bool _finish(WvBuf &outbuf)
00242     {
00243         return _typedfinish(outbuf);
00244     }
00245 };
00246 
00247 #endif // __WVTYPEDENCODER