• 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_double_list.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_double_list.h</h1><a href="oscl__double__list_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001
1000010 <span class="preprocessor">#ifndef OSCL_DOUBLE_LIST_H_INCLUDED</span>
1100011 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_DOUBLE_LIST_H_INCLUDED</span>
1200012 <span class="preprocessor"></span>
1300013 <span class="preprocessor">#ifndef OSCLCONFIG_PROC_H_INCLUDED</span>
1400014 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__proc_8h.html">osclconfig_proc.h</a>"</span>
1500015 <span class="preprocessor">#endif</span>
1600016 <span class="preprocessor"></span>
1700017
1800018 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
1900019 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
2000020 <span class="preprocessor">#endif</span>
2100021 <span class="preprocessor"></span>
2200022 <span class="preprocessor">#ifndef OSCL_ASSERT_H_INCLUDED</span>
2300023 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__assert_8h.html">oscl_assert.h</a>"</span>
2400024 <span class="preprocessor">#endif</span>
2500025 <span class="preprocessor"></span>
2600026
2700027 <span class="comment">//OsclDoubleList and OsclPriorityList are used in the internal scheduler implementation.</span>
2800028 <span class="comment">//All the IMPORT_C was removed so they're not available as</span>
2900029 <span class="comment">//public APIs.</span>
3000030
3100031 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> S&gt;
32<a name="l00032"></a><a class="code" href="group__osclproc.html#a5">00032</a> <span class="keyword">inline</span> T* <a class="code" href="group__osclproc.html#a5">OsclPtrAdd</a>(T* aPtr, S aVal)
3300033 {
3400034     <span class="keywordflow">return</span>((T*)(((uint8*)aPtr) + aVal));
3500035 }
3600036
3700037 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T, <span class="keyword">class</span> S&gt;
38<a name="l00038"></a><a class="code" href="group__osclproc.html#a6">00038</a> <span class="keyword">inline</span> T* <a class="code" href="group__osclproc.html#a6">OsclPtrSub</a>(T* aPtr, S aVal)
3900039 {
4000040     <span class="keywordflow">return</span>((T*)(((uint8*)aPtr) - aVal));
4100041 }
4200042
43<a name="l00043"></a><a class="code" href="classOsclDoubleLink.html">00043</a> <span class="keyword">class </span><a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>
4400044 {
4500045     <span class="keyword">public</span>:
46<a name="l00046"></a><a class="code" href="classOsclDoubleLink.html#a0">00046</a>         <a class="code" href="classOsclDoubleLink.html#a0">OsclDoubleLink</a>() : <a class="code" href="classOsclDoubleLink.html#m0">iNext</a>(<a class="code" href="group__osclbase.html#a81">NULL</a>) {}
4700047         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleLink.html#a1">Remove</a>();
4800048         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleLink.html#a2">InsertAfter</a>(<a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* aLink);
4900049         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleLink.html#a3">InsertBefore</a>(<a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* aLink);
5000050     <span class="keyword">public</span>:
51<a name="l00051"></a><a class="code" href="classOsclDoubleLink.html#m0">00051</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* <a class="code" href="classOsclDoubleLink.html#m0">iNext</a>;
52<a name="l00052"></a><a class="code" href="classOsclDoubleLink.html#m1">00052</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* <a class="code" href="classOsclDoubleLink.html#m1">iPrev</a>;
5300053 };
5400054
5500055
5600056 <span class="keyword">class </span><a class="code" href="classOsclReadyQ.html">OsclReadyQ</a>;
57<a name="l00057"></a><a class="code" href="classOsclPriorityLink.html">00057</a> <span class="keyword">class </span><a class="code" href="classOsclPriorityLink.html">OsclPriorityLink</a> : <span class="keyword">public</span> <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>
5800058 {
5900059     <span class="keyword">public</span>:
60<a name="l00060"></a><a class="code" href="classOsclPriorityLink.html#m0">00060</a>         int32 <a class="code" href="classOsclPriorityLink.html#m0">iPriority</a>;
6100061 };
6200062
63<a name="l00063"></a><a class="code" href="classOsclDoubleListBase.html">00063</a> <span class="keyword">class </span><a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>
6400064 {
6500065     <span class="keyword">public</span>:
6600066         <span class="keywordtype">bool</span> <a class="code" href="classOsclDoubleListBase.html#a0">IsEmpty</a>() <span class="keyword">const</span>;
6700067         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleListBase.html#a1">SetOffset</a>(int32 anOffset);
6800068         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleListBase.html#a2">Reset</a>();
69<a name="l00069"></a><a class="code" href="classOsclDoubleListBase.html#a3">00069</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* <a class="code" href="classOsclDoubleListBase.html#a3">getHead</a>()
7000070         {
7100071             <span class="keywordflow">return</span> &amp;<a class="code" href="classOsclDoubleListBase.html#n0">iHead</a>;
7200072         }
73<a name="l00073"></a><a class="code" href="classOsclDoubleListBase.html#a4">00073</a>         int32 <a class="code" href="classOsclDoubleListBase.html#a4">getOffset</a>()
7400074         {
7500075             <span class="keywordflow">return</span> <a class="code" href="classOsclDoubleListBase.html#n1">iOffset</a>;
7600076         }
7700077     <span class="keyword">protected</span>:
7800078         <a class="code" href="classOsclDoubleListBase.html#b0">OsclDoubleListBase</a>();
7900079         <a class="code" href="classOsclDoubleListBase.html#b0">OsclDoubleListBase</a>(int32 anOffset);
8000080         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleListBase.html#b2">InsertHead</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* aPtr);
8100081         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleListBase.html#b3">InsertTail</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* aPtr);
8200082         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleListBase.html#b4">Insert</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* aPtr);
8300083     <span class="keyword">protected</span>:
84<a name="l00084"></a><a class="code" href="classOsclDoubleListBase.html#n0">00084</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a> <a class="code" href="classOsclDoubleListBase.html#n0">iHead</a>;
85<a name="l00085"></a><a class="code" href="classOsclDoubleListBase.html#n1">00085</a>         int32 <a class="code" href="classOsclDoubleListBase.html#n1">iOffset</a>;
8600086     <span class="keyword">private</span>:
8700087         <a class="code" href="classOsclDoubleListBase.html#b0">OsclDoubleListBase</a>(<span class="keyword">const</span> <a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>&amp; aList);
8800088         <a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>&amp; aList);
8900089 };
9000090
9100091
9200092
9300093 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
94<a name="l00094"></a><a class="code" href="classOsclDoubleList.html">00094</a> <span class="keyword">class </span><a class="code" href="classOsclDoubleList.html">OsclDoubleList</a> : <span class="keyword">public</span> <a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>
9500095 {
9600096     <span class="keyword">public</span>:
9700097         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <a class="code" href="classOsclDoubleList.html#a0">OsclDoubleList</a>();
9800098         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <a class="code" href="classOsclDoubleList.html#a0">OsclDoubleList</a>(int32 anOffset);
9900099         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleList.html#a2">InsertHead</a>(T&amp; aRef);
10000100         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleList.html#a3">InsertTail</a>(T&amp; aRef);
10100101         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">bool</span> <a class="code" href="classOsclDoubleList.html#a4">IsHead</a>(<span class="keyword">const</span> T* aPtr) <span class="keyword">const</span>;
10200102         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">bool</span> <a class="code" href="classOsclDoubleList.html#a5">IsTail</a>(<span class="keyword">const</span> T* aPtr) <span class="keyword">const</span>;
10300103         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> T* <a class="code" href="classOsclDoubleList.html#a6">Head</a>() <span class="keyword">const</span>;
10400104         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> T* <a class="code" href="classOsclDoubleList.html#a7">Tail</a>() <span class="keyword">const</span>;
10500105 };
10600106
10700107 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
108<a name="l00108"></a><a class="code" href="classOsclPriorityList.html">00108</a> <span class="keyword">class </span><a class="code" href="classOsclPriorityList.html">OsclPriorityList</a> : <span class="keyword">public</span> <a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>
10900109 {
11000110     <span class="keyword">public</span>:
11100111         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <a class="code" href="classOsclPriorityList.html#a0">OsclPriorityList</a>();
11200112         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <a class="code" href="classOsclPriorityList.html#a0">OsclPriorityList</a>(int32 anOffset);
11300113         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">void</span> <a class="code" href="classOsclPriorityList.html#a2">Insert</a>(T&amp; aRef);
11400114         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">bool</span> <a class="code" href="classOsclPriorityList.html#a3">IsHead</a>(<span class="keyword">const</span> T* aPtr) <span class="keyword">const</span>;
11500115         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> <span class="keywordtype">bool</span> <a class="code" href="classOsclPriorityList.html#a4">IsTail</a>(<span class="keyword">const</span> T* aPtr) <span class="keyword">const</span>;
11600116         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> T* <a class="code" href="classOsclPriorityList.html#a5">Head</a>() <span class="keyword">const</span>;
11700117         <a class="code" href="group__osclbase.html#a82">OSCL_INLINE</a> T* <a class="code" href="classOsclPriorityList.html#a6">Tail</a>() <span class="keyword">const</span>;
11800118 };
11900119
12000120 <span class="comment">//</span>
12100121 <span class="keyword">class </span><a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>;
12200122
12300123 <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
124<a name="l00124"></a><a class="code" href="classOsclDoubleRunner.html">00124</a> <span class="keyword">class </span><a class="code" href="classOsclDoubleRunner.html">OsclDoubleRunner</a>
12500125 {
12600126     <span class="keyword">public</span>:
127<a name="l00127"></a><a class="code" href="classOsclDoubleRunner.html#a0">00127</a>         <a class="code" href="classOsclDoubleRunner.html#a0">OsclDoubleRunner</a>(<a class="code" href="classOsclDoubleListBase.html">OsclDoubleListBase</a>&amp; aQue)
12800128         {
12900129             <span class="comment">//save the queue information.</span>
13000130             <a class="code" href="classOsclDoubleRunner.html#n0">iOffset</a> = aQue.<a class="code" href="classOsclDoubleListBase.html#a4">getOffset</a>();
13100131             <a class="code" href="classOsclDoubleRunner.html#n1">iHead</a> = aQue.<a class="code" href="classOsclDoubleListBase.html#a3">getHead</a>();
13200132             <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a> = <a class="code" href="group__osclbase.html#a81">NULL</a>;
13300133         }
13400134
135<a name="l00135"></a><a class="code" href="classOsclDoubleRunner.html#a1">00135</a>         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleRunner.html#a1">Set</a>(T&amp; aLink)
13600136         {
13700137             <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a> = (<a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>*)<a class="code" href="group__osclproc.html#a5">OsclPtrAdd</a>(aLink, <a class="code" href="classOsclDoubleRunner.html#n0">iOffset</a>);
13800138         }
13900139
14000140         <span class="comment">//This was inline but ADS 1.2 compiler gets a link error from it...</span>
141<a name="l00141"></a><a class="code" href="classOsclDoubleRunner.html#a2">00141</a>         <a class="code" href="classOsclDoubleRunner.html#a2">operator T*</a>()
14200142         {
14300143             <span class="keywordflow">if</span> (iNext)
14400144                 <span class="keywordflow">return</span> ((T *)<a class="code" href="group__osclproc.html#a6">OsclPtrSub</a>(<a class="code" href="classOsclDoubleRunner.html#n2">iNext</a>, <a class="code" href="classOsclDoubleRunner.html#n0">iOffset</a>));
14500145             <span class="keywordflow">return</span> <a class="code" href="group__osclbase.html#a81">NULL</a>;
14600146         }
14700147
148<a name="l00148"></a><a class="code" href="classOsclDoubleRunner.html#a3">00148</a>         T* <a class="code" href="classOsclDoubleRunner.html#a3">operator++</a>(<span class="keywordtype">int</span>)
14900149         {
15000150             <span class="comment">//get current.</span>
15100151             <a class="code" href="group__osclbase.html#a25">OsclAny</a>* p = <a class="code" href="group__osclbase.html#a81">NULL</a>;
15200152             <span class="keywordflow">if</span> (iNext)
15300153                 p = ((<a class="code" href="group__osclbase.html#a25">OsclAny</a> *)<a class="code" href="group__osclproc.html#a6">OsclPtrSub</a>(<a class="code" href="classOsclDoubleRunner.html#n2">iNext</a>, <a class="code" href="classOsclDoubleRunner.html#n0">iOffset</a>));
15400154
15500155             <span class="comment">//advance.</span>
15600156             <span class="keywordflow">if</span> (iNext)
15700157                 <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a> = <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a>-&gt;<a class="code" href="classOsclDoubleLink.html#m0">iNext</a>;
15800158             <span class="comment">//return current.</span>
15900159             <span class="keywordflow">return</span> ((T *)p);
16000160         }
16100161
16200162         T* <a class="code" href="classOsclDoubleRunner.html#a4">operator--</a>(<span class="keywordtype">int</span>);
16300163
16400164     <span class="keyword">public</span>:
165<a name="l00165"></a><a class="code" href="classOsclDoubleRunner.html#a5">00165</a>         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleRunner.html#a5">SetToHead</a>()
16600166         {
16700167             <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a> = <a class="code" href="classOsclDoubleRunner.html#n1">iHead</a>-&gt;<a class="code" href="classOsclDoubleLink.html#m0">iNext</a>;
16800168         }
169<a name="l00169"></a><a class="code" href="classOsclDoubleRunner.html#a6">00169</a>         <span class="keywordtype">void</span> <a class="code" href="classOsclDoubleRunner.html#a6">SetToTail</a>()
17000170         {
17100171             <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a> = <a class="code" href="classOsclDoubleRunner.html#n1">iHead</a>-&gt;<a class="code" href="classOsclDoubleLink.html#m1">iPrev</a>;
17200172         }
17300173     <span class="keyword">protected</span>:
174<a name="l00174"></a><a class="code" href="classOsclDoubleRunner.html#n0">00174</a>         int32 <a class="code" href="classOsclDoubleRunner.html#n0">iOffset</a>;
175<a name="l00175"></a><a class="code" href="classOsclDoubleRunner.html#n1">00175</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* <a class="code" href="classOsclDoubleRunner.html#n1">iHead</a>;
176<a name="l00176"></a><a class="code" href="classOsclDoubleRunner.html#n2">00176</a>         <a class="code" href="classOsclDoubleLink.html">OsclDoubleLink</a>* <a class="code" href="classOsclDoubleRunner.html#n2">iNext</a>;
17700177 };
17800178
17900179
18000180
18100181
18200182 <span class="comment">//#if !(OSCL_DISABLE_INLINES)</span>
18300183 <span class="preprocessor">#include "oscl_double_list.inl"</span>
18400184 <span class="comment">//#endif</span>
18500185
18600186
18700187
18800188 <span class="comment">//Some handy macros</span>
189<a name="l00189"></a><a class="code" href="group__osclproc.html#a7">00189</a> <span class="preprocessor">#define QUE_ITER_BEGIN(_type,_qname)\</span>
19000190 <span class="preprocessor">        if (!_qname.IsEmpty())\</span>
19100191 <span class="preprocessor">        {\</span>
19200192 <span class="preprocessor">                OsclDoubleRunner &lt;_type&gt; iter(_qname);\</span>
19300193 <span class="preprocessor">                _type *item;\</span>
19400194 <span class="preprocessor">                for (iter.SetToHead(); ;iter++)\</span>
19500195 <span class="preprocessor">                {\</span>
19600196 <span class="preprocessor">                        item=iter;\</span>
19700197 <span class="preprocessor"> </span>
198<a name="l00198"></a><a class="code" href="group__osclproc.html#a8">00198</a> <span class="preprocessor"></span><span class="preprocessor">#define QUE_ITER_END(_qname)\</span>
19900199 <span class="preprocessor">                        if (_qname.IsTail(item))\</span>
20000200 <span class="preprocessor">                                break;\</span>
20100201 <span class="preprocessor">                }\</span>
20200202 <span class="preprocessor">        }</span>
20300203 <span class="preprocessor"></span>
20400204 <span class="preprocessor">#endif</span>
20500205 <span class="preprocessor"></span>
206</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
207<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
208</small></address>
209</body>
210</html>
211