diff options
Diffstat (limited to '')
-rw-r--r-- | docs/doxygen/nel/file_8cpp-source.html | 592 |
1 files changed, 592 insertions, 0 deletions
diff --git a/docs/doxygen/nel/file_8cpp-source.html b/docs/doxygen/nel/file_8cpp-source.html new file mode 100644 index 00000000..6f5e64fd --- /dev/null +++ b/docs/doxygen/nel/file_8cpp-source.html @@ -0,0 +1,592 @@ +<!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> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </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> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </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> + + +<!-- 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> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <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> </center> +<hr><h1>file.cpp</h1><a href="file_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 +00007 <font class="comment">/* Copyright, 2000 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">#include "<a class="code" href="stdmisc_8h.html">stdmisc.h</a>"</font> +00027 +00028 <font class="preprocessor">#include "<a class="code" href="file_8h.html">nel/misc/file.h</a>"</font> +00029 <font class="preprocessor">#include "<a class="code" href="debug_8h.html">nel/misc/debug.h</a>"</font> +00030 <font class="preprocessor">#include "<a class="code" href="big__file_8h.html">nel/misc/big_file.h</a>"</font> +00031 +00032 <font class="keyword">using</font> <font class="keyword">namespace </font>std; +00033 +00034 <font class="keyword">namespace </font>NLMISC +00035 { +00036 +<a name="l00037"></a><a class="code" href="classNLMISC_1_1CIFile.html#r0">00037</a> uint32 CIFile::_NbBytesSerialized = 0; +<a name="l00038"></a><a class="code" href="classNLMISC_1_1CIFile.html#r1">00038</a> uint32 CIFile::_NbBytesLoaded = 0; +00039 +00040 <font class="comment">// ======================================================================================================</font> +<a name="l00041"></a><a class="code" href="classNLMISC_1_1CIFile.html#a0">00041</a> CIFile::CIFile() : IStream(true) +00042 { +00043 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = NULL; +00044 <a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> = NULL; +00045 <a class="code" href="classNLMISC_1_1CIFile.html#o6">_ReadPos</a> = 0; +00046 <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a> = 0; +00047 <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a> = 0; +00048 <a class="code" href="classNLMISC_1_1CIFile.html#o9">_IsInBigFile</a> = <font class="keyword">false</font>; +00049 <a class="code" href="classNLMISC_1_1CIFile.html#o3">_CacheFileOnOpen</a> = <font class="keyword">false</font>; +00050 <a class="code" href="classNLMISC_1_1CIFile.html#o2">_IsAsyncLoading</a> = <font class="keyword">false</font>; +00051 <a class="code" href="classNLMISC_1_1CIFile.html#o4">_AllowBNPCacheFileOnOpen</a>= <font class="keyword">true</font>; +00052 } +00053 +00054 <font class="comment">// ======================================================================================================</font> +<a name="l00055"></a><a class="code" href="classNLMISC_1_1CIFile.html#a1">00055</a> CIFile::CIFile(<font class="keyword">const</font> std::string &path, <font class="keywordtype">bool</font> text) : IStream(true) +00056 { +00057 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>=NULL; +00058 <a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> = NULL; +00059 <a class="code" href="classNLMISC_1_1CIFile.html#o6">_ReadPos</a> = 0; +00060 <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a> = 0; +00061 <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a> = 0; +00062 <a class="code" href="classNLMISC_1_1CIFile.html#o9">_IsInBigFile</a> = <font class="keyword">false</font>; +00063 <a class="code" href="classNLMISC_1_1CIFile.html#o3">_CacheFileOnOpen</a> = <font class="keyword">false</font>; +00064 <a class="code" href="classNLMISC_1_1CIFile.html#o2">_IsAsyncLoading</a> = <font class="keyword">false</font>; +00065 <a class="code" href="classNLMISC_1_1CIFile.html#o4">_AllowBNPCacheFileOnOpen</a>= <font class="keyword">true</font>; +00066 <a class="code" href="classNLMISC_1_1CIFile.html#a3">open</a>(path, text); +00067 } +00068 +00069 <font class="comment">// ======================================================================================================</font> +<a name="l00070"></a><a class="code" href="classNLMISC_1_1CIFile.html#a2">00070</a> CIFile::~CIFile() +00071 { +00072 <a class="code" href="classNLMISC_1_1CIFile.html#a7">close</a>(); +00073 } +00074 +00075 +00076 <font class="comment">// ======================================================================================================</font> +<a name="l00077"></a><a class="code" href="classNLMISC_1_1CIFile.html#c0">00077</a> <font class="keywordtype">void</font> CIFile::loadIntoCache() +00078 { +00079 <font class="keyword">const</font> uint32 READPACKETSIZE = 64 * 1024; +00080 <font class="keyword">const</font> uint32 INTERPACKETSLEEP = 5; +00081 +00082 <a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> = <font class="keyword">new</font> uint8[<a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>]; +00083 <font class="keywordflow">if</font>(!<a class="code" href="classNLMISC_1_1CIFile.html#o2">_IsAsyncLoading</a>) +00084 { +00085 fread (<a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>, 1, <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00086 } +00087 <font class="keywordflow">else</font> +00088 { +00089 uint <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>= 0; +00090 <font class="keywordflow">while</font>(<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a><<a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>) +00091 { +00092 <font class="keywordflow">if</font>( <a class="code" href="classNLMISC_1_1CIFile.html#r1">_NbBytesLoaded</a> + (<a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>-<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>) > READPACKETSIZE ) +00093 { +00094 sint n= READPACKETSIZE-<a class="code" href="classNLMISC_1_1CIFile.html#r1">_NbBytesLoaded</a>; +00095 n= max(n, 1); +00096 fread (<a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a>+<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>, n, 1, <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00097 <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>+= n; +00098 +00099 <a class="code" href="namespaceNLMISC.html#a236">nlSleep</a> (INTERPACKETSLEEP); +00100 <a class="code" href="classNLMISC_1_1CIFile.html#r1">_NbBytesLoaded</a>= 0; +00101 } +00102 <font class="keywordflow">else</font> +00103 { +00104 uint n= <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>-<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>; +00105 fread (<a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a>+<a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>, n, 1, <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00106 <a class="code" href="classNLMISC_1_1CIFile.html#r1">_NbBytesLoaded</a>+= n; +00107 <a class="code" href="driver__opengl__extension__def_8h.html#a358">index</a>+= n; +00108 } +00109 } +00110 } +00111 } +00112 +00113 +00114 <font class="comment">// ======================================================================================================</font> +<a name="l00115"></a><a class="code" href="classNLMISC_1_1CIFile.html#a3">00115</a> <font class="keywordtype">bool</font> CIFile::open(<font class="keyword">const</font> std::string &path, <font class="keywordtype">bool</font> text) +00116 { +00117 <a class="code" href="classNLMISC_1_1CIFile.html#a7">close</a>(); +00118 +00119 <font class="comment">// can't open empty filename</font> +00120 <font class="keywordflow">if</font>(path.empty ()) +00121 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00122 +00123 <font class="keywordtype">char</font> mode[3]; +00124 mode[0] = <font class="charliteral">'r'</font>; +00125 mode[1] = (text)?<font class="charliteral">'\0'</font>:<font class="charliteral">'b'</font>; +00126 mode[2] = <font class="charliteral">'\0'</font>; +00127 +00128 <a class="code" href="classNLMISC_1_1CIFile.html#o1">_FileName</a> = path; +00129 <a class="code" href="classNLMISC_1_1CIFile.html#o6">_ReadPos</a> = 0; +00130 +00131 <font class="comment">// Bigfile access requested ?</font> +00132 <font class="keywordflow">if</font> (path.find(<font class="charliteral">'@'</font>) != string::npos) +00133 { +00134 <a class="code" href="classNLMISC_1_1CIFile.html#o9">_IsInBigFile</a> = <font class="keyword">true</font>; +00135 <font class="keywordflow">if</font>(_AllowBNPCacheFileOnOpen) +00136 { +00137 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = CBigFile::getInstance().getFile (path, <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o3">_CacheFileOnOpen</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o8">_AlwaysOpened</a>); +00138 } +00139 <font class="keywordflow">else</font> +00140 { +00141 <font class="keywordtype">bool</font> dummy; +00142 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = CBigFile::getInstance().getFile (path, <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a>, dummy, <a class="code" href="classNLMISC_1_1CIFile.html#o8">_AlwaysOpened</a>); +00143 } +00144 <font class="keywordflow">if</font>(<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> != NULL) +00145 { +00146 <font class="comment">// Start to load the bigfile at the file offset.</font> +00147 fseek (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>, <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a>, SEEK_SET); +00148 +00149 <font class="comment">// Load into cache ?</font> +00150 <font class="keywordflow">if</font> (_CacheFileOnOpen) +00151 { +00152 <font class="comment">// load file in the cache</font> +00153 <a class="code" href="classNLMISC_1_1CIFile.html#c0">loadIntoCache</a>(); +00154 +00155 <font class="keywordflow">if</font> (!<a class="code" href="classNLMISC_1_1CIFile.html#o8">_AlwaysOpened</a>) +00156 { +00157 fclose (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00158 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = NULL; +00159 } +00160 <font class="keywordflow">return</font> (<a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> != NULL); +00161 } +00162 } +00163 } +00164 <font class="keywordflow">else</font> +00165 { +00166 <a class="code" href="classNLMISC_1_1CIFile.html#o9">_IsInBigFile</a> = <font class="keyword">false</font>; +00167 <a class="code" href="classNLMISC_1_1CIFile.html#o10">_BigFileOffset</a> = 0; +00168 <a class="code" href="classNLMISC_1_1CIFile.html#o8">_AlwaysOpened</a> = <font class="keyword">false</font>; +00169 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = fopen (path.c_str(), mode); +00170 <font class="keywordflow">if</font> (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> != NULL) +00171 { +00172 fseek (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>, 0, SEEK_END); +00173 <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a> = ftell(<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00174 fseek (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>, 0, SEEK_SET); +00175 } +00176 <font class="keywordflow">else</font> +00177 { +00178 <a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a> = 0; +00179 } +00180 +00181 <font class="keywordflow">if</font> ((_CacheFileOnOpen) && (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> != NULL)) +00182 { +00183 <font class="comment">// load file in the cache</font> +00184 <a class="code" href="classNLMISC_1_1CIFile.html#c0">loadIntoCache</a>(); +00185 +00186 fclose (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00187 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = NULL; +00188 <font class="keywordflow">return</font> (<a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> != NULL); +00189 } +00190 } +00191 +00192 <font class="keywordflow">return</font> (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> != NULL); +00193 } +00194 +00195 <font class="comment">// ======================================================================================================</font> +<a name="l00196"></a><a class="code" href="classNLMISC_1_1CIFile.html#a4">00196</a> <font class="keywordtype">void</font> CIFile::setCacheFileOnOpen (<font class="keywordtype">bool</font> newState) +00197 { +00198 <a class="code" href="classNLMISC_1_1CIFile.html#o3">_CacheFileOnOpen</a> = newState; +00199 } +00200 +00201 <font class="comment">// ======================================================================================================</font> +<a name="l00202"></a><a class="code" href="classNLMISC_1_1CIFile.html#a6">00202</a> <font class="keywordtype">void</font> CIFile::setAsyncLoading (<font class="keywordtype">bool</font> newState) +00203 { +00204 <a class="code" href="classNLMISC_1_1CIFile.html#o2">_IsAsyncLoading</a> = <font class="keyword">true</font>; +00205 } +00206 +00207 +00208 <font class="comment">// ======================================================================================================</font> +<a name="l00209"></a><a class="code" href="classNLMISC_1_1CIFile.html#a7">00209</a> <font class="keywordtype">void</font> CIFile::close() +00210 { +00211 <font class="keywordflow">if</font> (_CacheFileOnOpen) +00212 { +00213 <font class="keywordflow">if</font> (_Cache) +00214 { +00215 <font class="keyword">delete</font> <a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a>; +00216 <a class="code" href="classNLMISC_1_1CIFile.html#o5">_Cache</a> = NULL; +00217 } +00218 } +00219 <font class="keywordflow">else</font> +00220 { +00221 <font class="keywordflow">if</font> (_IsInBigFile) +00222 { +00223 <font class="keywordflow">if</font> (!<a class="code" href="classNLMISC_1_1CIFile.html#o8">_AlwaysOpened</a>) +00224 { +00225 <font class="keywordflow">if</font> (_F) +00226 { +00227 fclose (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00228 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = NULL; +00229 } +00230 } +00231 } +00232 <font class="keywordflow">else</font> +00233 { +00234 <font class="keywordflow">if</font> (_F) +00235 { +00236 fclose (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00237 <a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a> = NULL; +00238 } +00239 } +00240 } +00241 <a class="code" href="classNLMISC_1_1IStream.html#b7">resetPtrTable</a>(); +00242 } +00243 +00244 <font class="comment">// ======================================================================================================</font> +<a name="l00245"></a><a class="code" href="classNLMISC_1_1CIFile.html#a8">00245</a> <font class="keywordtype">void</font> CIFile::flush() +00246 { +00247 <font class="keywordflow">if</font> (_CacheFileOnOpen) +00248 { +00249 } +00250 <font class="keywordflow">else</font> +00251 { +00252 <font class="keywordflow">if</font> (_F) +00253 { +00254 fflush (<a class="code" href="classNLMISC_1_1CIFile.html#o0">_F</a>); +00255 } +00256 } +00257 } +00258 +00259 <font class="comment">// ======================================================================================================</font> +<a name="l00260"></a><a class="code" href="classNLMISC_1_1CIFile.html#a12">00260</a> <font class="keywordtype">void</font> CIFile::getline (<font class="keywordtype">char</font> *buffer, uint32 bufferSize) +00261 { +00262 <font class="keywordflow">if</font> (bufferSize == 0) +00263 <font class="keywordflow">return</font>; +00264 +00265 uint read = 0; +00266 <font class="keywordflow">while</font> (true) +00267 { +00268 <font class="keywordflow">if</font> (read == bufferSize -1) +00269 { +00270 *buffer = <font class="charliteral">'\0'</font>; +00271 <font class="keywordflow">return</font>; +00272 } +00273 +00274 <font class="keywordflow">try</font> +00275 { +00276 <font class="comment">// read one byte</font> +00277 <a class="code" href="classNLMISC_1_1CIFile.html#a15">serialBuffer</a> ((uint8 *)buffer, 1); +00278 } +00279 <font class="keywordflow">catch</font> (EFile &) +00280 { +00281 *buffer = <font class="charliteral">'\0'</font>; +00282 <font class="keywordflow">return</font>; +00283 } +00284 +00285 <font class="keywordflow">if</font> (*buffer == <font class="charliteral">'\n'</font>) +00286 { +00287 *buffer = <font class="charliteral">'\0'</font>; +00288 <font class="keywordflow">return</font>; +00289 } +00290 +00291 <font class="comment">// skip '\r' char</font> +00292 <font class="keywordflow">if</font> (*buffer != <font class="charliteral">'\r'</font>) +00293 buffer++; +00294 } +00295 +00296 } +00297 +00298 +00299 <font class="comment">// ======================================================================================================</font> +<a name="l00300"></a><a class="code" href="classNLMISC_1_1CIFile.html#a14">00300</a> <font class="keywordtype">bool</font> CIFile::eof () +00301 { +00302 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1CIFile.html#o6">_ReadPos</a> >= (sint32)<a class="code" href="classNLMISC_1_1CIFile.html#o7">_FileSize</a>; +00303 } +00304 +00305 <font class="comment">// ======================================================================================================</font> +<a name="l00306"></a><a class="code" href="classNLMISC_1_1CIFile.html#a15">00306</a> <font class="keywordtype">void</font> CIFile::serialBuffer(uint8 *buf, uint len) <font class="keywordflow">throw</font>(EReadError) +00307 { +00308 <font class="comment">// Check the read pos</font> +00309 <font class="keywordflow">if</font> ((_ReadPos < 0) || ((_ReadPos+len) > _FileSize)) +00310 <font class="keywordflow">throw</font> EReadError (_FileName); +00311 <font class="keywordflow">if</font> ((_CacheFileOnOpen) && (_Cache == NULL)) +00312 <font class="keywordflow">throw</font> EFileNotOpened (_FileName); +00313 <font class="keywordflow">if</font> ((!_CacheFileOnOpen) && (_F == NULL)) +00314 <font class="keywordflow">throw</font> EFileNotOpened (_FileName); +00315 +00316 <font class="keywordflow">if</font> (_IsAsyncLoading) +00317 { +00318 _NbBytesSerialized += len; +00319 <font class="keywordflow">if</font> (_NbBytesSerialized > 64 * 1024) +00320 { +00321 <a class="code" href="namespaceNLMISC.html#a236">nlSleep</a> (5); +00322 _NbBytesSerialized = 0; +00323 } +00324 } +00325 +00326 <font class="keywordflow">if</font> (_CacheFileOnOpen) +00327 { +00328 memcpy (buf, _Cache + _ReadPos, len); +00329 _ReadPos += len; +00330 } +00331 <font class="keywordflow">else</font> +00332 { +00333 <font class="keywordflow">if</font> (fread(buf, 1, len, _F) < len) +00334 <font class="keywordflow">throw</font> EReadError(_FileName); +00335 _ReadPos += len; +00336 } +00337 } +00338 +00339 <font class="comment">// ======================================================================================================</font> +<a name="l00340"></a><a class="code" href="classNLMISC_1_1CIFile.html#b0">00340</a> <font class="keywordtype">void</font> CIFile::serialBit(<font class="keywordtype">bool</font> &bit) <font class="keywordflow">throw</font>(EReadError) +00341 { +00342 <font class="comment">// Simple for now.</font> +00343 uint8 <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=bit; +00344 serialBuffer(&<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>, 1); +00345 bit=(<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>!=0); +00346 } +00347 +00348 <font class="comment">// ======================================================================================================</font> +<a name="l00349"></a><a class="code" href="classNLMISC_1_1CIFile.html#a9">00349</a> <font class="keywordtype">bool</font> CIFile::seek (sint32 <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>, IStream::TSeekOrigin origin) <font class="keywordflow">throw</font>(EStream) +00350 { +00351 <font class="keywordflow">if</font> ((_CacheFileOnOpen) && (_Cache == NULL)) +00352 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00353 <font class="keywordflow">if</font> ((!_CacheFileOnOpen) && (_F == NULL)) +00354 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00355 +00356 <font class="keywordflow">switch</font> (origin) +00357 { +00358 <font class="keywordflow">case</font> IStream::begin: +00359 _ReadPos = <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>; +00360 <font class="keywordflow">break</font>; +00361 <font class="keywordflow">case</font> IStream::current: +00362 _ReadPos = _ReadPos + <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>; +00363 <font class="keywordflow">break</font>; +00364 <font class="keywordflow">case</font> IStream::end: +00365 _ReadPos = _FileSize + <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>; +00366 <font class="keywordflow">break</font>; +00367 <font class="keywordflow">default</font>: +00368 <a class="code" href="debug_8h.html#a12">nlstop</a>; +00369 } +00370 +00371 <font class="keywordflow">if</font> (_CacheFileOnOpen) +00372 <font class="keywordflow">return</font> <font class="keyword">true</font>; +00373 +00374 <font class="comment">// seek in the file. NB: if not in bigfile, _BigFileOffset==0.</font> +00375 <font class="keywordflow">if</font> (fseek(_F, _BigFileOffset+_ReadPos, SEEK_SET) != 0) +00376 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00377 <font class="keywordflow">return</font> <font class="keyword">true</font>; +00378 } +00379 +00380 <font class="comment">// ======================================================================================================</font> +<a name="l00381"></a><a class="code" href="classNLMISC_1_1CIFile.html#a10">00381</a> sint32 CIFile::getPos () <font class="keywordflow">throw</font>(EStream) +00382 { +00383 <font class="keywordflow">return</font> _ReadPos; +00384 } +00385 +00386 +00387 <font class="comment">// ======================================================================================================</font> +<a name="l00388"></a><a class="code" href="classNLMISC_1_1CIFile.html#a11">00388</a> std::string CIFile::getStreamName()<font class="keyword"> const</font> +00389 <font class="keyword"></font>{ +00390 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1CIFile.html#o1">_FileName</a>; +00391 } +00392 +00393 +00394 <font class="comment">// ======================================================================================================</font> +<a name="l00395"></a><a class="code" href="classNLMISC_1_1CIFile.html#a5">00395</a> <font class="keywordtype">void</font> CIFile::allowBNPCacheFileOnOpen(<font class="keywordtype">bool</font> newState) +00396 { +00397 <a class="code" href="classNLMISC_1_1CIFile.html#o4">_AllowBNPCacheFileOnOpen</a>= newState; +00398 } +00399 +00400 +00401 <font class="comment">// ======================================================================================================</font> +00402 <font class="comment">// ======================================================================================================</font> +00403 <font class="comment">// ======================================================================================================</font> +00404 +00405 +00406 <font class="comment">// ======================================================================================================</font> +<a name="l00407"></a><a class="code" href="classNLMISC_1_1COFile.html#a0">00407</a> COFile::COFile() : IStream(false) +00408 { +00409 <a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>=NULL; +00410 <a class="code" href="classNLMISC_1_1COFile.html#o1">_FileName</a> = <font class="stringliteral">""</font>; +00411 } +00412 +00413 <font class="comment">// ======================================================================================================</font> +<a name="l00414"></a><a class="code" href="classNLMISC_1_1COFile.html#a1">00414</a> COFile::COFile(<font class="keyword">const</font> std::string &path, <font class="keywordtype">bool</font> append, <font class="keywordtype">bool</font> text) : IStream(false) +00415 { +00416 <a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>=NULL; +00417 <a class="code" href="classNLMISC_1_1COFile.html#a3">open</a>(path, append, text); +00418 } +00419 +00420 <font class="comment">// ======================================================================================================</font> +<a name="l00421"></a><a class="code" href="classNLMISC_1_1COFile.html#a2">00421</a> COFile::~COFile() +00422 { +00423 <a class="code" href="classNLMISC_1_1COFile.html#a4">close</a>(); +00424 } +00425 <font class="comment">// ======================================================================================================</font> +<a name="l00426"></a><a class="code" href="classNLMISC_1_1COFile.html#a3">00426</a> <font class="keywordtype">bool</font> COFile::open(<font class="keyword">const</font> std::string &path, <font class="keywordtype">bool</font> append, <font class="keywordtype">bool</font> text) +00427 { +00428 <a class="code" href="classNLMISC_1_1COFile.html#a4">close</a>(); +00429 +00430 <font class="comment">// can't open empty filename</font> +00431 <font class="keywordflow">if</font>(path.empty ()) +00432 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00433 +00434 <font class="keywordtype">char</font> mode[3]; +00435 mode[0] = (append)?<font class="charliteral">'a'</font>:<font class="charliteral">'w'</font>; +00436 mode[1] = (text)?<font class="charliteral">'\0'</font>:<font class="charliteral">'b'</font>; +00437 mode[2] = <font class="charliteral">'\0'</font>; +00438 +00439 <a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>=fopen(path.c_str(), mode); +00440 <a class="code" href="classNLMISC_1_1COFile.html#o1">_FileName</a> = path; +00441 +00442 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>!=NULL; +00443 } +00444 <font class="comment">// ======================================================================================================</font> +<a name="l00445"></a><a class="code" href="classNLMISC_1_1COFile.html#a4">00445</a> <font class="keywordtype">void</font> COFile::close() +00446 { +00447 <font class="keywordflow">if</font>(_F) +00448 { +00449 fclose(<a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>); +00450 <a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>=NULL; +00451 } +00452 <a class="code" href="classNLMISC_1_1IStream.html#b7">resetPtrTable</a>(); +00453 } +00454 <font class="comment">// ======================================================================================================</font> +<a name="l00455"></a><a class="code" href="classNLMISC_1_1COFile.html#a5">00455</a> <font class="keywordtype">void</font> COFile::flush() +00456 { +00457 <font class="keywordflow">if</font>(_F) +00458 { +00459 fflush(<a class="code" href="classNLMISC_1_1COFile.html#o0">_F</a>); +00460 } +00461 } +00462 +00463 +00464 <font class="comment">// ======================================================================================================</font> +<a name="l00465"></a><a class="code" href="classNLMISC_1_1COFile.html#a9">00465</a> <font class="keywordtype">void</font> COFile::serialBuffer(uint8 *buf, uint len) <font class="keywordflow">throw</font>(EWriteError) +00466 { +00467 <font class="keywordflow">if</font>(!_F) +00468 <font class="keywordflow">throw</font> EFileNotOpened(_FileName); +00469 <font class="keywordflow">if</font>(fwrite(buf, 1, len, _F) < len) +00470 <font class="keywordflow">throw</font> EWriteError(_FileName); +00471 } +00472 <font class="comment">// ======================================================================================================</font> +<a name="l00473"></a><a class="code" href="classNLMISC_1_1COFile.html#b0">00473</a> <font class="keywordtype">void</font> COFile::serialBit(<font class="keywordtype">bool</font> &bit) <font class="keywordflow">throw</font>(EWriteError) +00474 { +00475 <font class="comment">// Simple for now.</font> +00476 uint8 <a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>=bit; +00477 serialBuffer(&<a class="code" href="driver__opengl__extension__def_8h.html#a368">v</a>, 1); +00478 } +00479 <font class="comment">// ======================================================================================================</font> +<a name="l00480"></a><a class="code" href="classNLMISC_1_1COFile.html#a6">00480</a> <font class="keywordtype">bool</font> COFile::seek (sint32 <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>, IStream::TSeekOrigin origin) <font class="keywordflow">throw</font>(EStream) +00481 { +00482 <font class="keywordflow">if</font> (_F) +00483 { +00484 <font class="keywordtype">int</font> origin_c = SEEK_SET; +00485 <font class="keywordflow">switch</font> (origin) +00486 { +00487 <font class="keywordflow">case</font> IStream::begin: +00488 origin_c=SEEK_SET; +00489 <font class="keywordflow">break</font>; +00490 <font class="keywordflow">case</font> IStream::current: +00491 origin_c=SEEK_CUR; +00492 <font class="keywordflow">break</font>; +00493 <font class="keywordflow">case</font> IStream::end: +00494 origin_c=SEEK_END; +00495 <font class="keywordflow">break</font>; +00496 <font class="keywordflow">default</font>: +00497 <a class="code" href="debug_8h.html#a12">nlstop</a>; +00498 } +00499 +00500 <font class="keywordflow">if</font> (fseek (_F, <a class="code" href="driver__opengl__extension__def_8h.html#a378">offset</a>, origin_c)!=0) +00501 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00502 <font class="keywordflow">return</font> <font class="keyword">true</font>; +00503 } +00504 <font class="keywordflow">return</font> <font class="keyword">false</font>; +00505 } +00506 <font class="comment">// ======================================================================================================</font> +<a name="l00507"></a><a class="code" href="classNLMISC_1_1COFile.html#a7">00507</a> sint32 COFile::getPos () <font class="keywordflow">throw</font>(EStream) +00508 { +00509 <font class="keywordflow">if</font> (_F) +00510 { +00511 <font class="keywordflow">return</font> ftell (_F); +00512 } +00513 <font class="keywordflow">return</font> 0; +00514 } +00515 +00516 <font class="comment">// ======================================================================================================</font> +<a name="l00517"></a><a class="code" href="classNLMISC_1_1COFile.html#a8">00517</a> std::string COFile::getStreamName()<font class="keyword"> const</font> +00518 <font class="keyword"></font>{ +00519 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1COFile.html#o1">_FileName</a>; +00520 } +00521 +00522 +00523 } +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </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> |