• 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_queue.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_queue.h</h1><a href="oscl__queue_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
1000002
1100003
1200004
1300005 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
1400006
1500007 <span class="comment">//                     O S C L _ Q U E U E</span>
1600008 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
1700009
1800024 <span class="preprocessor">#ifndef OSCL_QUEUE_H_INCLUDED</span>
1900025 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_QUEUE_H_INCLUDED</span>
2000026 <span class="preprocessor"></span>
2100027 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
2200028 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
2300029 <span class="preprocessor">#endif</span>
2400030 <span class="preprocessor"></span>
2500031 <span class="preprocessor">#ifndef OSCL_MEM_BASIC_FUNCTIONS_H_INCLUDED</span>
2600032 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__mem__basic__functions_8h.html">oscl_mem_basic_functions.h</a>"</span>
2700033 <span class="preprocessor">#endif</span>
2800034 <span class="preprocessor"></span>
2900035 <span class="preprocessor">#ifndef OSCL_ASSERT_H_INCLUDED</span>
3000036 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__assert_8h.html">oscl_assert.h</a>"</span>
3100037 <span class="preprocessor">#endif</span>
3200038 <span class="preprocessor"></span>
3300039 <span class="preprocessor">#ifndef OSCL_OPAQUE_TYPE_H_INCLUDED</span>
3400040 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__opaque__type_8h.html">oscl_opaque_type.h</a>"</span>
3500041 <span class="preprocessor">#endif</span>
3600042 <span class="preprocessor"></span>
37<a name="l00050"></a><a class="code" href="classOscl__Queue__Base.html">00050</a> <span class="keyword">class </span><a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>
3800051 {
3900052     <span class="keyword">public</span>:
4000053
41<a name="l00057"></a><a class="code" href="classOscl__Queue__Base.html#a0">00057</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#a0">size</a>()<span class="keyword"> const</span>
4200058 <span class="keyword">        </span>{
4300059             <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n0">numelems</a>;
4400060         }
4500061
46<a name="l00065"></a><a class="code" href="classOscl__Queue__Base.html#a1">00065</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#a1">capacity</a>()<span class="keyword"> const</span>
4700066 <span class="keyword">        </span>{
4800067             <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n1">bufsize</a>;
4900068         }
5000069
51<a name="l00073"></a><a class="code" href="classOscl__Queue__Base.html#a2">00073</a>         <span class="keywordtype">bool</span> <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>()<span class="keyword"> const</span>
5200074 <span class="keyword">        </span>{
5300075             <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n0">numelems</a> == 0;
5400076         }
5500077
5600086         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#a3">reserve</a>(uint32 n) ;
5700087
5800088     <span class="keyword">protected</span>:
5900089
6000090         <span class="comment">//for use in default constructor.  vtable is needed so this is a subroutine.</span>
6100091         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b0">construct</a>(<a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>* aType);
6200092
6300093         <span class="comment">//for use in constructor with pre-allocation for "n" elements.</span>
6400094         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b0">construct</a>(<a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>* aType, uint32 n) ;
6500095
66<a name="l00099"></a><a class="code" href="classOscl__Queue__Base.html#b2">00099</a>         <span class="keyword">virtual</span> <a class="code" href="classOscl__Queue__Base.html#b2">~Oscl_Queue_Base</a>()
6700100         {}
6800101
6900105         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b3">destroy</a>();
7000106
7100112         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b4">push</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* x) ;
7200113
7300117         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b5">pop</a>() ;
7400118
7500122         OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b6">clear</a>() ;
7600123
77<a name="l00124"></a><a class="code" href="classOscl__Queue__Base.html#n0">00124</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#n0">numelems</a>;  <span class="comment">// number of valid entries in queue</span>
78<a name="l00125"></a><a class="code" href="classOscl__Queue__Base.html#n1">00125</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#n1">bufsize</a>;   <span class="comment">// size of elems</span>
79<a name="l00126"></a><a class="code" href="classOscl__Queue__Base.html#n2">00126</a>         <a class="code" href="group__osclbase.html#a25">OsclAny</a>* <a class="code" href="classOscl__Queue__Base.html#n2">elems</a>;   <span class="comment">// array holding the elements</span>
80<a name="l00127"></a><a class="code" href="classOscl__Queue__Base.html#n3">00127</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a>;
8100128
82<a name="l00129"></a><a class="code" href="classOscl__Queue__Base.html#n4">00129</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#n4">ifront</a>;    <span class="comment">// front of queue: removal point</span>
83<a name="l00130"></a><a class="code" href="classOscl__Queue__Base.html#n5">00130</a>         uint32 <a class="code" href="classOscl__Queue__Base.html#n5">irear</a>;     <span class="comment">// just before back of queue: increment=&gt;insertion point</span>
8400131
8500132     <span class="keyword">private</span>:
8600133
8700137         <a class="code" href="group__osclbase.html#a25">OsclAny</a>* increment_T(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* p_T, int32 n)<span class="keyword"> const</span>
8800138 <span class="keyword">        </span>{
8900139             <span class="keywordflow">return</span> (<a class="code" href="group__osclbase.html#a25">OsclAny</a>*)((int32)p_T + n*<a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a>);
9000140         }
9100141
9200145         <a class="code" href="group__osclbase.html#a25">OsclAny</a>* front()
9300146         {
9400147             <span class="keywordflow">return</span> increment_T(<a class="code" href="classOscl__Queue__Base.html#n2">elems</a>, <a class="code" href="classOscl__Queue__Base.html#n4">ifront</a>);
9500148         }
9600149
9700150         <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>* pOpaqueType;
9800151 };
9900152
10000165 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> Alloc&gt;
101<a name="l00166"></a><a class="code" href="classOscl__Queue.html">00166</a> <span class="keyword">class </span><a class="code" href="classOscl__Queue.html">Oscl_Queue</a>
10200167             : <span class="keyword">public</span> <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>
10300168             , <span class="keyword">public</span> <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>
10400169 {
10500170
10600171     <span class="keyword">public</span>:
107<a name="l00172"></a><a class="code" href="classOscl__Queue.html#s0">00172</a>         <span class="keyword">typedef</span> T <a class="code" href="classOscl__Queue.html#s0">value_type</a>;
108<a name="l00173"></a><a class="code" href="classOscl__Queue.html#s1">00173</a>         <span class="keyword">typedef</span> T* <a class="code" href="classOscl__Queue.html#s1">pointer</a>;
109<a name="l00174"></a><a class="code" href="classOscl__Queue.html#s2">00174</a>         <span class="keyword">typedef</span> T&amp; <a class="code" href="classOscl__Queue.html#s2">reference</a>;
110<a name="l00175"></a><a class="code" href="classOscl__Queue.html#s3">00175</a>         <span class="keyword">typedef</span> <span class="keyword">const</span> T&amp; <a class="code" href="classOscl__Queue.html#s3">const_reference</a>;
111<a name="l00176"></a><a class="code" href="classOscl__Queue.html#s4">00176</a>         <span class="keyword">typedef</span> uint32 <a class="code" href="classOscl__Queue.html#s4">size_type</a>;
11200177
113<a name="l00181"></a><a class="code" href="classOscl__Queue.html#a0">00181</a>         <a class="code" href="classOscl__Queue.html#a0">Oscl_Queue</a>() : <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>(), <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>()
11400182         {
11500183             <a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a> = <span class="keyword">sizeof</span>(T);
11600184             <a class="code" href="classOscl__Queue__Base.html#b0">Oscl_Queue_Base::construct</a>(<span class="keyword">this</span>);
11700185         }
11800186
119<a name="l00194"></a><a class="code" href="classOscl__Queue.html#a1">00194</a>         <a class="code" href="classOscl__Queue.html#a0">Oscl_Queue</a>(uint32 n) : <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>(), <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>()
12000195         {
12100196             <a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a> = <span class="keyword">sizeof</span>(T);
12200197             <a class="code" href="classOscl__Queue__Base.html#b0">Oscl_Queue_Base::construct</a>(<span class="keyword">this</span>, n);
12300198         }
12400199
125<a name="l00203"></a><a class="code" href="classOscl__Queue.html#a2">00203</a>         <span class="keyword">virtual</span> <a class="code" href="classOscl__Queue.html#a2">~Oscl_Queue</a>()
12600204         {
12700205             <a class="code" href="classOscl__Queue__Base.html#b3">Oscl_Queue_Base::destroy</a>();
12800206         }
12900207
130<a name="l00213"></a><a class="code" href="classOscl__Queue.html#a3">00213</a>         <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue.html#a3">push</a>(<span class="keyword">const</span> T&amp; x)
13100214         {
13200215             <a class="code" href="classOscl__Queue__Base.html#b4">Oscl_Queue_Base::push</a>(&amp;x);
13300216         }
13400217
135<a name="l00221"></a><a class="code" href="classOscl__Queue.html#a4">00221</a>         <a class="code" href="classOscl__Queue.html#s2">reference</a> <a class="code" href="classOscl__Queue.html#a4">front</a>()
13600222         {
13700223             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
13800224             <span class="keywordflow">return</span> (reference)((pointer)<a class="code" href="classOscl__Queue__Base.html#n2">elems</a>)[<a class="code" href="classOscl__Queue__Base.html#n4">ifront</a>];
13900225         }
14000226
141<a name="l00230"></a><a class="code" href="classOscl__Queue.html#a5">00230</a>         <a class="code" href="classOscl__Queue.html#s3">const_reference</a> <a class="code" href="classOscl__Queue.html#a4">front</a>()<span class="keyword"> const</span>
14200231 <span class="keyword">        </span>{
14300232             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
14400233             <span class="keywordflow">return</span> (const_reference)((pointer)<a class="code" href="classOscl__Queue__Base.html#n2">elems</a>)[<a class="code" href="classOscl__Queue__Base.html#n4">ifront</a>];
14500234         }
14600235
14700236
148<a name="l00240"></a><a class="code" href="classOscl__Queue.html#a6">00240</a>         <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue.html#a6">pop</a>()
14900241         {
15000242             <a class="code" href="classOscl__Queue__Base.html#b5">Oscl_Queue_Base::pop</a>();
15100243         }
15200244
153<a name="l00250"></a><a class="code" href="classOscl__Queue.html#a7">00250</a>         <a class="code" href="classOscl__Queue.html#s2">reference</a> <a class="code" href="classOscl__Queue.html#a7">back</a>()
15400251         {
15500252             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
15600253             <span class="keywordflow">return</span> (reference)((pointer)<a class="code" href="classOscl__Queue__Base.html#n2">elems</a>)[<a class="code" href="classOscl__Queue__Base.html#n5">irear</a>];
15700254         }
15800255
159<a name="l00259"></a><a class="code" href="classOscl__Queue.html#a8">00259</a>         <a class="code" href="classOscl__Queue.html#s3">const_reference</a> <a class="code" href="classOscl__Queue.html#a7">back</a>()<span class="keyword"> const</span>
16000260 <span class="keyword">        </span>{
16100261             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
16200262             <span class="keywordflow">return</span> (const_reference)((pointer)<a class="code" href="classOscl__Queue__Base.html#n2">elems</a>)[<a class="code" href="classOscl__Queue__Base.html#n5">irear</a>];
16300263         }
16400264
165<a name="l00268"></a><a class="code" href="classOscl__Queue.html#a9">00268</a>         <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue.html#a9">clear</a>()
16600269         {
16700270             <a class="code" href="classOscl__Queue__Base.html#b6">Oscl_Queue_Base::clear</a>();
16800271         }
16900272
17000283     <span class="keyword">private</span>:
17100284         Alloc defAlloc;
17200285
17300286         <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
17400287         <a class="code" href="group__osclbase.html#a25">OsclAny</a>* <a class="code" href="classOscl__Opaque__Type__Alloc.html#a2">allocate</a>(<span class="keyword">const</span> uint32 <a class="code" href="classOscl__Queue__Base.html#a0">size</a>)
17500288         {
17600289             <span class="keywordflow">return</span> defAlloc.allocate(<a class="code" href="classOscl__Queue__Base.html#a0">size</a>);
17700290         }
17800291
17900292         <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
18000293         <span class="keywordtype">void</span> <a class="code" href="classOscl__Opaque__Type__Alloc.html#a3">deallocate</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* p)
18100294         {
18200295             defAlloc.deallocate(p);
18300296         }
18400297
18500298         <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
18600299         <span class="keywordtype">void</span> <a class="code" href="classOscl__Opaque__Type__Alloc.html#a0">construct</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* p, <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* x)
18700300         {
18800301             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(x);
18900302             <span class="keyword">new</span>(p) <a class="code" href="classOscl__Queue.html#s0">value_type</a>(*((T*)x));
19000303         }
19100304
19200305         <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
19300306         <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b3">destroy</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* first)
19400307         {
19500308             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(first);
19600309             <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(first);
19700310             <span class="comment">//must use "pointer" instead of "T*" here to avoid ADS 1.2 compile error.</span>
19800311             ((pointer)first)-&gt;~T();
19900312         }
20000313
20100314
20200315         <span class="comment">/***************************</span>
20300316 <span class="comment">         * things we don't believe are needed</span>
20400317 <span class="comment">         * -- private definitions to block implicit ones --</span>
20500318 <span class="comment">         */</span>
20600319
20700325         <a class="code" href="classOscl__Queue.html">Oscl_Queue&lt;T, Alloc&gt;</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classOscl__Queue.html">Oscl_Queue&lt;T, Alloc&gt;</a>&amp; x)
20800326         {
20900327             <span class="comment">// Do we need to copy a queue?  Why...?</span>
21000328             <span class="comment">//  .. unless there's a need, let's not bother with the</span>
21100329             <span class="comment">//  complexity here..</span>
21200330             <span class="comment">// (need something here, we don't want implicit assignment either</span>
21300331             <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(x);
21400332             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(<span class="keyword">false</span>);
21500333             <span class="keywordflow">return</span> *<span class="keyword">this</span>;
21600334         }
21700335
21800341         <a class="code" href="classOscl__Queue.html#a0">Oscl_Queue</a>(<span class="keyword">const</span> <a class="code" href="classOscl__Queue.html">Oscl_Queue&lt;T, Alloc&gt;</a>&amp; x)
21900342                 : <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>(sizeof(T), this, this)
22000343         {
22100344             <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(x);
22200345             <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(<span class="keyword">false</span>);
22300346         }
22400347 };  <span class="comment">// end class oscl_queue</span>
22500348
22600352 <span class="preprocessor">#endif</span>
22700353 <span class="preprocessor"></span>
22800354
229</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
230<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
231</small></address>
232</body>
233</html>
234