Stream.h

00001 /*
00002  * This source file is part of libRocket, the HTML/CSS Interface Middleware
00003  *
00004  * For the latest information, see http://www.librocket.com
00005  *
00006  * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd
00007  *
00008  * Permission is hereby granted, free of charge, to any person obtaining a copy
00009  * of this software and associated documentation files (the "Software"), to deal
00010  * in the Software without restriction, including without limitation the rights
00011  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00012  * copies of the Software, and to permit persons to whom the Software is
00013  * furnished to do so, subject to the following conditions:
00014  *
00015  * The above copyright notice and this permission notice shall be included in
00016  * all copies or substantial portions of the Software.
00017  * 
00018  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00019  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00020  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00021  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00022  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00023  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00024  * THE SOFTWARE.
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                 // Stream modes.
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