OROCHI
 
Loading...
Searching...
No Matches
GxStream.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15class GxStreamReader;
16//===========================================================================
18//===========================================================================
19class GxStream : public GxClassBase
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
26 // RTTI宣言
27 GX_RTTI_CLASS(GxStream, GxClassBase)
28 // GxClassBase継承クラス用禁止宣言
30 // new, delete指定
31 GX_OPERATOR_NEW_DELETE(GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY)
32
33
35 {
36 ATTRIBUTE_SEEKABLE = (1 << 0),
37 ATTRIBUTE_CANCELED = (1 << 1)
38 };
39
41 static constexpr u32 COPY_TEMPORARY_BUFFER_SIZE = GxMath::VALUE_32K;
42
44 //-----------------------------------------------------------
46 //-----------------------------------------------------------
48protected:
50 GxStream(void) : _attribute(0){}
52 ~GxStream(void) override { close(); }
53
55 //-----------------------------------------------------------
57 //-----------------------------------------------------------
59public:
61 virtual void close(void){}
63 virtual u32 read(void* /*pDst*/, u32 /*size*/){ return 0; }
65 virtual u32 write(const void* /*pSrc*/, u32 /*size*/){ return 0; }
67 virtual void flush(void){}
69 virtual u32 seek(s32 /*offset*/, GxFile::SEEK_TYPE /*seekType*/ = GxFile::SEEK_TYPE::BEGIN) { return 0; }
70
72 u32 copy(GxStream& dst, u32 size);
73
75 //-----------------------------------------------------------
77 //-----------------------------------------------------------
79public:
81 virtual u32 getPosition(void) const { return 0; }
83 virtual void setSize(u32 /*length*/) {}
85 virtual u32 getSize(void) const { return 0; }
87 virtual b32 isReadable(void) const { return true; }
89 virtual b32 isWritable(void) const { return true; }
91 virtual b32 isEnd(void) const { return (getSize() == getPosition()); }
92
94 GX_FORCE_INLINE s32 getRemainSize(void) const { return static_cast<s32>(getSize() - getPosition()); }
96 GX_FORCE_INLINE b32 isCanceled(void) const { return getAttribute(ATTRIBUTE_CANCELED); }
97
100 constexpr void setAttribute(ATTRIBUTE attribute) { _attribute |= attribute; }
103 constexpr void clearAttribute(ATTRIBUTE attribute) { _attribute &= ~attribute; }
107 GX_FORCE_INLINE b32 getAttribute(ATTRIBUTE attribute) const { return ((_attribute & attribute) != 0); }
108
110 //-----------------------------------------------------------
112 //-----------------------------------------------------------
114private:
115 u32 _attribute;
116
118};
119
120//===========================================================================
122//===========================================================================
123class GxFileStream : public GxStream
124{
125 //-----------------------------------------------------------
127 //-----------------------------------------------------------
129public:
130 // RTTI宣言
131 GX_RTTI_CLASS(GxFileStream, GxStream)
132 // GxClassBase継承クラス用禁止宣言
134
135
136 static constexpr u32 CACHE_BUFFER_SIZE = GxMath::VALUE_64K;
137
142
144 //-----------------------------------------------------------
146 //-----------------------------------------------------------
148public:
150 GxFileStream(void);
152 GxFileStream(GxFile* pFile, u32 offset = 0, u32 size = 0);
154 ~GxFileStream(void) override;
155
157 void initialize(GxFile* pFile, u32 offset = 0, u32 size = 0);
159 void terminate(void);
160
162 //-----------------------------------------------------------
164 //-----------------------------------------------------------
166public:
168 void close(void) override;
170 u32 read(void* pDst, u32 size) override;
172 u32 write(const void* pSrc, u32 size) override;
174 void flush(void) override;
176 u32 seek(s32 offset, GxFile::SEEK_TYPE seekType = GxFile::SEEK_TYPE::BEGIN) override;
177
178private:
180 b32 isHitCache(void) const;
182 b32 readToCache(void);
184 u32 readFromCache(void* pDst, u32 size);
185
187 b32 isFlushCache(void) const;
189 u32 writeToCache(const void* pSrc, u32 size);
191 b32 flushCache(void);
192
194 //-----------------------------------------------------------
196 //-----------------------------------------------------------
198public:
200 u32 getPosition(void) const override;
202 u32 getSize(void) const override;
204 b32 isReadable(void) const override;
206 b32 isWritable(void) const override;
207
209 GX_CSTR getFileName(void) const;
211 u32 getFilePosition(void) const;
213 u32 getFileOffset(void) const;
214
218 GX_FORCE_INLINE static void setConfig(u32 readBufferSize, u32 writeBufferSize)
219 {
222 }
223
225 //-----------------------------------------------------------
227 //-----------------------------------------------------------
229private:
230 GxFile* _pFile;
231 u32 _position;
232 u32 _offset;
233 u32 _size;
234 void* _pReadCacheBuffer;
235 u32 _readCachePosition;
236 u32 _readCacheSize;
237 void* _pWriteCacheBuffer;
238 u32 _writeCachePosition;
239 u32 _writeCacheSize;
240
242};
243
244//===========================================================================
246//===========================================================================
248{
249 //-----------------------------------------------------------
251 //-----------------------------------------------------------
253public:
254 // RTTI宣言
255 GX_RTTI_CLASS(GxMemoryStream, GxStream)
256 // GxClassBase継承クラス用禁止宣言
258
259
260 //-----------------------------------------------------------
262 //-----------------------------------------------------------
264public:
268 GxMemoryStream(GxAllocator* pAllocator);
270 ~GxMemoryStream(void) override;
271
275 b32 initialize(void* pBuffer, u32 size);
277 b32 initialize(GxStream* pStream, u32 size = 0);
279 void terminate(void);
280
282 //-----------------------------------------------------------
284 //-----------------------------------------------------------
286public:
288 u32 read(void* pDst, u32 size) override;
290 u32 write(const void* pSrc, u32 size) override;
292 u32 seek(s32 offset, GxFile::SEEK_TYPE seekType = GxFile::SEEK_TYPE::BEGIN) override;
293
295 void* reserve(u32 size);
298
300 //-----------------------------------------------------------
302 //-----------------------------------------------------------
304public:
306 GX_FORCE_INLINE u32 getPosition(void) const override { return _position; }
308 GX_FORCE_INLINE u32 getSize(void) const override { return _size; }
309
311 GX_FORCE_INLINE b32 isReadable(void) const override { return (_pBuffer != nullptr); }
313 GX_FORCE_INLINE b32 isWritable(void) const override { return (_pBuffer != nullptr); }
314
316 constexpr void* getBuffer(void) const { return _pBuffer; }
318 GX_FORCE_INLINE void* getCurrent(void) const { return reinterpret_cast<u8*>(_pBuffer) + _position; }
319
321 //-----------------------------------------------------------
323 //-----------------------------------------------------------
325private:
326 GxAllocator* _pAllocator;
327 void* _pBuffer;
328 u32 _size;
329 u32 _position;
330 b32 _isAllocateMemory;
331
333};
334
335//===========================================================================
337//===========================================================================
338class GxRingStream : public GxStream
339{
340 //-----------------------------------------------------------
342 //-----------------------------------------------------------
344public:
345 // RTTI宣言
346 GX_RTTI_CLASS(GxRingStream, GxStream)
347 // GxClassBase継承クラス用禁止宣言
349
350
351 //-----------------------------------------------------------
353 //-----------------------------------------------------------
355public:
357 GxRingStream(void);
359 ~GxRingStream(void) override;
360
362 b32 initialize(u32 size, GxAllocator* pAllocator = nullptr, GxMemory::ALIGNMENT alignment = GxMemory::ALIGNMENT::_16);
364 b32 initialize(void* pBuffer, u32 size);
366 void terminate(void);
367
369 //-----------------------------------------------------------
371 //-----------------------------------------------------------
373public:
375 u32 read(void* pDst, u32 size) override;
377 u32 write(const void* pSrc, u32 size) override;
378
380 //-----------------------------------------------------------
382 //-----------------------------------------------------------
384public:
386 GX_FORCE_INLINE u32 getSize(void) const override { return _size; }
387
389 constexpr u32 getFreeSize(void) const { return _size - _usedSize; }
391 constexpr u32 getUsedSize(void) const { return _usedSize; }
392
394 //-----------------------------------------------------------
396 //-----------------------------------------------------------
398private:
399 GxAllocator* _pAllocator;
400 void* _pBuffer;
401 u32 _size;
402 u32 _readPosition;
403 u32 _writePosition;
404 u32 _usedSize;
405
407};
408
409//===========================================================================
411//===========================================================================
413{
414 //-----------------------------------------------------------
416 //-----------------------------------------------------------
418public:
419 // RTTI
420 GX_RTTI_CLASS(GxZlibReadStream, GxStream)
421 // GxClassBase継承クラス用禁止宣言
423
424
425 //-----------------------------------------------------------
427 //-----------------------------------------------------------
429public:
431 GxZlibReadStream(void);
433 ~GxZlibReadStream(void) override;
434
436 b32 initialize(GxStreamReader* pStreamReader, u32 chunkSizeByte);
437
439 //-----------------------------------------------------------
441 //-----------------------------------------------------------
443public:
445 u32 read(void* pDst, u32 size) override;
447 u32 seek(s32 offset, GxFile::SEEK_TYPE seekType = GxFile::SEEK_TYPE::BEGIN) override;
448
450 GX_FORCE_INLINE void* reserve(u32 /*size*/) { GX_ASSERT(false, "reserve is not impl."); return nullptr; }
453
455 //-----------------------------------------------------------
457 //-----------------------------------------------------------
459public:
461 GX_FORCE_INLINE u32 getPosition(void) const override { return _position; }
463 GX_FORCE_INLINE u32 getSize(void) const override { return _size; }
464
466 GX_FORCE_INLINE b32 isReadable(void) const override { return (_pBuffer != nullptr); }
468 GX_FORCE_INLINE b32 isWritable(void) const override { return false; }
469
471 //-----------------------------------------------------------
473 //-----------------------------------------------------------
475private:
476 GxStreamReader* _pStreamReader;
477 void* _pBuffer;
478 void* _pDecoderHandle;
479 u32 _size;
480 u32 _position;
481 u32 _encodeLevel;
482 u32 _encodeSize;
483 u32 _blockSize;
484 u32 _bufferPosition;
485 b32 _isFirstBlock;
486
488};
489
490GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
メモリアロケータ基底クラス
Definition GxAllocator.h:82
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
オブジェクト基底クラス
Definition GxBase.h:88
ファイル管理クラス
Definition GxFile.h:157
SEEK_TYPE
シークタイプ
Definition GxFile.h:201
@ BEGIN
先頭基準
ファイルストリームクラス
Definition GxStream.h:124
void close(void) override
クローズ
Definition GxStream.cpp:193
void flush(void) override
フラッシュ
Definition GxStream.cpp:255
u32 write(const void *pSrc, u32 size) override
書き込み
Definition GxStream.cpp:231
static u32 _readCacheBufferSize
読み込みキャッシュバッファサイズ
Definition GxStream.h:139
static u32 _writeCacheBufferSize
書き込みキャッシュバッファサイズ
Definition GxStream.h:141
u32 read(void *pDst, u32 size) override
読み込み
Definition GxStream.cpp:204
u32 getFileOffset(void) const
ファイルオフセット取得
Definition GxStream.cpp:353
static constexpr u32 CACHE_BUFFER_SIZE
デフォルトキャッシュサイズ (byte)
Definition GxStream.h:136
u32 getPosition(void) const override
ストリーム位置を取得
Definition GxStream.cpp:296
b32 isReadable(void) const override
読み込み可能判定
Definition GxStream.cpp:314
void terminate(void)
終了
Definition GxStream.cpp:181
b32 isWritable(void) const override
書き込み可能判定
Definition GxStream.cpp:324
u32 getFilePosition(void) const
ファイル位置取得
Definition GxStream.cpp:344
static GX_FORCE_INLINE void setConfig(u32 readBufferSize, u32 writeBufferSize)
Definition GxStream.h:218
u32 seek(s32 offset, GxFile::SEEK_TYPE seekType=GxFile::SEEK_TYPE::BEGIN) override
シーク
Definition GxStream.cpp:269
void initialize(GxFile *pFile, u32 offset=0, u32 size=0)
初期化
Definition GxStream.cpp:143
u32 getSize(void) const override
ストリームサイズ取得
Definition GxStream.cpp:305
GX_CSTR getFileName(void) const
ファイル名取得
Definition GxStream.cpp:334
算術演算クラス
Definition GxMath.h:84
static constexpr u32 VALUE_32K
32K
Definition GxMath.h:134
static GX_FORCE_INLINE T getMax(const T value0, const T value1)
大きいほうを取得
Definition GxMath.h:174
ALIGNMENT
メモリアライメント定義
Definition GxMemory.h:51
@ _16
16byteアライメント
Definition GxMemory.h:54
メモリストリームクラス
Definition GxStream.h:248
b32 initialize(u32 size, GxMemory::ALIGNMENT alignment=GxMemory::ALIGNMENT::_16)
初期化 (新規メモリ確保)
Definition GxStream.cpp:616
GxMemoryStream(GxAllocatorList::ALLOCATOR_TYPE allocatorType=GxAllocatorList::ALLOCATOR_TYPE::TEMPORARY)
コンストラクタ
Definition GxStream.cpp:580
GX_FORCE_INLINE void * getCurrent(void) const
カレントアドレス取得
Definition GxStream.h:318
GX_FORCE_INLINE u32 getPosition(void) const override
ストリーム位置を取得
Definition GxStream.h:306
constexpr void * getBuffer(void) const
先頭アドレス取得
Definition GxStream.h:316
u32 read(void *pDst, u32 size) override
読み込み
Definition GxStream.cpp:720
GX_FORCE_INLINE u32 getSize(void) const override
ストリームサイズ取得
Definition GxStream.h:308
void alignment(GxMemory::ALIGNMENT alignment)
メモリアライメント調整
Definition GxStream.cpp:820
u32 write(const void *pSrc, u32 size) override
書き込み
Definition GxStream.cpp:742
~GxMemoryStream(void) override
デストラクタ
Definition GxStream.cpp:605
GX_FORCE_INLINE b32 isWritable(void) const override
書き込み可能判定
Definition GxStream.h:313
void terminate(void)
終了
Definition GxStream.cpp:700
u32 seek(s32 offset, GxFile::SEEK_TYPE seekType=GxFile::SEEK_TYPE::BEGIN) override
シーク
Definition GxStream.cpp:764
GX_FORCE_INLINE b32 isReadable(void) const override
読み込み可能判定
Definition GxStream.h:311
void * reserve(u32 size)
メモリ領域の確保
Definition GxStream.cpp:798
リングストリームクラス
Definition GxStream.h:339
void terminate(void)
終了
Definition GxStream.cpp:913
b32 initialize(u32 size, GxAllocator *pAllocator=nullptr, GxMemory::ALIGNMENT alignment=GxMemory::ALIGNMENT::_16)
初期化 (新規メモリ確保)
Definition GxStream.cpp:862
u32 read(void *pDst, u32 size) override
読み込み
Definition GxStream.cpp:929
constexpr u32 getFreeSize(void) const
空き領域サイズ取得
Definition GxStream.h:389
constexpr u32 getUsedSize(void) const
使用領域サイズ取得
Definition GxStream.h:391
GxRingStream(void)
コンストラクタ
Definition GxStream.cpp:837
u32 write(const void *pSrc, u32 size) override
書き込み
Definition GxStream.cpp:975
~GxRingStream(void) override
デストラクタ
Definition GxStream.cpp:850
GX_FORCE_INLINE u32 getSize(void) const override
ストリームサイズ取得
Definition GxStream.h:386
ストリーム基礎クラス
Definition GxStream.h:20
virtual u32 write(const void *, u32)
書き込み
Definition GxStream.h:65
virtual void flush(void)
フラッシュ
Definition GxStream.h:67
constexpr void setAttribute(ATTRIBUTE attribute)
Definition GxStream.h:100
constexpr void clearAttribute(ATTRIBUTE attribute)
Definition GxStream.h:103
virtual u32 seek(s32, GxFile::SEEK_TYPE=GxFile::SEEK_TYPE::BEGIN)
シーク
Definition GxStream.h:69
GX_FORCE_INLINE b32 getAttribute(ATTRIBUTE attribute) const
Definition GxStream.h:107
ATTRIBUTE
属性
Definition GxStream.h:35
virtual b32 isEnd(void) const
ファイル終端判定
Definition GxStream.h:91
virtual b32 isWritable(void) const
書き込み可能判定
Definition GxStream.h:89
virtual u32 getSize(void) const
ストリームサイズ取得
Definition GxStream.h:85
virtual b32 isReadable(void) const
読み込み可能判定
Definition GxStream.h:87
GX_FORCE_INLINE b32 isCanceled(void) const
キャンセルされた判定
Definition GxStream.h:96
~GxStream(void) override
デストラクタ
Definition GxStream.h:52
virtual u32 getPosition(void) const
ストリーム位置を取得
Definition GxStream.h:81
GxStream(void)
コンストラクタ (継承先でのみインスタンス生成)
Definition GxStream.h:50
GX_FORCE_INLINE s32 getRemainSize(void) const
残サイズ取得
Definition GxStream.h:94
virtual u32 read(void *, u32)
読み込み
Definition GxStream.h:63
virtual void close(void)
クローズ
Definition GxStream.h:61
virtual void setSize(u32)
ストリームサイズ設定
Definition GxStream.h:83
ストリーム読み込みクラス
Definition GxStreamReader.h:19
Zlibメモリストリームクラス
Definition GxStream.h:413
GX_FORCE_INLINE b32 isWritable(void) const override
書き込み可能判定
Definition GxStream.h:468
u32 seek(s32 offset, GxFile::SEEK_TYPE seekType=GxFile::SEEK_TYPE::BEGIN) override
シーク
Definition GxStream.cpp:1158
b32 initialize(GxStreamReader *pStreamReader, u32 chunkSizeByte)
初期化 (使用中に pStreamReader がスコープから外れないように注意)
Definition GxStream.cpp:1056
void alignment(GxMemory::ALIGNMENT alignment)
メモリアライメント調整 (使用できません)
Definition GxStream.cpp:1196
~GxZlibReadStream(void) override
デストラクタ
Definition GxStream.cpp:1044
u32 read(void *pDst, u32 size) override
読み込み
Definition GxStream.cpp:1117
GX_FORCE_INLINE u32 getSize(void) const override
ストリームサイズ取得
Definition GxStream.h:463
GX_FORCE_INLINE u32 getPosition(void) const override
ストリーム位置を取得
Definition GxStream.h:461
GX_FORCE_INLINE b32 isReadable(void) const override
読み込み可能判定
Definition GxStream.h:466
GX_FORCE_INLINE void * reserve(u32)
メモリ領域の確保 (使用できません)
Definition GxStream.h:450
GxZlibReadStream(void)
コンストラクタ
Definition GxStream.cpp:1027
32bitブーリアン
Definition GxDefine.h:173