• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &nbsp; <a class="qindex" href="modules.html">Modules</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Data Structures</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Data Fields</a> &nbsp; <a class="qindex" href="globals.html">Globals</a> &nbsp; </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> &lt;<span class="keyword">class</span> TheClass&gt;
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>&amp; inSharedPtr) :
4300052                 mpRep(inSharedPtr.mpRep), refcnt(inSharedPtr.refcnt)
4400053         {
4500054             <span class="keywordflow">if</span> (refcnt)
4600055             {
4700056                 refcnt-&gt;<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-&gt;<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-&gt;</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&amp; <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-&gt;<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>&amp; 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>&amp; <a class="code" href="classOsclSharedPtr.html#a13">operator=</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>&amp; 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>&amp; 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> &lt;<span class="keyword">class</span> TheClass&gt; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="group__osclbase.html#a110">OsclSharedPtr&lt;TheClass&gt;::operator==</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr&lt;TheClass&gt;</a>&amp; b)<span class="keyword"> const</span>
11700139 <span class="keyword"></span>{
11800140     <span class="keywordflow">if</span> ((this-&gt;mpRep == b.<a class="code" href="classOsclSharedPtr.html#o0">mpRep</a>) &amp;&amp;
11900141             (this-&gt;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> &lt;<span class="keyword">class</span> TheClass&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">OsclSharedPtr&lt;TheClass&gt;::Bind</a>(<span class="keyword">const</span> <a class="code" href="classOsclSharedPtr.html">OsclSharedPtr</a>&amp; 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-&gt;<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-&gt;<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> &lt;<span class="keyword">class</span> TheClass&gt; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="group__osclbase.html#a111">OsclSharedPtr&lt;TheClass&gt;::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-&gt;<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