1 /*---------------------------------------------------------------------------*
2   Project:  NintendoWare
3   File:     lyt_ArcUtil.h
4 
5   Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain proprietary
8   information of Nintendo and/or its licensed developers and are protected by
9   national and international copyright laws. They may not be disclosed to third
10   parties or copied or duplicated in any form, in whole or in part, without the
11   prior written consent of Nintendo.
12 
13   The content herein is highly confidential and should be handled accordingly.
14 
15   $Revision: 31311 $
16  *---------------------------------------------------------------------------*/
17 
18 #ifndef NW_LYT_ARCUTIL_H_
19 #define NW_LYT_ARCUTIL_H_
20 
21 #include <nw/lyt/lyt_Arc.h>
22 #include <nw/lyt/lyt_ResourceAccessor.h>
23 #include <nw/lyt/lyt_Resources.h>
24 #include <nw/lyt/lyt_Types.h>
25 
26 namespace nw
27 {
28 namespace lyt
29 {
30 
31 //---------------------------------------------------------------------------
32 //! :category リソースアクセサ
33 //!
34 //! @brief アーカイブファイルへアクセスするユーティリティクラスです。
35 //!
36 //! @since 2011/02/28 初版。
37 //---------------------------------------------------------------------------
38 class ArcUtil
39 {
40 public:
41     //! @brief テクスチャリソースのアーカイブディレクトリを開きます。
42     //!
43     //! @details
44     //! ディレクトリを開いた後は ReadTextureDir() でテクスチャリソースの
45     //! ディレクトリエントリ情報を取得します。
46     //!
47     //! 本関数は内部で ARCChangeDir(), ARCOpenDir() を呼び出します。
48     //! 使用後は ARCCloseDir() でディレクトリを閉じてください。
49     //!
50     //! @param[in,out] pArcHandle ARCHandle を指定します。
51     //! @param[in] pRootName リソース検索のルートとなるディレクトリ名です。
52     //! @param[out] pDir ディレクトリ情報が格納されます。
53     //!
54     //! @return 成功した場合には true を返します。
55     //!
56     //! @sa ReadTextureDir
57     //! @sa ARCChangeDir
58     //! @sa ARCOpenDir
59     //! @sa ARCCloseDir
60     //!
61     //! @since 2011/02/28 初版。
62     //!
OpenTextureDir(ARCHandle * pArcHandle,const wchar_t * pRootName,ARCDir * pDir)63     static bool OpenTextureDir(
64         ARCHandle* pArcHandle,
65         const wchar_t* pRootName,
66         ARCDir* pDir)
67     {
68         return OpenResourceDir(
69             pArcHandle,
70             pRootName,
71             res::RESOURCETYPE_TEXTURE,
72             pDir);
73     }
74 
75     //! @brief テクスチャリソースのディレクトリエントリ情報を取得します。
76     //!
77     //! @details
78     //! OpenTextureDir() で開いたディレクトリ内のテクスチャリソースの
79     //! ディレクトリエントリ情報を取得します。
80     //!
81     //! リソースファイルの拡張子がテクスチャリソースと一致しない場合には
82     //! 読み飛ばします。
83     //!
84     //! 本関数は内部で ARCReadDir() を呼び出します。
85     //!
86     //! @param[in,out] pDir ARCDir を指定します。
87     //! @param[out] pDirEnt ディレクトリエントリ情報が格納されます。
88     //!
89     //! @return 成功した場合には true を返します。
90     //!
91     //! @sa OpenTextureDir
92     //!
93     //! @since 2011/02/28 初版。
94     //!
ReadTextureDir(ARCDir * pDir,ARCDirEntry * pDirEnt)95     static bool ReadTextureDir(
96         ARCDir* pDir,
97         ARCDirEntry* pDirEnt)
98     {
99         return ReadResourceDir(pDir, L".bclim", 6, pDirEnt);
100     }
101 
102     //! @brief フォントリソースのアーカイブディレクトリを開きます。
103     //!
104     //! @details
105     //! ディレクトリを開いた後は ReadFontDir() でフォントリソースの
106     //! ディレクトリエントリ情報を取得します。
107     //!
108     //! 本関数は内部で ARCChangeDir(), ARCOpenDir() を呼び出します。
109     //! 使用後は ARCCloseDir() でディレクトリを閉じてください。
110     //!
111     //! @param[in,out] pArcHandle ARCHandle を指定します。
112     //! @param[in] pRootName リソース検索のルートとなるディレクトリ名です。
113     //! @param[out] pDir ディレクトリ情報が格納されます。
114     //!
115     //! @return 成功した場合には true を返します。
116     //!
117     //! @sa ReadFontDir
118     //! @sa ARCChangeDir
119     //! @sa ARCOpenDir
120     //! @sa ARCCloseDir
121     //!
122     //! @since 2011/02/28 初版。
123     //!
OpenFontDir(ARCHandle * pArcHandle,const wchar_t * pRootName,ARCDir * pDir)124     static bool OpenFontDir(
125         ARCHandle* pArcHandle,
126         const wchar_t* pRootName,
127         ARCDir* pDir)
128     {
129         return OpenResourceDir(
130             pArcHandle,
131             pRootName,
132             res::RESOURCETYPE_FONT,
133             pDir);
134     }
135 
136     //! @brief フォントリソースのディレクトリエントリ情報を取得します。
137     //!
138     //! @details
139     //! OpenFontDir() で開いたディレクトリ内のフォントリソースの
140     //! ディレクトリエントリ情報を取得します。
141     //!
142     //! リソースファイルの拡張子がフォントリソースと一致しない場合には
143     //! 読み飛ばします。
144     //!
145     //! 本関数は内部で ARCReadDir() を呼び出します。
146     //!
147     //! @param[in,out] pDir ARCDir を指定します。
148     //! @param[out] pDirEnt ディレクトリエントリ情報が格納されます。
149     //!
150     //! @return 成功した場合には true を返します。
151     //!
152     //! @sa OpenFontDir
153     //!
154     //! @since 2011/02/28 初版。
155     //!
ReadFontDir(ARCDir * pDir,ARCDirEntry * pDirEnt)156     static bool ReadFontDir(
157         ARCDir* pDir,
158         ARCDirEntry* pDirEnt)
159     {
160         return ReadResourceDir(pDir, L".bcfnt", 6, pDirEnt);
161     }
162 
163     //! @details :private
164     static bool OpenResourceDir(
165         ARCHandle* pArcHandle,
166         const wchar_t* pRootName,
167         ResType resType,
168         ARCDir* pDir);
169 
170     //! @details :private
171     static bool ReadResourceDir(
172         ARCDir* pDir,
173         const wchar_t* pExtStr,
174         u32 extLen,
175         ARCDirEntry* pDirEnt);
176 };
177 
178 } // namespace nw::lyt
179 } // namespace nw
180 
181 #endif // NW_LYT_ARCUTIL_H_
182