OROCHI
 
Loading...
Searching...
No Matches
GxSysFile.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_CORE_NAMESPACE_BEGIN()
14
15//===========================================================================
17//===========================================================================
19{
20 //-------------------------------------------------------------
22 //-------------------------------------------------------------
24public:
25 GX_RTTI_ABSTRACT_CLASS(GxSysFile, GxSysBase)
26 // ClassBase継承クラス用禁止宣言
28
29
30 static constexpr u32 REQUEST_BUFFER_MAX = GxMath::VALUE_32;
32 static constexpr u32 READ_ASYNC_ONE_SIZE = GxMath::VALUE_128K;
33
36 {
37 HIGH = 0,
38 MIDDLE,
39 LOW,
40 MAX
41 };
42
44 enum class REQUEST_STATE
45 {
46 READ = 0,
47 CANCEL
48 };
49
51 enum class ASYNC_RESULT
52 {
53 CANCELED = -2,
54 ERROR_ = -1,
55 PROGRESS = 0,
56 SUCCESS
57 };
58
60 typedef void (*REQUEST_START_CALLBACK_FUNCTION)(void* pUser, GX_HANDLE requestHandle);
62 typedef void (*REQUEST_END_CALLBACK_FUNCTION)(void* pUser, GX_HANDLE requestHandle, GxSysFile::ASYNC_RESULT result);
63
66 {
67 //-------------------------------------------------------------
69 //-------------------------------------------------------------
71
73
74
75 //-------------------------------------------------------------
77 //-------------------------------------------------------------
79 public:
81 GxAsyncRequestCallback(void* pUser = nullptr, REQUEST_START_CALLBACK_FUNCTION startCallback = nullptr, REQUEST_END_CALLBACK_FUNCTION endCallback = nullptr)
82 : _pUser(pUser)
83 , _onStartCallback(startCallback)
84 , _onEndCallback(endCallback)
85 {}
86
88 //-------------------------------------------------------------
90 //-------------------------------------------------------------
92 public:
93 void* _pUser;
94 REQUEST_START_CALLBACK_FUNCTION _onStartCallback;
95 REQUEST_END_CALLBACK_FUNCTION _onEndCallback;
96
98 };
99
102 {
103 //-------------------------------------------------------------
105 //-------------------------------------------------------------
107
108 GX_RTTI_STRUCT(GxSysFile::GxAsyncRequest)
109
110
111 //-------------------------------------------------------------
113 //-------------------------------------------------------------
115 public:
117 GX_FORCE_INLINE b32 isFree(void) const { return (_pFile == nullptr); }
119 constexpr void free(void) { _pFile = nullptr; _pDst = nullptr; }
121 void setRequestRead(GxFile* pFile, void* pDst, u32 seek, u32 size, const GxAsyncRequestCallback* pCallback);
122
124 //-------------------------------------------------------------
126 //-------------------------------------------------------------
128 public:
131 void* _pDst;
132 u32 _size;
133 u32 _seek;
138#if GX_DEVELOP
139 u32 _requestIndex;
140#endif // GX_DEVELOP
141
143 };
144
145protected:
148 {
149 //-------------------------------------------------------------
151 //-------------------------------------------------------------
153 public:
155 static constexpr s32 WAIT_INFINITY = -1;
156
158 //-------------------------------------------------------------
160 //-------------------------------------------------------------
162 public:
164 void threadMain(void* pArgument) override;
165
167 GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond = WAIT_INFINITY) { return _startEvent.waitEvent(milliSecond); }
169 GX_FORCE_INLINE b32 setStartEvent(void) { return _startEvent.setEvent(); }
171 GX_FORCE_INLINE b32 waitAsyncIOEvent(s32 milliSecond = WAIT_INFINITY) { return _asyncIOEvent.waitEvent(milliSecond); }
173 GX_FORCE_INLINE b32 setAsyncIOEvent(void) { return _asyncIOEvent.setEvent(); }
174
175 private:
177 GX_FORCE_INLINE static void callbackAsyncRead(void* /*pUser*/, GxFile& /*file*/, u32 /*size*/) {}
178
180 //-------------------------------------------------------------
182 //-------------------------------------------------------------
184 private:
185 GxEvent _startEvent;
186 GxEvent _asyncIOEvent;
187
189 };
190
192 //-------------------------------------------------------------
194 //-------------------------------------------------------------
196public:
198 GxSysFile(void);
199
201 //-------------------------------------------------------------
203 //-------------------------------------------------------------
205public:
207 b32 initialize(const GxClassBase* pInitialInformation = nullptr) override;
209 void terminate(void) override;
210
212 //-----------------------------------------------------------
214 //-----------------------------------------------------------
216public:
218 u32 read(GxFile* pFile, void* pDst, u32 size);
220 GX_HANDLE readAsync(GxFile* pFile, void* pDst, u32 seek, u32 size, REQUEST_PRIORITY priority, const GxAsyncRequestCallback* pCallback = nullptr);
222 b32 cancelAsync(GX_HANDLE requestHandle);
224 b32 freeRequestHandle(GX_HANDLE requestHandle);
225
227 //-------------------------------------------------------------
229 //-------------------------------------------------------------
231public:
233 constexpr ASYNC_RESULT getAsyncResult(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._result; }
235 constexpr GxFile* getAsyncRequestFile(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._pFile; }
237 constexpr void* getAsyncRequestDstBuffer(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._pDst; }
239 constexpr void setAsyncRequestDstBuffer(GX_HANDLE requestHandle, void* pDst) { _requestBuffer[requestHandle]._pDst = pDst; }
241 constexpr u32 getAsyncRequestSize(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._size; }
243 constexpr u32 getAsyncRequestRemain(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._remain; }
244#if GX_DEVELOP
246 constexpr u32 getAsyncRequestIndex(GX_HANDLE requestHandle) const { return _requestBuffer[requestHandle]._requestIndex; }
247#endif // GX_DEVELOP
248
250 constexpr u32 getReserveRequestCount(REQUEST_PRIORITY priority) const { return _reserveRequestList[static_cast<s32>(priority)].getCount(); }
252 u32 getFreeRequestCount(void) const;
253#if GX_DEVELOP
255 constexpr GxAsyncRequest* getActiveRequest(REQUEST_PRIORITY priority) const { return _pActiveRequest[static_cast<s32>(priority)]; }
257 constexpr GxArray* getReserveRequestList(REQUEST_PRIORITY priority) { return &_reserveRequestList[static_cast<s32>(priority)]; }
258#endif // GX_DEVELOP
259
260#if defined(_PS4)
262 GX_FORCE_INLINE void setDisableStatSync(b32 flag){ _disableStatSync = flag; }
264 GX_FORCE_INLINE b32 isDisableStatSync(void) const { return _disableStatSync; }
265#endif //_PS4
266
268 //-------------------------------------------------------------
270 //-------------------------------------------------------------
272protected:
273 GxAsyncRequest _requestBuffer[REQUEST_BUFFER_MAX];
274 GxArray _reserveRequestList[static_cast<s32>(REQUEST_PRIORITY::MAX)];
275 GxAsyncRequest* _pActiveRequest[static_cast<s32>(REQUEST_PRIORITY::MAX)];
278#if defined(_PS4)
279 s64 _opStorage[GX_FIOS_OP_STORAGE_SIZE(GxMath::VALUE_64, GxFile::FILE_PATH_MAX) / sizeof(s64) + 1];
280 s64 _chunkStorage[GX_FIOS_CHUNK_STORAGE_SIZE(GxMath::VALUE_1K) / sizeof(s64) + 1];
281 s64 _fHStorage[GX_FIOS_FH_STORAGE_SIZE(GxMath::VALUE_256, GxFile::FILE_PATH_MAX) / sizeof(s64) + 1];
282 s64 _dHStorage[GX_FIOS_DH_STORAGE_SIZE(GxMath::VALUE_8, GxFile::FILE_PATH_MAX) / sizeof(s64) + 1];
283#endif //_PS4
284#if GX_DEVELOP
285 u32 _requestIndex;
286 u32 _delayTime;
287#endif // GX_DEVELOP
288#if defined(_PS4)
289 b32 _disableStatSync;
290#endif //_PS4
291
293};
294
295// アクセスインターフェース
296GX_FORCE_INLINE GxSysFile* getGxSysFile(void){ return GxSysFile::getSingletonPointer(); }
297
298//---------------------------------------------------------------------------
299// 読み込みリクエスト設定
305//---------------------------------------------------------------------------
306GX_FORCE_INLINE void GxSysFile::GxAsyncRequest::setRequestRead(GxFile* pFile, void* pDst, u32 seek, u32 size, const GxAsyncRequestCallback* pCallback)
307{
308 _pFile = pFile;
309 _pDst = pDst;
310 _seek = seek;
311 _size = _remain = size;
314 if( pCallback )
315 {
316 GX_MEMCPY(&_callback, pCallback, sizeof(_callback));
317 }
318 else
319 {
320 GX_MEMSET(&_callback, 0, sizeof(_callback));
321 }
322}
323
324GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ MAX
定義数
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
pThis threadMain(pThis->_pIn)
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
イベントクラス
Definition GxThread.h:132
ファイル管理クラス
Definition GxFile.h:157
算術演算クラス
Definition GxMath.h:84
static constexpr u32 VALUE_1K
1K
Definition GxMath.h:129
static constexpr u32 VALUE_256
256
Definition GxMath.h:127
static constexpr u32 VALUE_8
8
Definition GxMath.h:122
static constexpr u32 VALUE_64
64
Definition GxMath.h:125
システム基底クラス
Definition GxSysBase.h:18
非同期読み込みスレッドクラス
Definition GxSysFile.h:148
GX_FORCE_INLINE b32 waitAsyncIOEvent(s32 milliSecond=WAIT_INFINITY)
非同期I/Oイベント待ち
Definition GxSysFile.h:171
GX_FORCE_INLINE b32 setStartEvent(void)
開始イベント開始
Definition GxSysFile.h:169
GX_FORCE_INLINE b32 waitStartEvent(s32 milliSecond=WAIT_INFINITY)
開始イベント待ち
Definition GxSysFile.h:167
GX_FORCE_INLINE b32 setAsyncIOEvent(void)
非同期I/Oイベント開始
Definition GxSysFile.h:173
ファイルシステムクラス
Definition GxSysFile.h:19
constexpr u32 getReserveRequestCount(REQUEST_PRIORITY priority) const
待機リクエスト個数取得
Definition GxSysFile.h:250
constexpr void * getAsyncRequestDstBuffer(GX_HANDLE requestHandle) const
非同期リクエスト格納先バッファ取得
Definition GxSysFile.h:237
constexpr u32 getAsyncRequestRemain(GX_HANDLE requestHandle) const
非同期リクエスト残サイズ取得
Definition GxSysFile.h:243
GxAsyncReadThread _thread
非同期読み込みスレッド
Definition GxSysFile.h:276
constexpr GxFile * getAsyncRequestFile(GX_HANDLE requestHandle) const
非同期リクエストファイル取得
Definition GxSysFile.h:235
constexpr ASYNC_RESULT getAsyncResult(GX_HANDLE requestHandle) const
非同期リクエスト結果取得
Definition GxSysFile.h:233
b32 _isStopThread
非同期読み込みスレッド停止要求フラグ
Definition GxSysFile.h:277
REQUEST_PRIORITY
非同期要求プライオリティ
Definition GxSysFile.h:36
constexpr void setAsyncRequestDstBuffer(GX_HANDLE requestHandle, void *pDst)
非同期リクエスト格納先バッファ設定
Definition GxSysFile.h:239
constexpr u32 getAsyncRequestSize(GX_HANDLE requestHandle) const
非同期リクエストサイズ取得
Definition GxSysFile.h:241
REQUEST_STATE
リクエスト状態
Definition GxSysFile.h:45
ASYNC_RESULT
非同期結果
Definition GxSysFile.h:52
スレッドクラス
Definition GxThread.h:177
シングルトン基礎クラス
Definition GxSingleton.h:19
static constexpr GxSysFile * getSingletonPointer(void)
Definition GxSingleton.h:59
Definition GxBase.h:24
非同期リクエストコールバック情報
Definition GxSysFile.h:66
GxAsyncRequestCallback(void *pUser=nullptr, REQUEST_START_CALLBACK_FUNCTION startCallback=nullptr, REQUEST_END_CALLBACK_FUNCTION endCallback=nullptr)
コンストラクタ
Definition GxSysFile.h:81
REQUEST_START_CALLBACK_FUNCTION _onStartCallback
開始時コールバック関数
Definition GxSysFile.h:94
REQUEST_END_CALLBACK_FUNCTION _onEndCallback
終了時コールバック関数
Definition GxSysFile.h:95
void * _pUser
ユーザ定義ポインタ
Definition GxSysFile.h:93
非同期リクエスト情報
Definition GxSysFile.h:102
u32 _size
読み込みサイズ
Definition GxSysFile.h:132
GxFile * _pFile
読み込みファイル情報
Definition GxSysFile.h:130
void * _pDst
読込先ポインタ
Definition GxSysFile.h:131
GX_FORCE_INLINE b32 isFree(void) const
空きバッファ判定
Definition GxSysFile.h:117
REQUEST_STATE _state
リクエスト状態
Definition GxSysFile.h:135
ASYNC_RESULT _result
非同期処理結果
Definition GxSysFile.h:136
u32 _seek
シーク位置
Definition GxSysFile.h:133
constexpr void free(void)
空きバッファ設定
Definition GxSysFile.h:119
GxAsyncRequestCallback _callback
コールバック情報
Definition GxSysFile.h:137
u32 _remain
残サイズ
Definition GxSysFile.h:134
void setRequestRead(GxFile *pFile, void *pDst, u32 seek, u32 size, const GxAsyncRequestCallback *pCallback)
読み込みリクエスト設定
Definition GxSysFile.h:306
GX_HANDLE _handle
ハンドル
Definition GxSysFile.h:129
32bitブーリアン
Definition GxDefine.h:173