1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fs_Directory.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: 32512 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FS_FS_DIRECTORY_H_
17 #define NN_FS_FS_DIRECTORY_H_
18 
19 #include <nn/Handle.h>
20 #include <nn/Result.h>
21 #include <nn/types.h>
22 #include <nn/util/util_Result.h>
23 #include <nn/fs/fs_Parameters.h>
24 #include <nn/fs/fs_DirectoryBase.h>
25 
26 #include <nn/fs/fs_DirectoryBase.h>
27 
28 namespace nn {
29 namespace fs {
30 
31 /*!
32     :category ファイル・ディレクトリ操作
33 
34     @brief ディレクトリを操作するためのクラスです。
35 
36            パス名で指定されたディレクトリを開き、そのエントリを読み込むことができます。
37            また、パス名を指定して、ディレクトリの作成・リネーム・削除ができます。@n
38            パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、
39            特別な理由が無い限りは、ワイド文字列を使うようにしてください。
40 */
41 class Directory : private nn::util::NonCopyable<Directory>, private detail::DirectoryBase
42 {
43 public:
44 
45     /*!
46         :overload   noparam
47 
48         @brief コンストラクタです。
49 
50                引数の無いオーバロードでは、ディレクトリは開きません。
51                ディレクトリのエントリを読み込むためには、別途 @ref TryInitialize を呼ぶ必要があります。
52 
53                パス名を指定したオーバロードでは、指定されたパスのディレクトリを開きます。
54     */
Directory()55     Directory() {}
56 
57     /*!
58         :overload   wcharparam
59 
60         @brief オブジェクトを構築し、指定されたディレクトリを開くコンストラクタです。
61 
62                指定されたパスのディレクトリを開きます。
63 
64                この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。
65                rom アーカイブ以外では @ref TryInitialize を使用してください。
66 
67         @param[in] pathName 開くディレクトリのパス
68     */
Directory(const wchar_t * pathName)69     Directory( const wchar_t* pathName ) : DirectoryBase(pathName) {}
70 
71     /*!
72         :overload   charparam
73 
74         @brief オブジェクトを構築し、指定されたディレクトリを開くコンストラクタです。
75 
76                指定されたパスのディレクトリを開きます。@n
77                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
78                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
79 
80                この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。
81                rom アーカイブ以外では @ref TryInitialize を使用してください。
82 
83         @param[in] pathName 開くディレクトリのパス(ASCII 文字以外を含むことはできません)
84     */
Directory(const char * pathName)85     Directory( const char* pathName ) : DirectoryBase(pathName) {}
86 
87     /*!
88         :overload   wcharparam
89 
90         @brief 指定されたディレクトリを開きます。
91 
92                指定されたパスのディレクトリを開きます。
93                既にこのオブジェクトでディレクトリを開いている場合に呼ぶことはできません。
94 
95                この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。
96                rom アーカイブ以外では @ref TryInitialize を使用してください。
97 
98         @param[in] pathName 開くディレクトリのパス
99     */
Initialize(const wchar_t * pathName)100     void Initialize( const wchar_t* pathName ) { DirectoryBase::Initialize(pathName); }
101 
102     /*!
103         :overload   charparam
104 
105         @brief 指定されたディレクトリを開きます。
106 
107                指定されたパスのディレクトリを開きます。
108                既にこのオブジェクトでディレクトリを開いている場合に呼ぶことはできません。@n
109                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
110                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
111 
112                この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。
113                rom アーカイブ以外では @ref TryInitialize を使用してください。
114 
115         @param[in] pathName 開くディレクトリのパス(ASCII 文字以外を含むことはできません)
116     */
Initialize(const char * pathName)117     void Initialize( const char* pathName ) { DirectoryBase::Initialize(pathName); }
118 
119     /*!
120         :overload   wcharparam
121 
122         @brief 指定されたディレクトリを開くことを試みます。
123 
124                指定されたパスのディレクトリを開きます。
125                既にこのオブジェクトでディレクトリを開いている場合には、エラーを返します。
126 
127         @param[in] pathName 開くディレクトリのパス
128 
129         @return ディレクトリを開いた結果。
130     */
TryInitialize(const wchar_t * pathName)131     Result TryInitialize( const wchar_t* pathName ) { return DirectoryBase::TryInitialize(pathName); }
132 
133     /*!
134         :overload   charparam
135 
136         @brief 指定されたディレクトリを開くことを試みます。
137 
138                指定されたパスのディレクトリを開きます。
139                既にこのオブジェクトでディレクトリを開いている場合には、エラーを返します。@n
140                この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
141                大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
142 
143         @param[in] pathName 開くディレクトリのパス
144 
145         @return ディレクトリを開いた結果。
146     */
TryInitialize(const char * pathName)147     Result TryInitialize( const char* pathName ) { return DirectoryBase::TryInitialize(pathName); }
148 
149     /*!
150         @brief ディレクトリを閉じます。
151 
152                ディレクトリを閉じます。ディレクトリが開かれていなかった場合は何もしません。
153     */
Finalize()154     void Finalize() { DirectoryBase::Finalize(); }
155 
156     /*!
157         @brief デストラクタです。
158 
159                ディレクトリが開かれていればディレクトリを閉じます。
160     */
~Directory()161     virtual ~Directory() {}
162 
163     /*!
164         @brief ディレクトリから指定された数のディレクトリエントリを読み込みます。
165 
166                ファイルの現在位置から最大 numEntries エントリを読み込み、
167                pEntries で指定されたアドレスの領域にコピーします。
168 
169                この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。
170                rom アーカイブ以外では @ref TryRead を使用してください。
171 
172          @param[out] pEntries ディレクトリエントリの読み込み先
173          @param[in] numEntries 読み込む最大のディレクトリエントリ数
174 
175          @return 実際に読み込んだエントリ数を返します。エントリを全て走査し終わっているときは、0 を返します。
176     */
Read(DirectoryEntry pEntries[],s32 numEntries)177     s32 Read( DirectoryEntry pEntries[], s32 numEntries ) { return DirectoryBase::Read(pEntries, numEntries); }
178 
179     /*!
180         @brief ディレクトリから指定された数のディレクトリエントリを読み込みます。
181 
182                ファイルの現在位置から最大 numEntries エントリを読み込み、
183                pEntries で指定されたアドレスの領域にコピーします。
184 
185          @param[out] pNumEntriesOut 実際に読み込んだエントリ数を返します。エントリを全て走査し終わっているときは、0 を返します。
186          @param[out] pEntries ディレクトリエントリの読み込み先
187          @param[in] numEntries 読み込む最大のディレクトリエントリ数
188 
189          @return 処理の結果を返します。
190     */
TryRead(s32 * pNumEntriesOut,DirectoryEntry pEntries[],s32 numEntries)191     Result TryRead( s32* pNumEntriesOut, DirectoryEntry pEntries[], s32 numEntries ) { return DirectoryBase::TryRead(pNumEntriesOut, pEntries, numEntries); }
192 };
193 
194 } // end of namespace fs
195 } // end of namespace nn
196 
197 #endif  // ifndef NN_FS_FS_DIRECTORY_H_
198