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