StreamMemory.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 ROCKETCORESTREAMMEMORY_H
00029 #define ROCKETCORESTREAMMEMORY_H
00030
00031 #include <Rocket/Core/Header.h>
00032 #include <Rocket/Core/Stream.h>
00033
00034 namespace Rocket {
00035 namespace Core {
00036
00042 class ROCKETCORE_API StreamMemory : public Stream
00043 {
00044 public:
00046 StreamMemory();
00048 StreamMemory(size_t initial_size);
00050 StreamMemory(const byte* buffer, size_t buffer_size);
00052 StreamMemory(const StreamMemory& copy);
00053 virtual ~StreamMemory();
00054
00055 StreamMemory& operator=(const StreamMemory& copy);
00056
00058 virtual void Close();
00059
00061 virtual bool IsEOS() const;
00062
00064 virtual size_t Length() const;
00065
00067 size_t Tell() const;
00068
00070 bool Seek(long offset, int origin) const;
00071
00073 using Stream::Read;
00074 virtual size_t Read(void* buffer, size_t bytes) const;
00075
00077 virtual size_t Peek(void *buffer, size_t bytes);
00078
00080 using Stream::Write;
00081 virtual size_t Write(const void* buffer, size_t bytes);
00082
00084 virtual size_t Truncate(size_t bytes);
00085
00087 virtual size_t PushFront(const void* buffer, size_t bytes);
00088
00090 virtual size_t PopFront(size_t bytes);
00091
00093 const byte* RawStream() const;
00094
00096 void Erase(size_t offset, size_t bytes);
00097
00099 virtual bool IsReadReady();
00100
00102 virtual bool IsWriteReady();
00103
00106 void SetSourceURL(const URL& url);
00107
00108 private:
00109
00110 byte* buffer;
00111 mutable byte* buffer_ptr;
00112 size_t buffer_size;
00113 size_t buffer_used;
00114 bool owns_buffer;
00115
00116 bool Reallocate(size_t size);
00117 };
00118
00119 }
00120 }
00121
00122 #endif