001 | #ifndef BUFFER_H |
002 | #define BUFFER_H |
003 |
004 | namespace fw |
005 | { |
006 | class Buffer |
007 | { |
008 | public : |
009 | friend class GameResourcesManager; |
010 |
011 | enum Type |
012 | { |
013 | File, |
014 | GPU, |
015 | Network, |
016 | Zip |
017 | }; |
018 |
019 | Buffer(Type type) : |
020 | m_pBuffer(nullptr), |
021 | m_iSize(0), |
022 | m_sName(NONE), |
023 | m_bEmpty( true ), |
024 | m_type(type), |
025 | m_bDone( false ) |
026 | { |
027 | } |
028 |
029 | Buffer(Type type, char * pData) : |
030 | Buffer(type) |
031 | { |
032 | if (pData != nullptr) |
033 | { |
034 | m_pBuffer = pData; |
035 | } |
036 | } |
037 |
038 | virtual ~Buffer() |
039 | { |
040 | if (m_bDone) |
041 | { |
042 | SAFE_DELETE(m_pBuffer); |
043 | } |
044 | } |
045 |
046 | void Delete() |
047 | { |
048 | SAFE_DELETE(m_pBuffer); |
049 |
050 | SetEmpty( true ); |
051 | } |
052 |
053 | bool IsDeleted() |
054 | { |
055 | return m_pBuffer == nullptr; |
056 | } |
057 |
058 | void SetName( const std::string& sName) |
059 | { |
060 | m_sName = sName; |
061 | } |
062 |
063 | char * GetBuffer() |
064 | { |
065 | return m_pBuffer; |
066 | } |
067 |
068 | const char * GetBuffer() const |
069 | { |
070 | return m_pBuffer; |
071 | } |
072 |
073 | fw::size_t32 GetSize() |
074 | { |
075 | return m_iSize; |
076 | } |
077 |
078 | void SetSize(fw::size_t32 iSize) |
079 | { |
080 | m_iSize = iSize; |
081 | } |
082 |
083 | std::string GetName() const |
084 | { |
085 | return m_sName; |
086 | } |
087 |
088 | bool operator== ( const Buffer& f) const |
089 | { |
090 | bool resultat = (f.GetBuffer() == GetBuffer()) && (f.GetName() == GetName()); |
091 |
092 | return resultat; |
093 | } |
094 |
095 | bool IsEmpty() const |
096 | { |
097 | return m_bEmpty; |
098 | } |
099 |
100 | void Done() |
101 | { |
102 | m_bDone = true ; |
103 | } |
104 |
105 | protected : |
106 | char ** AccessBuffer() |
107 | { |
108 | SetEmpty( false ); |
109 |
110 | return &m_pBuffer; |
111 | } |
112 |
113 | void SetBuffer( char * pBuffer) |
114 | { |
115 | m_pBuffer = pBuffer; |
116 | |
117 | if (pBuffer != nullptr) |
118 | { |
119 | SetEmpty( false ); |
120 | } |
121 | } |
122 |
123 | Buffer& Get() |
124 | { |
125 | return * this ; |
126 | } |
127 |
128 | private : |
129 | void SetEmpty( bool bEmpty) |
130 | { |
131 | m_bEmpty = bEmpty; |
132 | } |
133 |
134 | private : |
135 | char * m_pBuffer; |
136 | fw::size_t32 m_iSize; |
137 | std::string m_sName; |
138 | bool m_bEmpty; |
139 | Type m_type; |
140 | bool m_bDone; |
141 | }; |
142 |
143 | class ChunkedBuffer : public Buffer |
144 | { |
145 | public : |
146 | ChunkedBuffer(Type type) : |
147 | Buffer(type) |
148 | { |
149 | } |
150 |
151 | ChunkedBuffer(Type type, char * pData) : |
152 | Buffer(type, pData) |
153 | { |
154 | } |
155 |
156 | size_t32 GetChunkSize() const |
157 | { |
158 | return m_iChunkSize; |
159 | } |
160 |
161 |
162 | size_t32 GetElementsCount() const |
163 | { |
164 | return m_iElementsCount; |
165 | } |
166 |
167 | protected : |
168 | void SetElementsCount(size_t32 iElementsCount) |
169 | { |
170 | m_iElementsCount = iElementsCount; |
171 | } |
172 |
173 | void SetChunkSize(size_t32 iChunkSize) |
174 | { |
175 | m_iChunkSize = iChunkSize; |
176 | } |
177 |
178 | private : |
179 | size_t32 m_iChunkSize = 0; |
180 | size_t32 m_iElementsCount = 0; |
181 | }; |
182 |
183 | class FileBuffer : public Buffer |
184 | { |
185 | public : |
186 | friend class FileSystemManager; |
187 |
188 | FileBuffer() : |
189 | Buffer(Buffer::Type::File) |
190 | { |
191 | } |
192 |
193 | FileBuffer& Get() |
194 | { |
195 | return * this ; |
196 | } |
197 | }; |
198 |
199 | class CursorFileBuffer : public FileBuffer |
200 | { |
201 | public : |
202 | friend class GameResourcesManager; |
203 |
204 | CursorFileBuffer() |
205 | { |
206 | m_iImageWidth = 0; |
207 | m_iImageHeight = 0; |
208 | } |
209 |
210 | virtual ~CursorFileBuffer() |
211 | { |
212 | } |
213 |
214 | size_t GetCursorWidth() |
215 | { |
216 | return m_iImageWidth; |
217 | } |
218 |
219 | size_t GetCursorHeight() |
220 | { |
221 | return m_iImageHeight; |
222 | } |
223 |
224 | CursorFileBuffer& Get() |
225 | { |
226 | return * this ; |
227 | } |
228 |
229 | private : |
230 | size_t32 m_iImageWidth; |
231 | size_t32 m_iImageHeight; |
232 | }; |
233 |
234 | class TextureFileBuffer : public FileBuffer |
235 | { |
236 | public : |
237 | friend class GameResourcesManager; |
238 |
239 | TextureFileBuffer() |
240 | { |
241 | } |
242 |
243 | TextureFileBuffer& Get() |
244 | { |
245 | return * this ; |
246 | } |
247 | |
248 | private : |
249 | size_t32 m_iImageWidth; |
250 | size_t32 m_iImageHeight; |
251 | }; |
252 |
253 | class ShaderFileBuffer : public FileBuffer |
254 | { |
255 | public : |
256 | friend class GameResourcesManager; |
257 | friend class D3DIncludeHandlerZIP; |
258 |
259 | ShaderFileBuffer() |
260 | { |
261 | } |
262 |
263 | ShaderFileBuffer& Get() |
264 | { |
265 | return * this ; |
266 | } |
267 | }; |
268 |
269 | class MeshFileBuffer : public FileBuffer |
270 | { |
271 | public : |
272 | friend class GameResourcesManager; |
273 |
274 | MeshFileBuffer() |
275 | { |
276 | } |
277 |
278 | MeshFileBuffer& Get() |
279 | { |
280 | return * this ; |
281 | } |
282 | }; |
283 | } |
284 |
285 | #endif |
286 | |