aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/load__form_8h-source.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/load__form_8h-source.html')
-rw-r--r--docs/doxygen/nel/load__form_8h-source.html500
1 files changed, 500 insertions, 0 deletions
diff --git a/docs/doxygen/nel/load__form_8h-source.html b/docs/doxygen/nel/load__form_8h-source.html
new file mode 100644
index 00000000..ad88e46b
--- /dev/null
+++ b/docs/doxygen/nel/load__form_8h-source.html
@@ -0,0 +1,500 @@
+<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+ <TITLE>nevrax.org : docs</TITLE>
+ <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css">
+ <link href="doxygen.css" rel="stylesheet" type="text/css">
+</HEAD>
+<BODY MARGINHEIGHT="0" MARGINWIDTH="0">
+
+<!-- uplinks -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle>&nbsp;<A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A>&nbsp;&nbsp;&nbsp;</TD>
+ </TR>
+</TABLE>
+
+<!-- banner Nevrax -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%>
+ <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR>
+</TABLE>
+
+<!-- main table -->
+<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%>
+ <TR>
+ <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD>
+ <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+ <!------ Begin Box ------>
+ <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black>
+ <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF>
+ <TABLE cellspacing=0 cellpadding=1 border=0>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr>
+ <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr>
+ </TABLE>
+ </TD></TR></TABLE></TD></TR></TABLE>
+ <!------ End Box ------>
+
+ </TD>
+ <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD>
+ <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT="">
+
+<!-- title -->
+<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td>
+<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A>
+</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT="">
+</td></tr></table>
+&nbsp;
+
+<!-- block -->
+<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD>
+ <TD><B>Documentation</B></TD>
+ <TD ALIGN=RIGHT>&nbsp;</td>
+</tr></table>
+<!-- Generated by Doxygen 1.2.14 -->
+<center>
+<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="namespacemembers.html">Namespace Members</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; <a class="qindex" href="pages.html">Related Pages</a> &nbsp; <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> &nbsp; </center>
+<hr><h1>load_form.h</h1><a href="load__form_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
+00007 <font class="comment">/* Copyright, 2001 Nevrax Ltd.</font>
+00008 <font class="comment"> *</font>
+00009 <font class="comment"> * This file is part of NEVRAX NEL.</font>
+00010 <font class="comment"> * NEVRAX NEL is free software; you can redistribute it and/or modify</font>
+00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font>
+00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font>
+00013 <font class="comment"> * any later version.</font>
+00014 <font class="comment"></font>
+00015 <font class="comment"> * NEVRAX NEL is distributed in the hope that it will be useful, but</font>
+00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font>
+00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font>
+00018 <font class="comment"> * General Public License for more details.</font>
+00019 <font class="comment"></font>
+00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font>
+00021 <font class="comment"> * along with NEVRAX NEL; see the file COPYING. If not, write to the</font>
+00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font>
+00023 <font class="comment"> * MA 02111-1307, USA.</font>
+00024 <font class="comment"> */</font>
+00025
+00026 <font class="preprocessor">#ifndef NL_LOAD_FORM_H</font>
+00027 <font class="preprocessor"></font><font class="preprocessor">#define NL_LOAD_FORM_H</font>
+00028 <font class="preprocessor"></font>
+00029 <font class="preprocessor">#include "<a class="code" href="types__nl_8h.html">nel/misc/types_nl.h</a>"</font>
+00030
+00031 <font class="preprocessor">#include &lt;map&gt;</font>
+00032 <font class="preprocessor">#include &lt;string&gt;</font>
+00033 <font class="preprocessor">#include &lt;vector&gt;</font>
+00034
+00035 <font class="preprocessor">#include "<a class="code" href="path_8h.html">nel/misc/path.h</a>"</font>
+00036 <font class="preprocessor">#include "<a class="code" href="file_8h.html">nel/misc/file.h</a>"</font>
+00037
+00038 <font class="preprocessor">#include "<a class="code" href="u__form__loader_8h.html">nel/georges/u_form_loader.h</a>"</font>
+00039 <font class="preprocessor">#include "<a class="code" href="u__form_8h.html">nel/georges/u_form.h</a>"</font>
+00040 <font class="preprocessor">#include "<a class="code" href="sheet__id_8h.html">nel/misc/sheet_id.h</a>"</font>
+00041
+00099 <font class="keyword">template</font> &lt;<font class="keyword">class</font> T&gt;
+<a name="l00100"></a><a class="code" href="load__form_8h.html#a0">00100</a> <font class="keywordtype">void</font> <a class="code" href="load__form_8h.html#a3">loadForm</a> (<font class="keyword">const</font> std::string &amp;sheetFilter, <font class="keyword">const</font> std::string &amp;packedFilename, std::map&lt;NLMISC::CSheetId, T&gt; &amp;container, <font class="keywordtype">bool</font> updatePackedSheet=<font class="keyword">true</font>)
+00101 {
+00102 std::vector&lt;std::string&gt; vs;
+00103 vs.push_back(sheetFilter);
+00104 <a class="code" href="load__form_8h.html#a3">loadForm</a>(vs, packedFilename, container, updatePackedSheet);
+00105 }
+00106
+00112 <font class="keyword">template</font> &lt;<font class="keyword">class</font> T&gt;
+<a name="l00113"></a><a class="code" href="load__form_8h.html#a1">00113</a> <font class="keywordtype">void</font> <a class="code" href="load__form_8h.html#a3">loadForm</a> (<font class="keyword">const</font> std::vector&lt;std::string&gt; &amp;sheetFilters, <font class="keyword">const</font> std::string &amp;packedFilename, std::map&lt;NLMISC::CSheetId, T&gt; &amp;container, <font class="keywordtype">bool</font> updatePackedSheet=<font class="keyword">true</font>)
+00114 {
+00115 <font class="comment">// check the extension (i know that file like "foo.packed_sheetsbar" will be accepted but this check is enough...)</font>
+00116 <a class="code" href="debug_8h.html#a6">nlassert</a> (packedFilename.find (<font class="stringliteral">".packed_sheets"</font>) != std::string::npos);
+00117
+00118 std::string packedFilenamePath = <a class="code" href="classNLMISC_1_1CPath.html#d6">NLMISC::CPath::lookup</a>(packedFilename, <font class="keyword">false</font>);
+00119 <font class="keywordflow">if</font> (packedFilenamePath.empty())
+00120 {
+00121 packedFilenamePath = packedFilename;
+00122 }
+00123
+00124 <font class="comment">// make sure the CSheetId singleton has been properly initialised</font>
+00125 <a class="code" href="classNLMISC_1_1CSheetId.html#d0">NLMISC::CSheetId::init</a>(updatePackedSheet);
+00126
+00127 <font class="keywordtype">bool</font> olde, newe;
+00128 <a class="code" href="classNLMISC_1_1IStream.html#d1">NLMISC::CIFile::getVersionException</a>(olde, newe);
+00129 <font class="comment">// load the packed sheet if exists</font>
+00130 <font class="keywordflow">try</font>
+00131 {
+00132 <a class="code" href="classNLMISC_1_1CIFile.html">NLMISC::CIFile</a> ifile;
+00133 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a4">setCacheFileOnOpen</a>(<font class="keyword">true</font>);
+00134 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a3">open</a> (packedFilenamePath);
+00135 <font class="comment">// an exception will be launch if the file is not the good version or if the file is not found</font>
+00136
+00137 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Loading packed file '%s'"</font>, packedFilename.c_str());
+00138
+00139 uint32 nbEntries;
+00140 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a5">serial</a> (nbEntries);
+00141 ifile.<a class="code" href="classNLMISC_1_1IStream.html#d0">setVersionException</a> (<font class="keyword">true</font>, <font class="keyword">true</font>);
+00142 uint ver = T::getVersion ();
+00143 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a29">serialVersion</a>(ver);
+00144 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a7">serialCont</a> (container);
+00145 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a7">close</a> ();
+00146 }
+00147 <font class="keywordflow">catch</font> (<a class="code" href="classNLMISC_1_1Exception.html">NLMISC::Exception</a> &amp;e)
+00148 {
+00149 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Exception during reading the packed file, I'll reconstruct it (%s)"</font>, e.what());
+00150 <font class="comment">// clear the container because it can contains partially loaded sheet so we must clean it before continue</font>
+00151 container.clear ();
+00152 }
+00153 <a class="code" href="classNLMISC_1_1IStream.html#d0">NLMISC::CIFile::setVersionException</a>(olde, newe);
+00154
+00155 <font class="comment">// if we don't want to update packed sheet, we nothing more to do</font>
+00156 <font class="keywordflow">if</font> (!updatePackedSheet)
+00157 {
+00158 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"Don't update the packed sheet with real sheet"</font>);
+00159 <font class="keywordflow">return</font>;
+00160 }
+00161
+00162 <font class="comment">// build a vector of the sheetFilters sheet ids (ie: "item")</font>
+00163 std::vector&lt;NLMISC::CSheetId&gt; sheetIds;
+00164 std::vector&lt;std::string&gt; filenames;
+00165 <font class="keywordflow">for</font> (uint i = 0; i &lt; sheetFilters.size(); i++)
+00166 <a class="code" href="classNLMISC_1_1CSheetId.html#d3">NLMISC::CSheetId::buildIdVector</a>(sheetIds, filenames, sheetFilters[i]);
+00167
+00168 <font class="comment">// if there s no file, nothing to do</font>
+00169 <font class="keywordflow">if</font> (sheetIds.empty())
+00170 <font class="keywordflow">return</font>;
+00171
+00172 <font class="comment">// set up the current sheet in container to remove sheet that are in the container and not in the directory anymore</font>
+00173 std::map&lt;NLMISC::CSheetId, bool&gt; sheetToRemove;
+00174 <font class="keywordflow">for</font> (<font class="keyword">typename</font> std::map&lt;NLMISC::CSheetId, T&gt;::iterator it = container.begin(); it != container.end(); it++)
+00175 {
+00176 sheetToRemove.insert (make_pair((*it).first, <font class="keyword">true</font>));
+00177 }
+00178
+00179 <font class="comment">// check if we need to create a new .pitems or just read it</font>
+00180 uint32 packedFiledate = <a class="code" href="structNLMISC_1_1CFile.html#d10">NLMISC::CFile::getFileModificationDate</a>(packedFilenamePath);
+00181
+00182 <font class="keywordtype">bool</font> containerChanged = <font class="keyword">false</font>;
+00183
+00184 <a class="code" href="classNLGEORGES_1_1UFormLoader.html">NLGEORGES::UFormLoader</a> *formLoader = NULL;
+00185
+00186 std::vector&lt;uint&gt; NeededToRecompute;
+00187
+00188 <font class="keywordflow">for</font> (uint k = 0; k &lt; filenames.size(); k++)
+00189 {
+00190 std::string p = <a class="code" href="classNLMISC_1_1CPath.html#d6">NLMISC::CPath::lookup</a> (filenames[k], <font class="keyword">false</font>, <font class="keyword">false</font>);
+00191 <font class="keywordflow">if</font> (p.empty()) <font class="keywordflow">continue</font>;
+00192 uint32 d = <a class="code" href="structNLMISC_1_1CFile.html#d10">NLMISC::CFile::getFileModificationDate</a>(p);
+00193
+00194 <font class="comment">// no need to remove this sheet</font>
+00195 sheetToRemove[sheetIds[k]] = <font class="keyword">false</font>;
+00196
+00197 <font class="keywordflow">if</font>( d &gt; packedFiledate || container.find (sheetIds[k]) == container.end())
+00198 {
+00199 NeededToRecompute.push_back(k);
+00200 }
+00201 }
+00202
+00203 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%d sheets checked, %d need to be recomputed"</font>, filenames.size(), NeededToRecompute.size());
+00204
+00205 NLMISC::TTime last = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00206 NLMISC::TTime start = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00207
+00208 <a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr&lt;NLGEORGES::UForm&gt;</a> form;
+00209
+00210 <font class="keywordflow">for</font> (uint j = 0; j &lt; NeededToRecompute.size(); j++)
+00211 {
+00212 <font class="keywordflow">if</font>(<a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> () &gt; last + 5000)
+00213 {
+00214 last = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00215 <font class="keywordflow">if</font>(j&gt;0)
+00216 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%.0f%% completed (%d/%d), %d seconds remaining"</font>, (<font class="keywordtype">float</font>)j*100.0/NeededToRecompute.size(),j,NeededToRecompute.size(), (NeededToRecompute.size()-j)*(last-start)/j/1000);
+00217 }
+00218
+00219 <font class="comment">// create the georges loader if necessary</font>
+00220 <font class="keywordflow">if</font> (formLoader == NULL)
+00221 {
+00222 <a class="code" href="namespaceNLMISC.html#a9">WarningLog</a>-&gt;addNegativeFilter(<font class="stringliteral">"CFormLoader: Can't open the form file"</font>);
+00223 formLoader = <a class="code" href="classNLGEORGES_1_1UFormLoader.html#d0">NLGEORGES::UFormLoader::createLoader</a> ();
+00224 }
+00225
+00226 <font class="comment">// Load the form with given sheet id</font>
+00227 form = formLoader-&gt;<a class="code" href="classNLGEORGES_1_1UFormLoader.html#a0">loadForm</a> (sheetIds[NeededToRecompute[j]].toString().c_str ());
+00228 <font class="keywordflow">if</font> (form)
+00229 {
+00230 <font class="comment">/* if (packedFiledate &gt; 0)</font>
+00231 <font class="comment"> {</font>
+00232 <font class="comment"> if (d &gt; packedFiledate)</font>
+00233 <font class="comment"> nlinfo ("loadForm(): the sheet '%s' is newer than the packed one, I reload it", p.c_str());</font>
+00234 <font class="comment"> else</font>
+00235 <font class="comment"> nlinfo ("loadForm(): the sheet '%s' is not in the packed sheets, I load it", p.c_str());</font>
+00236 <font class="comment"> }*/</font>
+00237
+00238 <font class="comment">// add the new creature, it could be already loaded by the packed sheets but will be overwrite with the new one</font>
+00239 <font class="keyword">typedef</font> <font class="keyword">typename</font> std::map&lt;NLMISC::CSheetId, T&gt;::iterator TType1;
+00240 <font class="keyword">typedef</font> <font class="keyword">typename</font> std::pair&lt;TType1, bool&gt; TType2;
+00241 TType2 <a class="code" href="driver__opengl__extension__def_8h.html#a400">res</a> = container.insert(std::make_pair(sheetIds[NeededToRecompute[j]],T()));
+00242
+00243 (*<a class="code" href="driver__opengl__extension__def_8h.html#a400">res</a>.first).second.readGeorges (form, sheetIds[NeededToRecompute[j]]);
+00244 containerChanged = <font class="keyword">true</font>;
+00245 }
+00246 }
+00247
+00248 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%d seconds to recompute %d sheets"</font>, (uint32)(<a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a>()-start)/1000, NeededToRecompute.size());
+00249
+00250 <font class="comment">// free the georges loader if necessary</font>
+00251 <font class="keywordflow">if</font> (formLoader != NULL)
+00252 {
+00253 <a class="code" href="classNLGEORGES_1_1UFormLoader.html#d1">NLGEORGES::UFormLoader::releaseLoader</a> (formLoader);
+00254 <a class="code" href="namespaceNLMISC.html#a9">WarningLog</a>-&gt;removeFilter (<font class="stringliteral">"CFormLoader: Can't open the form file"</font>);
+00255 }
+00256
+00257 <font class="comment">// we have now to remove sheet that are in the container and not exist anymore in the sheet directories</font>
+00258 <font class="keywordflow">for</font> (std::map&lt;NLMISC::CSheetId, bool&gt;::iterator it2 = sheetToRemove.begin(); it2 != sheetToRemove.end(); it2++)
+00259 {
+00260 <font class="keywordflow">if</font>((*it2).second)
+00261 {
+00262 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"the sheet '%s' is not in the directory, remove it from container"</font>, (*it2).first.toString().c_str());
+00263 container.erase((*it2).first);
+00264 containerChanged = <font class="keyword">true</font>;
+00265 }
+00266 }
+00267
+00268 <font class="comment">// now, save the new container in the packedfile</font>
+00269 <font class="keywordflow">try</font>
+00270 {
+00271 <font class="keywordflow">if</font>(containerChanged)
+00272 {
+00273 <a class="code" href="classNLMISC_1_1COFile.html">NLMISC::COFile</a> ofile;
+00274 ofile.<a class="code" href="classNLMISC_1_1COFile.html#a3">open</a>(packedFilenamePath);
+00275 uint ver = T::getVersion ();
+00276 uint32 nbEntries = sheetIds.size();
+00277 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a5">serial</a> (nbEntries);
+00278 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a29">serialVersion</a>(ver);
+00279 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a7">serialCont</a>(container);
+00280 ofile.<a class="code" href="classNLMISC_1_1COFile.html#a4">close</a> ();
+00281 }
+00282 }
+00283 <font class="keywordflow">catch</font> (<a class="code" href="classNLMISC_1_1Exception.html">NLMISC::Exception</a> &amp;e)
+00284 {
+00285 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Exception during saving the packed file, it will be recreated next launch (%s)"</font>, e.what());
+00286 }
+00287
+00288 <font class="comment">// housekeeping</font>
+00289 sheetIds.clear ();
+00290 filenames.clear ();
+00291 }
+00292
+00293
+00299 <font class="keyword">template</font> &lt;<font class="keyword">class</font> T&gt;
+<a name="l00300"></a><a class="code" href="load__form_8h.html#a2">00300</a> <font class="keywordtype">void</font> <a class="code" href="load__form_8h.html#a3">loadForm</a> (<font class="keyword">const</font> std::string &amp;sheetFilter, <font class="keyword">const</font> std::string &amp;packedFilename, std::map&lt;std::string, T&gt; &amp;container, <font class="keywordtype">bool</font> updatePackedSheet=<font class="keyword">true</font>)
+00301 {
+00302 std::vector&lt;std::string&gt; vs;
+00303 vs.push_back(sheetFilter);
+00304 <a class="code" href="load__form_8h.html#a3">loadForm</a>(vs, packedFilename, container, updatePackedSheet);
+00305 }
+00306
+00307
+00313 <font class="keyword">template</font> &lt;<font class="keyword">class</font> T&gt;
+<a name="l00314"></a><a class="code" href="load__form_8h.html#a3">00314</a> <font class="keywordtype">void</font> <a class="code" href="load__form_8h.html#a3">loadForm</a> (<font class="keyword">const</font> std::vector&lt;std::string&gt; &amp;sheetFilters, <font class="keyword">const</font> std::string &amp;packedFilename, std::map&lt;std::string, T&gt; &amp;container, <font class="keywordtype">bool</font> updatePackedSheet=<font class="keyword">true</font>)
+00315 {
+00316 <font class="comment">// check the extension (i know that file like "foo.packed_sheetsbar" will be accepted but this check is enough...)</font>
+00317 <a class="code" href="debug_8h.html#a6">nlassert</a> (packedFilename.find (<font class="stringliteral">".packed_sheets"</font>) != std::string::npos);
+00318
+00319 std::string packedFilenamePath = <a class="code" href="classNLMISC_1_1CPath.html#d6">NLMISC::CPath::lookup</a>(packedFilename, <font class="keyword">false</font>);
+00320 <font class="keywordflow">if</font> (packedFilenamePath.empty())
+00321 {
+00322 packedFilenamePath = packedFilename;
+00323 }
+00324
+00325 <font class="comment">// make sure the CSheetId singleton has been properly initialised</font>
+00326 <font class="comment">// NLMISC::CSheetId::init(updatePackedSheet);</font>
+00327
+00328 <font class="keywordtype">bool</font> olde, newe;
+00329 <a class="code" href="classNLMISC_1_1IStream.html#d1">NLMISC::CIFile::getVersionException</a>(olde, newe);
+00330 <font class="comment">// load the packed sheet if exists</font>
+00331 <font class="keywordflow">try</font>
+00332 {
+00333 <a class="code" href="classNLMISC_1_1CIFile.html">NLMISC::CIFile</a> ifile;
+00334 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a4">setCacheFileOnOpen</a>(<font class="keyword">true</font>);
+00335 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a3">open</a> (packedFilenamePath);
+00336 <font class="comment">// an exception will be launch if the file is not the good version or if the file is not found</font>
+00337
+00338 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Loading packed file '%s'"</font>, packedFilename.c_str());
+00339
+00340 uint32 nbEntries;
+00341 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a5">serial</a> (nbEntries);
+00342 ifile.<a class="code" href="classNLMISC_1_1IStream.html#d0">setVersionException</a> (<font class="keyword">true</font>, <font class="keyword">true</font>);
+00343 uint ver = T::getVersion ();
+00344 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a29">serialVersion</a>(ver);
+00345 ifile.<a class="code" href="classNLMISC_1_1IStream.html#a7">serialCont</a> (container);
+00346 ifile.<a class="code" href="classNLMISC_1_1CIFile.html#a7">close</a> ();
+00347 }
+00348 <font class="keywordflow">catch</font> (<a class="code" href="classNLMISC_1_1Exception.html">NLMISC::Exception</a> &amp;e)
+00349 {
+00350 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Exception during reading the packed file, I'll reconstruct it (%s)"</font>, e.what());
+00351 <font class="comment">// clear the container because it can contains partially loaded sheet so we must clean it before continue</font>
+00352 container.clear ();
+00353 }
+00354 <a class="code" href="classNLMISC_1_1IStream.html#d0">NLMISC::CIFile::setVersionException</a>(olde, newe);
+00355
+00356 <font class="comment">// if we don't want to update packed sheet, we nothing more to do</font>
+00357 <font class="keywordflow">if</font> (!updatePackedSheet)
+00358 {
+00359 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"Don't update the packed sheet with real sheet"</font>);
+00360 <font class="keywordflow">return</font>;
+00361 }
+00362
+00363 <font class="comment">// build a vector of the sheetFilters sheet ids (ie: "item")</font>
+00364 <font class="comment">// std::vector&lt;std::string&gt; sheetNames;</font>
+00365 std::vector&lt;std::string&gt; sheetNames;
+00366 <font class="comment">// for (uint i = 0; i &lt; sheetFilters.size(); i++)</font>
+00367 <font class="comment">// NLMISC::CSheetId::buildIdVector(sheetIds, filenames, sheetFilters[i]);</font>
+00368 {
+00369 std::vector&lt;std::string&gt;::const_iterator first(sheetFilters.begin()), last(sheetFilters.end());
+00370 <font class="keywordflow">for</font> (; first != last; ++first)
+00371 <a class="code" href="classNLMISC_1_1CPath.html#d16">NLMISC::CPath::getFileList</a>(*first, sheetNames);
+00372
+00373 }
+00374
+00375 <font class="comment">// if there s no file, nothing to do</font>
+00376 <font class="keywordflow">if</font> (sheetNames.empty())
+00377 <font class="keywordflow">return</font>;
+00378
+00379 <font class="comment">// set up the current sheet in container to remove sheet that are in the container and not in the directory anymore</font>
+00380 std::map&lt;std::string, bool&gt; sheetToRemove;
+00381 <font class="keywordflow">for</font> (<font class="keyword">typename</font> std::map&lt;std::string, T&gt;::iterator it = container.begin(); it != container.end(); ++it)
+00382 {
+00383 sheetToRemove.insert (make_pair((*it).first, <font class="keyword">true</font>));
+00384 }
+00385
+00386 <font class="comment">// check if we need to create a new .pitems or just read it</font>
+00387 uint32 packedFiledate = <a class="code" href="structNLMISC_1_1CFile.html#d10">NLMISC::CFile::getFileModificationDate</a>(packedFilenamePath);
+00388
+00389 <font class="keywordtype">bool</font> containerChanged = <font class="keyword">false</font>;
+00390
+00391 <a class="code" href="classNLGEORGES_1_1UFormLoader.html">NLGEORGES::UFormLoader</a> *formLoader = NULL;
+00392
+00393 std::vector&lt;uint&gt; NeededToRecompute;
+00394
+00395 <font class="keywordflow">for</font> (uint k = 0; k &lt; sheetNames.size(); k++)
+00396 {
+00397 std::string p = <a class="code" href="classNLMISC_1_1CPath.html#d6">NLMISC::CPath::lookup</a> (sheetNames[k], <font class="keyword">false</font>, <font class="keyword">false</font>);
+00398 <font class="keywordflow">if</font> (p.empty()) <font class="keywordflow">continue</font>;
+00399 uint32 d = <a class="code" href="structNLMISC_1_1CFile.html#d10">NLMISC::CFile::getFileModificationDate</a>(p);
+00400
+00401 <font class="comment">// no need to remove this sheet</font>
+00402 sheetToRemove[sheetNames[k]] = <font class="keyword">false</font>;
+00403
+00404 <font class="keywordflow">if</font>( d &gt; packedFiledate || container.find (sheetNames[k]) == container.end())
+00405 {
+00406 NeededToRecompute.push_back(k);
+00407 }
+00408 }
+00409
+00410 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%d sheets checked, %d need to be recomputed"</font>, sheetNames.size(), NeededToRecompute.size());
+00411
+00412 NLMISC::TTime lastTime = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00413 NLMISC::TTime start = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00414
+00415 <a class="code" href="classNLMISC_1_1CSmartPtr.html">NLMISC::CSmartPtr&lt;NLGEORGES::UForm&gt;</a> form;
+00416
+00417 <font class="keywordflow">for</font> (uint j = 0; j &lt; NeededToRecompute.size(); j++)
+00418 {
+00419 <font class="keywordflow">if</font>(<a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> () &gt; lastTime + 5000)
+00420 {
+00421 lastTime = <a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a> ();
+00422 <font class="keywordflow">if</font>(j&gt;0)
+00423 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%.0f%% completed (%d/%d), %d seconds remaining"</font>, (<font class="keywordtype">float</font>)j*100.0/NeededToRecompute.size(),j,NeededToRecompute.size(), (NeededToRecompute.size()-j)*(lastTime-start)/j/1000);
+00424 }
+00425
+00426 <font class="comment">// create the georges loader if necessary</font>
+00427 <font class="keywordflow">if</font> (formLoader == NULL)
+00428 {
+00429 <a class="code" href="namespaceNLMISC.html#a9">WarningLog</a>-&gt;addNegativeFilter(<font class="stringliteral">"CFormLoader: Can't open the form file"</font>);
+00430 formLoader = <a class="code" href="classNLGEORGES_1_1UFormLoader.html#d0">NLGEORGES::UFormLoader::createLoader</a> ();
+00431 }
+00432
+00433 <font class="comment">// Load the form with given sheet id</font>
+00434 form = formLoader-&gt;<a class="code" href="classNLGEORGES_1_1UFormLoader.html#a0">loadForm</a> (sheetNames[NeededToRecompute[j]].c_str ());
+00435 <font class="keywordflow">if</font> (form)
+00436 {
+00437 <font class="comment">/* if (packedFiledate &gt; 0)</font>
+00438 <font class="comment"> {</font>
+00439 <font class="comment"> if (d &gt; packedFiledate)</font>
+00440 <font class="comment"> nlinfo ("loadForm(): the sheet '%s' is newer than the packed one, I reload it", p.c_str());</font>
+00441 <font class="comment"> else</font>
+00442 <font class="comment"> nlinfo ("loadForm(): the sheet '%s' is not in the packed sheets, I load it", p.c_str());</font>
+00443 <font class="comment"> }*/</font>
+00444
+00445 <font class="comment">// add the new creature, it could be already loaded by the packed sheets but will be overwrite with the new one</font>
+00446 <font class="keyword">typedef</font> <font class="keyword">typename</font> std::map&lt;std::string, T&gt;::iterator TType1;
+00447 <font class="keyword">typedef</font> <font class="keyword">typename</font> std::pair&lt;TType1, bool&gt; TType2;
+00448 TType2 <a class="code" href="driver__opengl__extension__def_8h.html#a400">res</a> = container.insert(std::make_pair(sheetNames[NeededToRecompute[j]],T()));
+00449
+00450 (*<a class="code" href="driver__opengl__extension__def_8h.html#a400">res</a>.first).second.readGeorges (form, sheetNames[NeededToRecompute[j]]);
+00451 containerChanged = <font class="keyword">true</font>;
+00452 }
+00453 }
+00454
+00455 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"%d seconds to recompute %d sheets"</font>, (uint32)(<a class="code" href="classNLMISC_1_1CTime.html#d1">NLMISC::CTime::getLocalTime</a>()-start)/1000, NeededToRecompute.size());
+00456
+00457 <font class="comment">// free the georges loader if necessary</font>
+00458 <font class="keywordflow">if</font> (formLoader != NULL)
+00459 {
+00460 <a class="code" href="classNLGEORGES_1_1UFormLoader.html#d1">NLGEORGES::UFormLoader::releaseLoader</a> (formLoader);
+00461 <a class="code" href="namespaceNLMISC.html#a9">WarningLog</a>-&gt;removeFilter (<font class="stringliteral">"CFormLoader: Can't open the form file"</font>);
+00462 }
+00463
+00464 <font class="comment">// we have now to remove sheet that are in the container and not exist anymore in the sheet directories</font>
+00465 <font class="keywordflow">for</font> (std::map&lt;std::string, bool&gt;::iterator it2 = sheetToRemove.begin(); it2 != sheetToRemove.end(); it2++)
+00466 {
+00467 <font class="keywordflow">if</font>((*it2).second)
+00468 {
+00469 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"the sheet '%s' is not in the directory, remove it from container"</font>, (*it2).first.c_str());
+00470 <font class="comment">// informe the contained object that it is no more needed.</font>
+00471 container.find((*it2).first)-&gt;second.removed();
+00472 container.erase((*it2).first);
+00473 containerChanged = <font class="keyword">true</font>;
+00474 }
+00475 }
+00476
+00477 <font class="comment">// now, save the new container in the packedfile</font>
+00478 <font class="keywordflow">try</font>
+00479 {
+00480 <font class="keywordflow">if</font>(containerChanged)
+00481 {
+00482 <a class="code" href="classNLMISC_1_1COFile.html">NLMISC::COFile</a> ofile;
+00483 ofile.<a class="code" href="classNLMISC_1_1COFile.html#a3">open</a>(packedFilenamePath);
+00484 uint ver = T::getVersion ();
+00485 uint32 nbEntries = sheetNames.size();
+00486 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a5">serial</a> (nbEntries);
+00487 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a29">serialVersion</a>(ver);
+00488 ofile.<a class="code" href="classNLMISC_1_1IStream.html#a7">serialCont</a>(container);
+00489 ofile.<a class="code" href="classNLMISC_1_1COFile.html#a4">close</a> ();
+00490 }
+00491 }
+00492 <font class="keywordflow">catch</font> (<a class="code" href="classNLMISC_1_1Exception.html">NLMISC::Exception</a> &amp;e)
+00493 {
+00494 <a class="code" href="debug_8h.html#a1">nlinfo</a> (<font class="stringliteral">"loadForm(): Exception during saving the packed file, it will be recreated next launch (%s)"</font>, e.what());
+00495 }
+00496
+00497 <font class="comment">// housekeeping</font>
+00498 <font class="comment">// sheetIds.clear ();</font>
+00499 sheetNames.clear ();
+00500 }
+00501 <font class="preprocessor">#endif // NL_LOAD_FORM_H</font>
+00502 <font class="preprocessor"></font>
+00503 <font class="comment">/* End of load_form.h */</font>
+</pre></div>
+
+<!-- footer -->
+<BR><FONT Size=+5>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </FONT>
+</TD>
+<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD>
+</TR>
+</TABLE>
+</BODY>
+</HTML>