1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> 3<title>oscl_shared_ptr.h Source File</title> 4<link href="doxygen.css" rel="stylesheet" type="text/css"> 5</head><body> 6<!-- Generated by Doxygen 1.2.18 --> 7<center> 8<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </center> 9<hr><h1>oscl_shared_ptr.h</h1><a href="oscl__shared__ptr_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span> 1000002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 1100003 1200004 <span class="comment">// O S C L _ S H A R E D _ P T R</span> 1300005 1400006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span> 1500007 1600019 <span class="preprocessor">#ifndef OSCL_SHARED_PTR_H_INCLUDED</span> 1700020 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_SHARED_PTR_H_INCLUDED</span> 1800021 <span class="preprocessor"></span> 1900022 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span> 2000023 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span> 2100024 <span class="preprocessor">#endif</span> 2200025 <span class="preprocessor"></span> 2300026 <span class="preprocessor">#ifndef OSCL_REFCOUNTER_H_INCLUDED</span> 2400027 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__refcounter_8h.html">oscl_refcounter.h</a>"</span> 2500028 <span class="preprocessor">#endif</span> 2600029 <span class="preprocessor"></span> 27<a name="l00030"></a><a class="code" href="group__osclbase.html#a105">00030</a> <span class="preprocessor">#define OSCL_DISABLE_WARNING_RETURN_TYPE_NOT_UDT</span> 2800031 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__compiler__warnings_8h.html">osclconfig_compiler_warnings.h</a>"</span> 2900032 3000034 <span class="keyword">template</span> <<span class="keyword">class</span> TheClass> 31<a name="l00035"></a><a class="code" href="classOsclSharedPtr.html">00035</a> <span class="keyword">class </span><a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a> 3200036 { 3300037 <span class="keyword">public</span>: 34<a name="l00039"></a><a class="code" href="classOsclSharedPtr.html#a0">00039</a> <a class="code" href="classOsclSharedPtr.html#a0">OsclSharedPtr</a>() : 3500040 mpRep(<a class="code" href="group__osclbase.html#a81">NULL</a>), refcnt(<a class="code" href="group__osclbase.html#a81">NULL</a>) {} 3600041 3700043 38<a name="l00046"></a><a class="code" href="classOsclSharedPtr.html#a1">00046</a> <a class="code" href="classOsclSharedPtr.html#a0">OsclSharedPtr</a>(TheClass* inClassPtr, <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* in_refcnt) : 3900047 mpRep(inClassPtr), refcnt(in_refcnt) {}; 4000048 4100049 42<a name="l00051"></a><a class="code" href="classOsclSharedPtr.html#a2">00051</a> <a class="code" href="classOsclSharedPtr.html#a0">OsclSharedPtr</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& inSharedPtr) : 4300052 mpRep(inSharedPtr.mpRep), refcnt(inSharedPtr.refcnt) 4400053 { 4500054 <span class="keywordflow">if</span> (refcnt) 4600055 { 4700056 refcnt-><a class="code" href="classOsclRefCounter.html#a0">addRef</a>(); 4800057 } 4900058 } 5000059 5100060 52<a name="l00062"></a><a class="code" href="classOsclSharedPtr.html#a3">00062</a> <span class="keyword">virtual</span> <a class="code" href="classOsclSharedPtr.html#a3">~OsclSharedPtr</a>() 5300063 { 5400064 <span class="keywordflow">if</span> (refcnt != <a class="code" href="group__osclbase.html#a81">NULL</a>) 5500065 { 5600066 refcnt-><a class="code" href="classOsclRefCounter.html#a1">removeRef</a>(); 5700067 } 5800068 } <span class="comment">// end destructor</span> 5900069 6000070 61<a name="l00073"></a><a class="code" href="classOsclSharedPtr.html#a4">00073</a> TheClass* <a class="code" href="classOsclSharedPtr.html#a4">operator-></a>() 6200074 { 6300075 <span class="keywordflow">return</span> mpRep; 6400076 } 6500077 66<a name="l00079"></a><a class="code" href="classOsclSharedPtr.html#a5">00079</a> TheClass& <a class="code" href="classOsclSharedPtr.html#a5">operator*</a>() 6700080 { 6800081 <span class="keywordflow">return</span> *mpRep; 6900082 } 7000083 71<a name="l00085"></a><a class="code" href="classOsclSharedPtr.html#a6">00085</a> <a class="code" href="classOsclSharedPtr.html#a6">operator TheClass*</a>() 7200086 { 7300087 <span class="keywordflow">return</span> mpRep; 7400088 } 7500089 76<a name="l00091"></a><a class="code" href="classOsclSharedPtr.html#a7">00091</a> TheClass* <a class="code" href="classOsclSharedPtr.html#a7">GetRep</a>() 7700092 { 7800093 <span class="keywordflow">return</span> mpRep; 7900094 } 8000095 81<a name="l00097"></a><a class="code" href="classOsclSharedPtr.html#a8">00097</a> <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* <a class="code" href="classOsclSharedPtr.html#a8">GetRefCounter</a>() 8200098 { 8300099 <span class="keywordflow">return</span> refcnt; 8400100 } 8500101 86<a name="l00103"></a><a class="code" href="classOsclSharedPtr.html#a9">00103</a> <span class="keywordtype">int</span> <a class="code" href="classOsclSharedPtr.html#a9">get_count</a>() 8700104 { 8800105 <span class="keywordflow">return</span> (refcnt == <a class="code" href="group__osclbase.html#a81">NULL</a>) ? 0 : refcnt-><a class="code" href="classOsclRefCounter.html#a2">getCount</a>(); 8900106 } 9000107 9100109 <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">Bind</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& inHandle); 9200110 9300112 <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">Bind</a>(TheClass* ptr, <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* in_refcnt); 9400113 95<a name="l00115"></a><a class="code" href="classOsclSharedPtr.html#a12">00115</a> <span class="keywordtype">void</span> <a class="code" href="classOsclSharedPtr.html#a12">Unbind</a>() 9600116 { 9700117 <a class="code" href="group__osclbase.html#a111">Bind</a>(<a class="code" href="group__osclbase.html#a81">NULL</a>, <a class="code" href="group__osclbase.html#a81">NULL</a>); 9800118 }; 9900119 100<a name="l00121"></a><a class="code" href="classOsclSharedPtr.html#a13">00121</a> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& <a class="code" href="classOsclSharedPtr.html#a13">operator=</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& inSharedPtr) 10100122 { 10200123 <a class="code" href="group__osclbase.html#a111">Bind</a>(inSharedPtr); 10300124 <span class="keywordflow">return</span> *<span class="keyword">this</span>; 10400125 } 10500126 10600128 <span class="keywordtype">bool</span> <a class="code" href="group__osclbase.html#a110">operator==</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& b) <span class="keyword">const</span>; 10700129 10800130 <span class="keyword">private</span>: 10900131 11000132 TheClass* mpRep; 11100133 <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* refcnt; 11200134 11300135 }; 11400136 11500137 116<a name="l00138"></a><a class="code" href="classOsclSharedPtr.html#a110">00138</a> <span class="keyword">template</span> <<span class="keyword">class</span> TheClass> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__osclbase.html#a110">OsclSharedPtr<TheClass>::operator==</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr<TheClass></a>& b)<span class="keyword"> const</span> 11700139 <span class="keyword"></span>{ 11800140 <span class="keywordflow">if</span> ((this->mpRep == b.<a class="code" href="classOsclSharedPtr.html#o0">mpRep</a>) && 11900141 (this->refcnt == b.<a class="code" href="classOsclSharedPtr.html#o1">refcnt</a>)) 12000142 { 12100143 <span class="keywordflow">return</span> <span class="keyword">true</span>; 12200144 } 12300145 <span class="keywordflow">return</span> <span class="keyword">false</span>; 12400146 } 12500147 12600148 127<a name="l00149"></a><a class="code" href="classOsclSharedPtr.html#a111">00149</a> <span class="keyword">template</span> <<span class="keyword">class</span> TheClass> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">OsclSharedPtr<TheClass>::Bind</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>& inSharedPtr) 12800150 { 12900151 <span class="keywordflow">if</span> (mpRep == inSharedPtr.<a class="code" href="classOsclSharedPtr.html#o0">mpRep</a>) <span class="keywordflow">return</span>; 13000152 13100153 <span class="keywordflow">if</span> (refcnt != <a class="code" href="group__osclbase.html#a81">NULL</a>) 13200154 { 13300155 refcnt-><a class="code" href="classOsclRefCounter.html#a1">removeRef</a>(); 13400156 } 13500157 13600158 refcnt = inSharedPtr.<a class="code" href="classOsclSharedPtr.html#o1">refcnt</a>; 13700159 mpRep = inSharedPtr.<a class="code" href="classOsclSharedPtr.html#o0">mpRep</a>; 13800160 13900161 <span class="keywordflow">if</span> (refcnt != <a class="code" href="group__osclbase.html#a81">NULL</a>) 14000162 { 14100163 refcnt-><a class="code" href="classOsclRefCounter.html#a0">addRef</a>(); 14200164 } 14300165 14400166 } 14500167 146<a name="l00168"></a><a class="code" href="classOsclSharedPtr.html#a112">00168</a> <span class="keyword">template</span> <<span class="keyword">class</span> TheClass> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">OsclSharedPtr<TheClass>::Bind</a>(TheClass* ptr, 14700169 <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* in_refcnt) 14800170 { 14900171 <span class="keywordflow">if</span> (refcnt != <a class="code" href="group__osclbase.html#a81">NULL</a>) 15000172 { 15100173 refcnt-><a class="code" href="classOsclRefCounter.html#a1">removeRef</a>(); 15200174 } 15300175 15400176 mpRep = ptr; 15500177 refcnt = in_refcnt; 15600178 15700179 } 15800180 15900181 <span class="preprocessor">#endif // OSCL_SHARED_PTR_H_INCLUDED</span> 160</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small> 161<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small> 162</small></address> 163</body> 164</html> 165