1 /*---------------------------------------------------------------------------* 2 Project: NintendoWare 3 File: io_IOStream.h 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd./HAL Laboratory, Inc. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 18106 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NW_IO_IO_STREAM_H_ 17 #define NW_IO_IO_STREAM_H_ 18 19 #include <nw/ut/ut_RuntimeTypeInfo.h> 20 21 namespace nw { 22 namespace io { 23 24 //--------------------------------------------------------------------------- 25 //! @brief ファイルストリーム基底クラスです。 26 //--------------------------------------------------------------------------- 27 class IOStream 28 { 29 //------ publicメンバ -------------------------- 30 public: 31 NW_UT_RUNTIME_TYPEINFO; // ダウンキャスト用の実行時型情報を埋め込みます 32 33 //--------------------------------------------------------------------------- 34 //! @brief 非同期処理の完了後に呼び出されるコールバック関数です。 35 //--------------------------------------------------------------------------- 36 typedef void (*IOStreamCallback)(s32 result, IOStream* stream, void* arg); 37 38 //! @name コンストラクタ/デストラクタ 39 //@{ 40 41 //--------------------------------------------------------------------------- 42 //! @brief デストラクタです。 43 //--------------------------------------------------------------------------- ~IOStream()44 virtual ~IOStream() {} 45 46 //@} 47 48 //! @name ファイルストリームの属性情報を取得 49 //@{ 50 51 //--------------------------------------------------------------------------- 52 //! @brief このストリームが読み込み可能であるかどうかを取得します。 53 //! 54 //! @return このストリームが読み込み可能である場合には true を、 55 //! 読み込みができない場合には false を返します。 56 //--------------------------------------------------------------------------- 57 virtual bool CanRead() const = 0; 58 59 //--------------------------------------------------------------------------- 60 //! @brief このストリームが書き込み可能であるかどうかを取得します。 61 //! 62 //! @return このストリームが書き込み可能である場合には true を、 63 //! 書き込みできない場合には false を返します。 64 //--------------------------------------------------------------------------- 65 virtual bool CanWrite() const = 0; 66 67 //--------------------------------------------------------------------------- 68 //! @brief このストリームが非同期処理が可能かどうかを取得します。 69 //! 70 //! @return このストリームの非同期処理が可能である場合には true を、 71 //! 非同期処理が不可能である場合には false を返します。 72 //--------------------------------------------------------------------------- 73 virtual bool CanAsync() const = 0; 74 75 //--------------------------------------------------------------------------- 76 //! @brief ファイルのリード / ライトを行う際のファイルポインタの 77 //! オフセット位置として必要なアライメント値を取得します。 78 //! 79 //! @return ファイルのリード / ライトを行う際のファイルポインタの 80 //! オフセット位置として必要なアライメント値を返します。@n 81 //! アライメントが必要ない場合には 1 が返されます。 82 //--------------------------------------------------------------------------- GetOffsetAlign()83 virtual u32 GetOffsetAlign() const { return 1; } 84 85 //--------------------------------------------------------------------------- 86 //! @brief ファイルのリード / ライトの際に一度に読み書きするサイズとして 87 //! 必要なアライメント値を取得します。 88 //! 89 //! @return ファイルのリード / ライトの際に一度に読み書きするサイズとして 90 //! 必要なアライメント値を返します。@n 91 //! アライメントが必要ない場合には 1 が返されます。 92 //--------------------------------------------------------------------------- GetSizeAlign()93 virtual u32 GetSizeAlign () const { return 1; } 94 95 //--------------------------------------------------------------------------- 96 //! @brief リード / ライトの際に送受信用のバッファアドレスとして 97 //! 必要なアライメント値を取得する関数です。 98 //! 99 //! @return リード / ライトの際に送受信用のバッファアドレスとして 100 //! 必要なアライメント値を返します。@n 101 //! アライメントの必要がない場合には 1 が返されます。 102 //--------------------------------------------------------------------------- GetBufferAlign()103 virtual u32 GetBufferAlign() const { return 1; } 104 105 //@} 106 107 //! @name ファイルストリームの操作 108 //@{ 109 110 //--------------------------------------------------------------------------- 111 //! @brief ストリームからデータを読み込みます(同期処理)。 112 //! 113 //! @param[out] buf 読み込むデータを格納するバッファへのポインタ。 114 //! GetBufferAlign() 関数で取得されるアライメントに 115 //! 合っている必要があります。 116 //! @param[in] length 読み込むデータサイズ。 117 //! GetSizeAlign() 関数で取得されるアライメントに 118 //! 合っている必要があります。 119 //! 120 //! @return 成功すれば、実際に読み込んだバイト数が返ります。@n 121 //! @n 122 //! 読み込み中にエラーが発生した場合には負の値のエラーコードが 123 //! 返ります。@n 124 //! 返されるエラーコードの詳細に関しては具象クラスの説明を 125 //! ご参照ください。 126 //--------------------------------------------------------------------------- 127 virtual s32 Read( void* buf, u32 length ); 128 129 //--------------------------------------------------------------------------- 130 //! @brief ストリームからデータを読み込みます(非同期処理)。 131 //! 132 //! @param[out] buf 読み込むデータを格納するバッファへのポインタ。 133 //! GetBufferAlign() 関数で取得されるアライメントに 134 //! 合っている必要があります。 135 //! @param[in] length 読み込むデータサイズ。 136 //! GetSizeAlign() 関数で取得される 137 //! アライメントに合っている必要があります。 138 //! @param[in] callback 非同期処理完了時のコールバック関数を登録します。 139 //! NULL の場合にはコールバックは発生しません。 140 //! @param[in] arg 非同期処理完了時のコールバック関数で引数として返される 141 //! パラメータを登録します。 142 //! 143 //! @return コマンドが正常に発行された場合には true を返します。@n 144 //! 発行されなかった場合には false を返します。@n 145 //! コマンドが発行されなかった場合にはコールバックは発生しません。 146 //--------------------------------------------------------------------------- 147 virtual bool ReadAsync( 148 void* buf, 149 u32 length, 150 IOStreamCallback callback, 151 void* arg ); 152 153 //--------------------------------------------------------------------------- 154 //! @brief ストリームにデータを書き込みます(同期処理)。 155 //! 156 //! @param[in] buf 書き込むデータが格納されているバッファへのポインタ。 157 //! GetBufferAlign() 関数で取得されるアライメントに 158 //! 合っている必要があります。 159 //! @param[in] length 書き込むデータサイズ。 160 //! GetSizeAlign() 関数で 161 //! 取得されるアライメントに合っている必要があります。 162 //! 163 //! @return 書き込みに成功すれば、実際に書き込まれたバイト数が返ります。@n 164 //! @n 165 //! 書き込み中にエラーが発生した場合には負の値のエラーコードが 166 //! 返ります。@n 167 //! 返されるエラーコードの詳細に関しては具象クラスの説明を 168 //! ご参照ください。 169 //--------------------------------------------------------------------------- 170 virtual s32 Write( const void* buf, u32 length ); 171 172 //--------------------------------------------------------------------------- 173 //! @brief ストリームにデータを書き込みます(非同期処理)。 174 //! 175 //! @param[in] buf 書き込むデータが格納されているバッファへのポインタ。 176 //! GetBufferAlign() 関数で取得されるアライメントに 177 //! 合っている必要があります。 178 //! @param[in] length 書き込むデータサイズ。 179 //! GetSizeAlign() 関数で 180 //! 取得されるアライメントに合っている必要があります。 181 //! @param[in] callback 非同期処理完了時のコールバック関数を登録します。 182 //! NULL の場合にはコールバックは発生しません。 183 //! 184 //! @param[in] arg 非同期処理完了時のコールバック関数で引数として 185 //! 返されるパラメータを登録します。 186 //! 187 //! @return コマンドが正常に発行された場合には true を返します。@n 188 //! 発行されなかった場合には false を返します。@n 189 //! コマンドが発行されなかった場合にはコールバックは発生しません。 190 //--------------------------------------------------------------------------- 191 virtual bool WriteAsync( 192 const void* buf, 193 u32 length, 194 IOStreamCallback callback, 195 void* arg ); 196 197 //--------------------------------------------------------------------------- 198 //! @brief 非同期処理の完了を待ちます。 199 //! 200 //! @return 最後に実行された非同期処理の結果を返します。 201 //--------------------------------------------------------------------------- 202 s32 WaitAsync() const; 203 204 //--------------------------------------------------------------------------- 205 //! @brief 非同期処理中であるかどうかを確認します。 206 //! 207 //! @return 非同期処理中の場合には true を返します。@n 208 //! 非同期処理中でない場合には false を返します。 209 //--------------------------------------------------------------------------- 210 virtual bool IsBusy() const; 211 212 //@} 213 214 //! @name ファイルのクローズ/状態取得 215 //@{ 216 217 //--------------------------------------------------------------------------- 218 //! @brief ストリームをクローズします。 219 //--------------------------------------------------------------------------- 220 virtual void Close() = 0; 221 222 //--------------------------------------------------------------------------- 223 //! @brief このストリームが現在使用可能な状態であるかどうかを示す値を 224 //! 取得します。 225 //! 226 //! @return このストリームが現在使用可能な状態であれば true を返します。 227 //! ファイルがオープンされていない等の理由で使用不能であった場合には 228 //! false を返します。 229 //--------------------------------------------------------------------------- IsAvailable()230 bool IsAvailable() const { return mAvailable; } 231 232 //@} 233 234 //------ protectedメンバ -------------------------- 235 protected: 236 237 //! @name コンストラクタ/デストラクタ 238 //@{ 239 240 //--------------------------------------------------------------------------- 241 //! @brief コンストラクタです。 242 //--------------------------------------------------------------------------- IOStream()243 IOStream() 244 : mAvailable( false ), 245 mCallback ( NULL ), 246 mArg ( NULL ) 247 {} 248 249 //@} 250 251 bool mAvailable; // 利用可能フラグ 252 253 s32 mAsyncResult; // 非同期処理の結果格納 254 IOStreamCallback mCallback; // 非同期処理コールバック 255 void* mArg; // コールバック引数 256 }; 257 258 } /* namespace io */ 259 } /* namespace nw */ 260 261 262 263 /* NW_IO_IO_STREAM_H_ */ 264 #endif 265