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