Stream.h
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
00026
00027
00028 #ifndef ROCKETCORESTREAM_H
00029 #define ROCKETCORESTREAM_H
00030
00031 #include <Rocket/Core/Header.h>
00032 #include <Rocket/Core/ReferenceCountable.h>
00033 #include <Rocket/Core/Types.h>
00034 #include <Rocket/Core/URL.h>
00035 #include <list>
00036
00037 namespace Rocket {
00038 namespace Core {
00039
00040 class StreamListener;
00041
00047 class ROCKETCORE_API Stream : public ReferenceCountable
00048 {
00049 public:
00050
00051 enum StreamMode
00052 {
00053 MODE_WRITE = 1 << 0,
00054 MODE_APPEND = 1 << 1,
00055 MODE_READ = 1 << 2,
00056 MODE_ASYNC = 1 << 3,
00057
00058 MODE_MASK = MODE_WRITE | MODE_APPEND | MODE_READ
00059 };
00060
00061 Stream();
00062 virtual ~Stream();
00063
00065 virtual void Close();
00066
00068 int GetStreamMode() const;
00069
00071 const URL& GetSourceURL() const;
00072
00074 virtual bool IsEOS() const;
00075
00077 virtual size_t Length() const = 0;
00078
00080 virtual size_t Tell() const = 0;
00082 virtual bool Seek(long offset, int origin) const = 0;
00083
00085 virtual size_t Read(void* buffer, size_t bytes) const = 0;
00087 virtual size_t Read(Stream* stream, size_t bytes) const;
00089 virtual size_t Read(String& buffer, size_t bytes) const;
00091 virtual size_t Peek(void* buffer, size_t bytes) const;
00092
00094 virtual size_t Write(const void* buffer, size_t bytes) = 0;
00096 virtual size_t Write(const Stream* stream, size_t bytes);
00098 virtual size_t Write(const char* string);
00100 virtual size_t Write(const String& string);
00101
00103 virtual size_t Truncate(size_t bytes) = 0;
00104
00106 virtual size_t PushFront(const void* buffer, size_t bytes);
00108 virtual size_t PushBack(const void* buffer, size_t bytes);
00109
00111 virtual size_t PopFront(size_t bytes);
00113 virtual size_t PopBack(size_t bytes);
00114
00118 virtual bool IsReadReady() = 0;
00122 virtual bool IsWriteReady() = 0;
00123
00124 protected:
00125
00127 void SetStreamDetails(const URL& url, int stream_mode);
00128
00130 virtual void OnReferenceDeactivate();
00131
00132 private:
00133 URL url;
00134 int stream_mode;
00135 };
00136
00137 }
00138 }
00139
00140 #endif