aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a03321.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/doxygen/nel/a03321.html')
-rw-r--r--docs/doxygen/nel/a03321.html720
1 files changed, 720 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a03321.html b/docs/doxygen/nel/a03321.html
new file mode 100644
index 00000000..c1074e7a
--- /dev/null
+++ b/docs/doxygen/nel/a03321.html
@@ -0,0 +1,720 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: TemplateNLMISC::CRefPtr&lt; T &gt; class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NLMISC::CRefPtr&lt; T &gt; Class Template Reference</h1><code>#include &lt;<a class="el" href="a06402.html">smart_ptr.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+<h3>template&lt;class T&gt;<br>
+ class NLMISC::CRefPtr&lt; T &gt;</h3>
+
+<a class="el" href="a03321.html">CRefPtr</a>: an handle on a ptr. T Must derive from <a class="el" href="a02209.html">CRefCount</a>. If you use <a class="el" href="a03321.html">CRefPtr</a>, you can kill the object simply by calling delete (T*)RefPtr, or the <a class="el" href="a03321.html#NLMISC_1_1CRefPtra3">kill()</a> method. All other <a class="el" href="a03321.html">CRefPtr</a> which point to it can know if it has been deleted. (but you must be sure that this ptr is not handle by a SmartPtr, of course...)<p>
+SmartPtr are compatible with RefPtr. A ptr may be link to a <a class="el" href="a03321.html">CRefPtr</a> and a <a class="el" href="a03408.html">CSmartPtr</a>. As example, when the <a class="el" href="a03408.html">CSmartPtr</a> will destroy him, <a class="el" href="a03321.html">CRefPtr</a> will be informed... Sample: <pre class="fragment"><div> <span class="keywordtype">void</span> foo()
+ {
+ A *p;
+ CSmartPtr&lt;A&gt; sp;
+ CRefPtr&lt;A&gt; rp;
+
+ p= <span class="keyword">new</span> A;
+ sp= p; <span class="comment">// OK. p is now owned by sp and will be deleted by sp.</span>
+ rp= p; <span class="comment">// OK. rp handle p.</span>
+ sp= NULL; <span class="comment">// Destruction. p deleted. rp automatically informed.</span>
+ <span class="keywordflow">if</span>(rp==NULL)
+ thisIsGood(); <span class="comment">// rp==NULL.</span>
+ }
+</div></pre><p>
+<b>PERFORMANCE</b> <b>WARNING!</b> <a class="el" href="a03321.html#NLMISC_1_1CRefPtra8">operator=()</a> are about 10 times slower than normal pointers. So use them wisely. For local use, prefer cast the refptr to a normal Ptr. Also, an object used with a <a class="el" href="a03321.html">CRefPtr</a> will allocate a small PtrInfo (one only per object, not per ptr). <dl compact><dt><b>See also:</b></dt><dd><a class="el" href="a03408.html">CSmartPtr</a> </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00256">256</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra0">CRefPtr</a> (const <a class="el" href="a03321.html">CRefPtr</a> &amp;copy)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor. <a href="#NLMISC_1_1CRefPtra0"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra1">CRefPtr</a> (T *<a class="el" href="a04223.html#a576">v</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Attach a ptr to a RefPtr. <a href="#NLMISC_1_1CRefPtra1"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra2">CRefPtr</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Init a NULL Ptr. <a href="#NLMISC_1_1CRefPtra2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra3">kill</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>T &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra4">operator *</a> (void) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Indirection operator. Doesn't test if ptr has been deleted somewhere, and doesn't check NULL. <a href="#NLMISC_1_1CRefPtra4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra5">operator T *</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cast operator. Check if the object has been deleted somewhere, and return NULL if this is the case. <a href="#NLMISC_1_1CRefPtra5"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>T *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra6">operator-&gt;</a> (void) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Selection operator. Doesn't test if ptr has been deleted somewhere, and doesn't check NULL. <a href="#NLMISC_1_1CRefPtra6"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra7">operator=</a> (const <a class="el" href="a03321.html">CRefPtr</a> &amp;copy)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">operator=. Giving a NULL pointer is a valid operation. <a href="#NLMISC_1_1CRefPtra7"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03321.html">CRefPtr</a> &amp;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra8">operator=</a> (T *<a class="el" href="a04223.html#a576">v</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">operator=. Giving a NULL pointer is a valid operation. <a href="#NLMISC_1_1CRefPtra8"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtra9">~CRefPtr</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Release the RefPtr. <a href="#NLMISC_1_1CRefPtra9"></a><br><br></td></tr>
+<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a> () const </td></tr>
+
+<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03320.html">CRefCount::CPtrInfo</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>T *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CRefPtra2" doxytag="NLMISC::CRefPtr::CRefPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::<a class="el" href="a03321.html">CRefPtr</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Init a NULL Ptr.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00153">153</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>.
+<p>
+<div class="fragment"><pre>00154 {
+00155 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= &amp;CRefCount::NullPtrInfo;
+00156 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= NULL;
+00157
+00158 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"Smart()"</span>);
+00159 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra1" doxytag="NLMISC::CRefPtr::CRefPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::<a class="el" href="a03321.html">CRefPtr</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">T *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>v</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Attach a ptr to a RefPtr.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00160">160</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>, <a class="el" href="a06402.html#l00056">NLMISC::CRefCount::CPtrInfo::RefCount</a>, and <a class="el" href="a05646.html#l00237">v</a>.
+<p>
+<div class="fragment"><pre>00161 {
+00162 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= <a class="code" href="a04223.html#a576">v</a>;
+00163 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a576">v</a>)
+00164 {
+00165 <span class="comment">// If no CRefPtr handles v, create a pinfo ref...</span>
+00166 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a576">v</a>-&gt;pinfo-&gt;IsNullPtrInfo)
+00167 <a class="code" href="a04223.html#a576">v</a>-&gt;pinfo=<span class="keyword">new</span> CRefCount::CPtrInfo(v);
+00168 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>=<a class="code" href="a04223.html#a576">v</a>-&gt;pinfo;
+00169 <span class="comment">// v is now used by this.</span>
+00170 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;RefCount++;
+00171 }
+00172 <span class="keywordflow">else</span>
+00173 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= &amp;CRefCount::NullPtrInfo;
+00174
+00175 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"Smart(T*)"</span>);
+00176 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra0" doxytag="NLMISC::CRefPtr::CRefPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::<a class="el" href="a03321.html">CRefPtr</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03321.html">CRefPtr</a>&lt; T &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>copy</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Copy constructor.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00177">177</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00259">NLMISC::CRefPtr&lt; T &gt;::pinfo</a>, <a class="el" href="a06402.html#l00055">NLMISC::CRefCount::CPtrInfo::Ptr</a>, <a class="el" href="a06402.html#l00097">REF_TRACE</a>, and <a class="el" href="a06402.html#l00056">NLMISC::CRefCount::CPtrInfo::RefCount</a>.
+<p>
+<div class="fragment"><pre>00178 {
+00179 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>=copy.pinfo;
+00180 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;RefCount++;
+00181 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= (T*)<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr;
+00182
+00183 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"SmartCopy()"</span>);
+00184 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra9" doxytag="NLMISC::CRefPtr::~CRefPtr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::~<a class="el" href="a03321.html">CRefPtr</a> </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Release the RefPtr.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00185">185</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>, and <a class="el" href="a06403.html#l00121">NLMISC::CRefPtr&lt; T &gt;::unRef()</a>.
+<p>
+<div class="fragment"><pre>00186 {
+00187 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"~Smart()"</span>);
+00188
+00189 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a>();
+00190 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= &amp;CRefCount::NullPtrInfo;
+00191 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= NULL;
+00192 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CRefPtra3" doxytag="NLMISC::CRefPtr::kill" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> void <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::kill </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+kill/delete the object pointed by the pointer, and inform the other RefPtr of this. "rp.kill()" and "delete (T*)rp" do the same thing, except that rp NULLity is updated with <a class="el" href="a03321.html#NLMISC_1_1CRefPtra3">kill()</a>. RefPtr which point to the same object could know if the object is valid, by just testing it ( by an implicit call to the cast operator to T*). But any calls to <a class="el" href="a03321.html#NLMISC_1_1CRefPtra6">operator-&gt;()</a> or <a class="el" href="a03321.html#NLMISC_1_1CRefPtra4">operator*()</a> will have unpredictible effects (may crash... :) ).
+<p>
+Definition at line <a class="el" href="a06403.html#l00241">241</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00055">NLMISC::CRefCount::CPtrInfo::Ptr</a>, <a class="el" href="a06402.html#l00097">REF_TRACE</a>, and <a class="el" href="a06403.html#l00121">NLMISC::CRefPtr&lt; T &gt;::unRef()</a>.
+<p>
+<div class="fragment"><pre>00242 {
+00243 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"SmartKill"</span>);
+00244
+00245 T *ptr= (T*)<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr;
+00246
+00247 <span class="comment">// First, release the refptr.</span>
+00248 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a>();
+00249 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= &amp;CRefCount::NullPtrInfo;
+00250 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= NULL;
+00251
+00252 <span class="comment">// Then delete the pointer.</span>
+00253 <span class="keywordflow">if</span>(ptr)
+00254 <span class="keyword">delete</span> ptr;
+00255 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra4" doxytag="NLMISC::CRefPtr::operator *" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> T &amp; <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::operator * </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Indirection operator. Doesn't test if ptr has been deleted somewhere, and doesn't check NULL.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00272">272</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>.
+<p>
+<div class="fragment"><pre>00273 {
+00274 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"Smart *()"</span>);
+00275 <span class="keywordflow">return</span> *<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>;
+00276 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra5" doxytag="NLMISC::CRefPtr::operator T *" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::operator T * </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Cast operator. Check if the object has been deleted somewhere, and return NULL if this is the case.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00260">260</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00055">NLMISC::CRefCount::CPtrInfo::Ptr</a>, and <a class="el" href="a06402.html#l00097">REF_TRACE</a>.
+<p>
+<div class="fragment"><pre>00261 {
+00262 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"SmartCast T*()"</span>);
+00263
+00264 <span class="comment">// Refresh Ptr.</span>
+00265 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= (T*)<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr;
+00266 <span class="keywordflow">return</span> <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>;
+00267 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra6" doxytag="NLMISC::CRefPtr::operator->" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> T * <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::operator-&gt; </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Selection operator. Doesn't test if ptr has been deleted somewhere, and doesn't check NULL.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00277">277</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>.
+<p>
+<div class="fragment"><pre>00278 {
+00279 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"Smart -&gt;()"</span>);
+00280 <span class="keywordflow">return</span> <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>;
+00281 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra7" doxytag="NLMISC::CRefPtr::operator=" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a>&lt; T &gt; &amp; <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::operator= </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const <a class="el" href="a03321.html">CRefPtr</a>&lt; T &gt; &amp;&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>copy</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+operator=. Giving a NULL pointer is a valid operation.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00223">223</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00259">NLMISC::CRefPtr&lt; T &gt;::pinfo</a>, <a class="el" href="a06402.html#l00055">NLMISC::CRefCount::CPtrInfo::Ptr</a>, <a class="el" href="a06402.html#l00097">REF_TRACE</a>, <a class="el" href="a06402.html#l00056">NLMISC::CRefCount::CPtrInfo::RefCount</a>, and <a class="el" href="a06403.html#l00121">NLMISC::CRefPtr&lt; T &gt;::unRef()</a>.
+<p>
+<div class="fragment"><pre>00224 {
+00225 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"ope=(Smart)Start"</span>);
+00226
+00227 <span class="comment">// The auto equality test is implicitly done by upcounting first "copy", then downcounting "this".</span>
+00228 copy.pinfo-&gt;RefCount++;
+00229 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a>();
+00230 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>=copy.pinfo;
+00231 <span class="comment">// Must Refresh the ptr.</span>
+00232 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= (T*)<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr;
+00233
+00234 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"ope=(Smart)End"</span>);
+00235 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00236 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtra8" doxytag="NLMISC::CRefPtr::operator=" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03321.html">CRefPtr</a>&lt; T &gt; &amp; <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::operator= </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">T *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>v</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+operator=. Giving a NULL pointer is a valid operation.
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00196">196</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00097">REF_TRACE</a>, <a class="el" href="a06403.html#l00121">NLMISC::CRefPtr&lt; T &gt;::unRef()</a>, and <a class="el" href="a05646.html#l00237">v</a>.
+<p>
+<div class="fragment"><pre>00197 {
+00198 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"ope=(T*)Start"</span>);
+00199
+00200
+00201 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a>= <a class="code" href="a04223.html#a576">v</a>;
+00202 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a576">v</a>)
+00203 {
+00204 <span class="comment">// If no CRefPtr handles v, create a pinfo ref...</span>
+00205 <span class="keywordflow">if</span>(<a class="code" href="a04223.html#a576">v</a>-&gt;pinfo-&gt;IsNullPtrInfo)
+00206 <a class="code" href="a04223.html#a576">v</a>-&gt;pinfo=<span class="keyword">new</span> CRefCount::CPtrInfo(v);
+00207 <span class="comment">// The auto equality test is implicitly done by upcounting first "v", then downcounting "this".</span>
+00208 <a class="code" href="a04223.html#a576">v</a>-&gt;pinfo-&gt;RefCount++;
+00209 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a>();
+00210 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= <a class="code" href="a04223.html#a576">v</a>-&gt;pinfo;
+00211 }
+00212 <span class="keywordflow">else</span>
+00213 {
+00214 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrd0">unRef</a>();
+00215 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>= &amp;CRefCount::NullPtrInfo;
+00216 }
+00217
+00218
+00219 <a class="code" href="a04979.html#a1">REF_TRACE</a>(<span class="stringliteral">"ope=(T*)End"</span>);
+00220
+00221 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+00222 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtrd0" doxytag="NLMISC::CRefPtr::unRef" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> void <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::unRef </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06403.html#l00121">121</a> of file <a class="el" href="a06403.html">smart_ptr_inline.h</a>.
+<p>
+References <a class="el" href="a06402.html#l00058">NLMISC::CRefCount::CPtrInfo::IsNullPtrInfo</a>, <a class="el" href="a06402.html#l00055">NLMISC::CRefCount::CPtrInfo::Ptr</a>, <a class="el" href="a06402.html#l00056">NLMISC::CRefCount::CPtrInfo::RefCount</a>, and <a class="el" href="a06403.html#l00039">SMART_INLINE</a>.
+<p>
+Referenced by <a class="el" href="a06403.html#l00241">NLMISC::CRefPtr&lt; T &gt;::kill()</a>, <a class="el" href="a06403.html#l00196">NLMISC::CRefPtr&lt; T &gt;::operator=()</a>, and <a class="el" href="a06403.html#l00185">NLMISC::CRefPtr&lt; T &gt;::~CRefPtr()</a>.
+<p>
+<div class="fragment"><pre>00122 {
+00123 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;RefCount--;
+00124 <span class="keywordflow">if</span>(<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;RefCount==0)
+00125 {
+00126 <span class="comment">// In CRefPtr, Never delete the object.</span>
+00127
+00128 <span class="comment">// We may be in the case that this==NullPtrInfo, and our NullPtrInfo has done a total round. Test it.</span>
+00129 <span class="keywordflow">if</span>(<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;IsNullPtrInfo)
+00130 {
+00131 <span class="comment">// This should not happens, but I'm not sure :) ...</span>
+00132 <span class="comment">// Reset the NullPtrInfo to a middle round.</span>
+00133 <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;RefCount= 0x7FFFFFFF;
+00134 }
+00135 <span class="keywordflow">else</span>
+00136 {
+00137 <span class="comment">// If the CRefPtr still point to a valid object.</span>
+00138 <span class="keywordflow">if</span>(<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr)
+00139 {
+00140 <span class="comment">// Inform the Object that no more CRefPtr points on it.</span>
+00141 ((T*)(<a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>-&gt;Ptr))-&gt;pinfo= &amp;CRefCount::NullPtrInfo;
+00142 }
+00143 <span class="comment">// Then delete the pinfo.</span>
+00144 <span class="keyword">delete</span> <a class="code" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a>;
+00145 }
+00146
+00147 }
+00148 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CRefPtrr0" doxytag="NLMISC::CRefPtr::pinfo" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03320.html">CRefCount::CPtrInfo</a>* <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::<a class="el" href="a03321.html#NLMISC_1_1CRefPtrr0">pinfo</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00259">259</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>.
+<p>
+Referenced by <a class="el" href="a06403.html#l00177">NLMISC::CRefPtr&lt; T &gt;::CRefPtr()</a>, and <a class="el" href="a06403.html#l00223">NLMISC::CRefPtr&lt; T &gt;::operator=()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CRefPtrr1" doxytag="NLMISC::CRefPtr::Ptr" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" colspan="4">
+template&lt;class T&gt; </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap valign="top"> T* <a class="el" href="a03321.html">NLMISC::CRefPtr</a>&lt; T &gt;::<a class="el" href="a03321.html#NLMISC_1_1CRefPtrr1">Ptr</a><code> [mutable, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a06402.html#l00260">260</a> of file <a class="el" href="a06402.html">smart_ptr.h</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a06402.html">smart_ptr.h</a><li><a class="el" href="a06403.html">smart_ptr_inline.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 13:31:38 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>