aboutsummaryrefslogtreecommitdiff
path: root/doc/oscl_html/oscl__refcounter__memfrag_8h_source.html
blob: eb1063cbb9ee3e6d2e8f0976dc1e3ccaef733b72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>oscl: oscl_refcounter_memfrag.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>oscl_refcounter_memfrag.h</h1><a href="oscl__refcounter__memfrag_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// -*- c++ -*-</span>
<a name="l00002"></a>00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00003"></a>00003 
<a name="l00004"></a>00004 <span class="comment">//           O S C L _ R E F C O U N T E R _ M E M F R A G</span>
<a name="l00005"></a>00005 
<a name="l00006"></a>00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00007"></a>00007 
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef OSCL_REFCOUNTER_MEMFRAG_H_INCLUDED</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_REFCOUNTER_MEMFRAG_H_INCLUDED</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="oscl__base_8h.html" title="The file oscl_base.h is the public header that should be included to pick up the...">oscl_base.h</a>&quot;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#endif</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#ifndef OSCL_REFCOUNTER_H_INCLUDED</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="oscl__refcounter_8h.html" title="A general purpose reference counter to object lifetimes.">oscl_refcounter.h</a>&quot;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
<a name="l00033"></a>00033 <span class="preprocessor"></span>
<a name="l00034"></a>00034 
<a name="l00039"></a><a class="code" href="classOsclRefCounterMemFrag.html">00039</a> <span class="keyword">class </span><a class="code" href="classOsclRefCounterMemFrag.html">OsclRefCounterMemFrag</a>
<a name="l00040"></a>00040 {
<a name="l00041"></a>00041     <span class="keyword">public</span>:
<a name="l00042"></a>00042 
<a name="l00053"></a>00053         <a class="code" href="classOsclRefCounterMemFrag.html#a5af9dfeb79f994a1fe24c0886e4d47ea">OsclRefCounterMemFrag</a>(<a class="code" href="structOsclMemoryFragment.html">OsclMemoryFragment</a> &amp;m, <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a> *r,
<a name="l00054"></a><a class="code" href="classOsclRefCounterMemFrag.html#af092328bb9f4f7e9a0f31fb70083d7cc">00054</a>                               uint32 in_capacity) :
<a name="l00055"></a>00055                 memfrag(m), refcnt(r), capacity(in_capacity)
<a name="l00056"></a>00056                 <span class="comment">// no need to increment refcnt--it should already be done.</span>
<a name="l00057"></a>00057         {}
<a name="l00058"></a>00058 
<a name="l00062"></a>00062         <a class="code" href="classOsclRefCounterMemFrag.html#a5af9dfeb79f994a1fe24c0886e4d47ea">OsclRefCounterMemFrag</a>(<span class="keyword">const</span> <a class="code" href="classOsclRefCounterMemFrag.html">OsclRefCounterMemFrag</a> &amp;x) :
<a name="l00063"></a>00063                 memfrag(x.memfrag), refcnt(x.refcnt), capacity(x.capacity)
<a name="l00064"></a>00064         {
<a name="l00065"></a>00065             <span class="keywordflow">if</span> (refcnt)
<a name="l00066"></a><a class="code" href="classOsclRefCounterMemFrag.html#a5af9dfeb79f994a1fe24c0886e4d47ea">00066</a>             {
<a name="l00067"></a>00067                 refcnt-&gt;<a class="code" href="classOsclRefCounter.html#a36656788a3ab2b554bc7e917bf6a4adb">addRef</a>();
<a name="l00068"></a>00068             }
<a name="l00069"></a>00069         }
<a name="l00070"></a>00070 
<a name="l00074"></a>00074         <a class="code" href="classOsclRefCounterMemFrag.html#a5af9dfeb79f994a1fe24c0886e4d47ea">OsclRefCounterMemFrag</a>()
<a name="l00075"></a>00075         {
<a name="l00076"></a>00076             memfrag.<a class="code" href="structOsclMemoryFragment.html#a3374074fa288b1f307fcff0a047b6ac1">ptr</a> = 0;
<a name="l00077"></a>00077             memfrag.<a class="code" href="structOsclMemoryFragment.html#ab7432af4094176ee6ce7384f2da10a35">len</a> = 0;
<a name="l00078"></a><a class="code" href="classOsclRefCounterMemFrag.html#a57472e3f083c9cd207e60535e9bacf3b">00078</a>             refcnt = 0;
<a name="l00079"></a>00079             capacity = 0;
<a name="l00080"></a>00080         }
<a name="l00081"></a>00081 
<a name="l00082"></a>00082 
<a name="l00086"></a>00086         <a class="code" href="classOsclRefCounterMemFrag.html">OsclRefCounterMemFrag</a>&amp; <a class="code" href="classOsclRefCounterMemFrag.html#a57472e3f083c9cd207e60535e9bacf3b">operator= </a>(<span class="keyword">const</span> <a class="code" href="classOsclRefCounterMemFrag.html">OsclRefCounterMemFrag</a> &amp;x)
<a name="l00087"></a>00087         {
<a name="l00088"></a>00088             <span class="keywordflow">if</span> (<span class="keyword">this</span> == &amp;x)
<a name="l00089"></a>00089             {
<a name="l00090"></a>00090                 <span class="comment">// protect against self-assignment</span>
<a name="l00091"></a>00091                 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00092"></a>00092             }
<a name="l00093"></a>00093 
<a name="l00094"></a>00094             <span class="comment">// remove ref for current memfrag</span>
<a name="l00095"></a>00095             <span class="keywordflow">if</span> (refcnt)
<a name="l00096"></a>00096             {
<a name="l00097"></a>00097                 refcnt-&gt;<a class="code" href="classOsclRefCounter.html#aa7b138fd57f149a575356e51ee2d4451">removeRef</a>();
<a name="l00098"></a>00098             }
<a name="l00099"></a>00099 
<a name="l00100"></a>00100             <span class="comment">// copy assigned object</span>
<a name="l00101"></a>00101             memfrag = x.memfrag;
<a name="l00102"></a>00102             refcnt = x.refcnt;
<a name="l00103"></a>00103             capacity = x.capacity;
<a name="l00104"></a>00104 
<a name="l00105"></a>00105             <span class="comment">// add ref for new memfrag</span>
<a name="l00106"></a>00106             <span class="keywordflow">if</span> (refcnt)
<a name="l00107"></a>00107             {
<a name="l00108"></a>00108                 refcnt-&gt;<a class="code" href="classOsclRefCounter.html#a36656788a3ab2b554bc7e917bf6a4adb">addRef</a>();
<a name="l00109"></a>00109             }
<a name="l00110"></a>00110 
<a name="l00111"></a>00111             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00112"></a>00112         }
<a name="l00113"></a><a class="code" href="classOsclRefCounterMemFrag.html#ade700aa0752694cc80076de1510c65f9">00113</a> 
<a name="l00121"></a>00121         <a class="code" href="classOsclRefCounterMemFrag.html#ade700aa0752694cc80076de1510c65f9">~OsclRefCounterMemFrag</a>()
<a name="l00122"></a>00122         {
<a name="l00123"></a>00123             <span class="keywordflow">if</span> (refcnt)
<a name="l00124"></a>00124             {
<a name="l00125"></a><a class="code" href="classOsclRefCounterMemFrag.html#a4bb8d64ecbc6b2eaabd09325e353eeec">00125</a>                 refcnt-&gt;<a class="code" href="classOsclRefCounter.html#aa7b138fd57f149a575356e51ee2d4451">removeRef</a>();
<a name="l00126"></a>00126             }
<a name="l00127"></a>00127         }
<a name="l00128"></a>00128 
<a name="l00133"></a>00133         <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a>* <a class="code" href="classOsclRefCounterMemFrag.html#a4bb8d64ecbc6b2eaabd09325e353eeec">getRefCounter</a>()
<a name="l00134"></a><a class="code" href="classOsclRefCounterMemFrag.html#a91b285b6b4f4fc95e60523f69226efe0">00134</a>         {
<a name="l00135"></a>00135             <span class="keywordflow">return</span> refcnt;
<a name="l00136"></a>00136         }
<a name="l00137"></a>00137 
<a name="l00142"></a><a class="code" href="classOsclRefCounterMemFrag.html#ab7dce101b26f7cd7f64553efaacbadb3">00142</a>         <a class="code" href="structOsclMemoryFragment.html">OsclMemoryFragment</a>&amp; <a class="code" href="classOsclRefCounterMemFrag.html#a91b285b6b4f4fc95e60523f69226efe0">getMemFrag</a>()
<a name="l00143"></a>00143         {
<a name="l00144"></a>00144             <span class="keywordflow">return</span> memfrag;
<a name="l00145"></a>00145         }
<a name="l00146"></a>00146 
<a name="l00150"></a>00150         <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* <a class="code" href="classOsclRefCounterMemFrag.html#ab7dce101b26f7cd7f64553efaacbadb3">getMemFragPtr</a>()
<a name="l00151"></a>00151         {
<a name="l00152"></a>00152             <span class="keywordflow">return</span> memfrag.<a class="code" href="structOsclMemoryFragment.html#a3374074fa288b1f307fcff0a047b6ac1">ptr</a>;
<a name="l00153"></a><a class="code" href="classOsclRefCounterMemFrag.html#ab1baab99d915ed52f5192da0c35d4ad1">00153</a>         }
<a name="l00154"></a>00154 
<a name="l00161"></a>00161         uint32 <a class="code" href="classOsclRefCounterMemFrag.html#ab1baab99d915ed52f5192da0c35d4ad1">getMemFragSize</a>()
<a name="l00162"></a>00162         {
<a name="l00163"></a><a class="code" href="classOsclRefCounterMemFrag.html#a36a2f6823ef9a01178621ea2d2dd9092">00163</a>             <span class="keywordflow">return</span> memfrag.<a class="code" href="structOsclMemoryFragment.html#ab7432af4094176ee6ce7384f2da10a35">len</a>;
<a name="l00164"></a>00164         }
<a name="l00165"></a>00165 
<a name="l00171"></a><a class="code" href="classOsclRefCounterMemFrag.html#a35d94ba86e29144522af28eae994f780">00171</a>         uint32 <a class="code" href="classOsclRefCounterMemFrag.html#a36a2f6823ef9a01178621ea2d2dd9092">getCapacity</a>()
<a name="l00172"></a>00172         {
<a name="l00173"></a>00173             <span class="keywordflow">return</span> capacity;
<a name="l00174"></a>00174         }
<a name="l00175"></a>00175 
<a name="l00179"></a>00179         uint32 <a class="code" href="classOsclRefCounterMemFrag.html#a35d94ba86e29144522af28eae994f780">getCount</a>()
<a name="l00180"></a>00180         {
<a name="l00181"></a>00181             <span class="keywordflow">return</span> (refcnt) ? refcnt-&gt;<a class="code" href="classOsclRefCounter.html#a647a4b140b695ad7f8e68e41cb3cc137">getCount</a>() : 0;
<a name="l00182"></a>00182         }
<a name="l00183"></a>00183 
<a name="l00184"></a>00184 
<a name="l00185"></a>00185 
<a name="l00186"></a>00186     <span class="keyword">private</span>:
<a name="l00187"></a>00187 
<a name="l00188"></a>00188         <a class="code" href="structOsclMemoryFragment.html">OsclMemoryFragment</a> memfrag;
<a name="l00189"></a>00189         <a class="code" href="classOsclRefCounter.html">OsclRefCounter</a> *refcnt;
<a name="l00190"></a>00190         uint32 capacity;
<a name="l00191"></a>00191 };
<a name="l00192"></a>00192 
<a name="l00193"></a>00193 
<a name="l00197"></a>00197 <span class="preprocessor">#endif // OSCL_REFCOUNTER_MEMFRAG_H</span>
</pre></div></div>
<hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: CORE_9.004.1.1 </small>
</small></address>
</body>
</html>