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