1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fs_FileInputStream.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  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   $Rev: 19028 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FS_FS_FILEINPUTSTREAM_H_
17 #define NN_FS_FS_FILEINPUTSTREAM_H_
18 
19 #include <nn/fs/fs_IInputStream.h>
20 #include <nn/fs/fs_FileBase.h>
21 #include <nn/fnd/fnd_Storage.h>
22 
23 namespace nn { namespace fs {
24 
25 /*!
26     @brief ファイルを読むためのクラスです。
27 
28            パス名で指定されたファイルを開き、その内容を読むことができます。
29            パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、
30            特別な理由が無い限りは、ワイド文字列を使うようにしてください。
31 */
32 class FileInputStream : public IInputStream, public detail::FileBase, private nn::util::NonCopyable<FileInputStream>
33 {
34 public:
35 
36     /*!
37         @brief コンストラクタです。
38 
39                引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref Initialize を呼ぶ必要があります。
40 
41                パス名を指定したオーバロードでは、指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
42 
43     */
FileInputStream()44     FileInputStream() {}
45 
46     /*!
47         @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。
48 
49                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
50 
51         @param[in] pathName 開くファイルのパス
52     */
FileInputStream(const wchar_t * pathName)53     FileInputStream(const wchar_t* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {}
54 
55     /*!
56         @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。
57 
58                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
59                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
60                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
61 
62         @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません)
63     */
FileInputStream(const char * pathName)64     FileInputStream(const char* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {}
65 
66     /*!
67         @brief 指定されたファイルを開きます。
68 
69                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
70                既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。
71 
72         @param[in] pathName 開くファイルのパス
73     */
Initialize(const wchar_t * pathName)74     void Initialize(const wchar_t* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); }
75 
76     /*!
77         @brief 指定されたファイルを開きます。
78 
79                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
80                既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。
81                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
82                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
83 
84         @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません)
85     */
Initialize(const char * pathName)86     void Initialize(const char* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); }
87 
88     /*!
89         @brief 指定されたファイルを開くことを試みます。
90 
91                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
92                ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。
93                既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。
94 
95         @param[in] pathName 開くファイルのパス
96 
97         @return ファイルを開いた結果。
98     */
TryInitialize(const wchar_t * pathName)99     Result TryInitialize(const wchar_t* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); }
100 
101     /*!
102         @brief 指定されたファイルを開くことを試みます。
103 
104                指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。
105                ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。
106                既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。
107                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
108                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
109 
110         @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません)
111 
112         @return ファイルを開いた結果。
113     */
TryInitialize(const char * pathName)114     Result TryInitialize(const char* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); }
115 
116     /*!
117         @brief ファイルを閉じます。
118 
119                ファイルを閉じます。ファイルが開かれていなかった場合は何もしません。
120     */
Finalize()121     void Finalize() { detail::FileBase::Finalize(); }
122 
123     /*!
124         @brief デストラクタです。
125 
126                ファイルが開かれていればファイルを閉じます。
127     */
~FileInputStream()128     virtual ~FileInputStream() {}
129 
130     /*!
131         @brief ファイルから指定サイズをバッファに読み込みます。
132 
133                ファイルの現在位置から最大 size バイトデータを読み込み、
134                buffer で指定されたアドレスの領域にコピーします。
135                実際にコピーしたバイト数を返します。
136 
137                ファイルの終端に達したときは、0 を返します。
138 
139          @param[in] buffer コピー先のバッファへのポインタ
140          @param[in] size コピーする最大バイト数
141 
142          @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。
143     */
Read(void * buffer,size_t size)144     virtual s32 Read(void* buffer, size_t size) { return detail::FileBase::Read(buffer, size); }
145 
146     /*!
147         @brief ファイルから指定サイズをバッファに読み込みます。
148 
149                ファイルの現在位置から最大 size バイトデータを読み込み、
150                buffer で指定されたアドレスの領域にコピーします。
151                実際にコピーしたバイト数を返します。
152 
153                ファイルの終端に達したときは、0 を返します。
154 
155          @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。
156          @param[in] buffer コピー先のバッファへのポインタ
157          @param[in] size コピーする最大バイト数
158 
159          @return 処理の結果を返します。
160     */
TryRead(s32 * pOut,void * buffer,size_t size)161     virtual Result TryRead(s32* pOut, void* buffer, size_t size) { return detail::FileBase::TryRead(pOut, buffer, size); }
162 
163     /*!
164         @brief ファイルの読み出し位置を変更します。
165 
166                base で指定された位置から position 離れた場所に読み出し位置を設定します。
167 
168         @param[in] base 読み出し位置の変更する基準を指定します。
169         @param[in] position 読み出し位置の変更する位置を指定します。
170     */
Seek(s64 position,PositionBase base)171     virtual void Seek(s64 position, PositionBase base) { detail::FileBase::Seek(position, base); }
172 
173     /*!
174         @brief ファイルの読み出し位置を変更します。
175 
176                base で指定された位置から position 離れた場所に読み出し位置を設定します。
177 
178         @param[in] base 読み出し位置の変更する基準を指定します。
179         @param[in] position 読み出し位置の変更する位置を指定します。
180 
181         @return 処理の結果を返します。
182     */
TrySeek(s64 position,PositionBase base)183     virtual Result TrySeek(s64 position, PositionBase base) { return detail::FileBase::TrySeek(position, base); }
184 
185     /*!
186         @brief ファイル先頭から数えた現在の読み出し位置を取得します。
187 
188         @return 現在の位置を返します。
189     */
GetPosition()190     virtual s64 GetPosition() const { return detail::FileBase::GetPosition(); }
191 
192     /*!
193         @brief ファイル先頭から数えた現在の読み出し位置を取得します。
194 
195         @param[out] pOut 現在の位置が格納されます。
196 
197         @return 処理の結果を返します。
198     */
TryGetPosition(s64 * pOut)199     virtual Result TryGetPosition(s64* pOut) const { return detail::FileBase::TryGetPosition(pOut); }
200 
201     /*!
202         @brief ファイル先頭から数えた現在の読み出し位置を設定します。
203 
204         @param[in] position 読み出し位置を指定します。
205     */
SetPosition(s64 position)206     virtual void SetPosition(s64 position) { detail::FileBase::SetPosition(position); }
207 
208     /*!
209         @brief ファイル先頭から数えた現在の読み出し位置を設定します。
210 
211         @param[in] position 読み出し位置を指定します。
212 
213         @return 処理の結果を返します。
214     */
TrySetPosition(s64 position)215     virtual Result TrySetPosition(s64 position) { return detail::FileBase::TrySetPosition(position); }
216 
217     /*!
218         @brief ファイルサイズを取得します。
219 
220         @return ファイルサイズを返します。
221     */
GetSize()222     virtual s64 GetSize() const { return detail::FileBase::GetSize(); }
223 
224     /*!
225         @brief ファイルサイズを取得します。
226 
227         @param[out] pOut ファイルサイズが格納されます。
228 
229         @return 処理の結果を返します。
230     */
TryGetSize(s64 * pOut)231     virtual Result TryGetSize(s64* pOut) const { return detail::FileBase::TryGetSize(pOut); }
232 
233 };
234 
235 }}
236 
237 #endif
238