00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef Fennel_ByteStream_Included
00025 #define Fennel_ByteStream_Included
00026
00027 #include "fennel/common/ClosableObject.h"
00028
00029 FENNEL_BEGIN_NAMESPACE
00030
00034 class FENNEL_COMMON_EXPORT ByteStream
00035 : virtual public ClosableObject
00036 {
00037 protected:
00041 FileSize cbOffset;
00042
00043 explicit ByteStream();
00044 public:
00045
00049 FileSize getOffset() const;
00050 };
00051
00058 class FENNEL_COMMON_EXPORT ByteStreamMarker
00059 {
00060 friend class ByteStream;
00061
00065 ByteStream const &stream;
00066
00067 protected:
00068 explicit ByteStreamMarker(ByteStream const &stream);
00069 virtual ~ByteStreamMarker()
00070 {
00071 }
00072
00073 public:
00077 ByteStream const &getStream() const;
00078
00082 virtual FileSize getOffset() const = 0;
00083 };
00084
00089 class FENNEL_COMMON_EXPORT SequentialByteStreamMarker : public ByteStreamMarker
00090 {
00091 friend class ByteInputStream;
00092
00096 FileSize cbOffset;
00097
00098 public:
00099 virtual ~SequentialByteStreamMarker()
00100 {
00101 }
00102
00103 protected:
00104 explicit SequentialByteStreamMarker(ByteStream const &stream);
00105
00106
00107 virtual FileSize getOffset() const;
00108 };
00109
00110 inline FileSize ByteStream::getOffset() const
00111 {
00112 return cbOffset;
00113 }
00114
00115 FENNEL_END_NAMESPACE
00116
00117 #endif
00118
00119