Fennel: /home/pub/open/dev/fennel/common/ByteStream.h Source File (original) (raw)

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