blob: 6972374ac72d5838f6ca6796ed2ad18968b39fa7 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>oscl_queue.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<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>
<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>
00002
00003
00004
00005 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00006
00007 <span class="comment">// O S C L _ Q U E U E</span>
00008 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
00009
00024 <span class="preprocessor">#ifndef OSCL_QUEUE_H_INCLUDED</span>
00025 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_QUEUE_H_INCLUDED</span>
00026 <span class="preprocessor"></span>
00027 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
00028 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
00029 <span class="preprocessor">#endif</span>
00030 <span class="preprocessor"></span>
00031 <span class="preprocessor">#ifndef OSCL_MEM_BASIC_FUNCTIONS_H_INCLUDED</span>
00032 <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>
00033 <span class="preprocessor">#endif</span>
00034 <span class="preprocessor"></span>
00035 <span class="preprocessor">#ifndef OSCL_ASSERT_H_INCLUDED</span>
00036 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__assert_8h.html">oscl_assert.h</a>"</span>
00037 <span class="preprocessor">#endif</span>
00038 <span class="preprocessor"></span>
00039 <span class="preprocessor">#ifndef OSCL_OPAQUE_TYPE_H_INCLUDED</span>
00040 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__opaque__type_8h.html">oscl_opaque_type.h</a>"</span>
00041 <span class="preprocessor">#endif</span>
00042 <span class="preprocessor"></span>
<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>
00051 {
00052 <span class="keyword">public</span>:
00053
<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>
00058 <span class="keyword"> </span>{
00059 <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n0">numelems</a>;
00060 }
00061
<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>
00066 <span class="keyword"> </span>{
00067 <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n1">bufsize</a>;
00068 }
00069
<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>
00074 <span class="keyword"> </span>{
00075 <span class="keywordflow">return</span> <a class="code" href="classOscl__Queue__Base.html#n0">numelems</a> == 0;
00076 }
00077
00086 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#a3">reserve</a>(uint32 n) ;
00087
00088 <span class="keyword">protected</span>:
00089
00090 <span class="comment">//for use in default constructor. vtable is needed so this is a subroutine.</span>
00091 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);
00092
00093 <span class="comment">//for use in constructor with pre-allocation for "n" elements.</span>
00094 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) ;
00095
<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>()
00100 {}
00101
00105 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b3">destroy</a>();
00106
00112 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) ;
00113
00117 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b5">pop</a>() ;
00118
00122 OSCL_IMPORT_REF <span class="keywordtype">void</span> <a class="code" href="classOscl__Queue__Base.html#b6">clear</a>() ;
00123
<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>
<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>
<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>
<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>;
00128
<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>
<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>
00131
00132 <span class="keyword">private</span>:
00133
00137 <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>
00138 <span class="keyword"> </span>{
00139 <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>);
00140 }
00141
00145 <a class="code" href="group__osclbase.html#a25">OsclAny</a>* front()
00146 {
00147 <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>);
00148 }
00149
00150 <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>* pOpaqueType;
00151 };
00152
00165 <span class="keyword">template</span>&lt;<span class="keyword">class</span> T, <span class="keyword">class</span> Alloc&gt;
<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>
00167 : <span class="keyword">public</span> <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>
00168 , <span class="keyword">public</span> <a class="code" href="classOscl__Opaque__Type__Alloc.html">Oscl_Opaque_Type_Alloc</a>
00169 {
00170
00171 <span class="keyword">public</span>:
<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>;
<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>;
<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>;
<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>;
<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>;
00177
<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>()
00182 {
00183 <a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a> = <span class="keyword">sizeof</span>(T);
00184 <a class="code" href="classOscl__Queue__Base.html#b0">Oscl_Queue_Base::construct</a>(<span class="keyword">this</span>);
00185 }
00186
<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>()
00195 {
00196 <a class="code" href="classOscl__Queue__Base.html#n3">sizeof_T</a> = <span class="keyword">sizeof</span>(T);
00197 <a class="code" href="classOscl__Queue__Base.html#b0">Oscl_Queue_Base::construct</a>(<span class="keyword">this</span>, n);
00198 }
00199
<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>()
00204 {
00205 <a class="code" href="classOscl__Queue__Base.html#b3">Oscl_Queue_Base::destroy</a>();
00206 }
00207
<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)
00214 {
00215 <a class="code" href="classOscl__Queue__Base.html#b4">Oscl_Queue_Base::push</a>(&amp;x);
00216 }
00217
<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>()
00222 {
00223 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
00224 <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>];
00225 }
00226
<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>
00231 <span class="keyword"> </span>{
00232 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
00233 <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>];
00234 }
00235
00236
<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>()
00241 {
00242 <a class="code" href="classOscl__Queue__Base.html#b5">Oscl_Queue_Base::pop</a>();
00243 }
00244
<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>()
00251 {
00252 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
00253 <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>];
00254 }
00255
<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>
00260 <span class="keyword"> </span>{
00261 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(! <a class="code" href="classOscl__Queue__Base.html#a2">empty</a>());
00262 <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>];
00263 }
00264
<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>()
00269 {
00270 <a class="code" href="classOscl__Queue__Base.html#b6">Oscl_Queue_Base::clear</a>();
00271 }
00272
00283 <span class="keyword">private</span>:
00284 Alloc defAlloc;
00285
00286 <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
00287 <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>)
00288 {
00289 <span class="keywordflow">return</span> defAlloc.allocate(<a class="code" href="classOscl__Queue__Base.html#a0">size</a>);
00290 }
00291
00292 <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
00293 <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)
00294 {
00295 defAlloc.deallocate(p);
00296 }
00297
00298 <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
00299 <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)
00300 {
00301 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(x);
00302 <span class="keyword">new</span>(p) <a class="code" href="classOscl__Queue.html#s0">value_type</a>(*((T*)x));
00303 }
00304
00305 <span class="comment">//from Oscl_Opaque_Type_Alloc</span>
00306 <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)
00307 {
00308 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(first);
00309 <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(first);
00310 <span class="comment">//must use "pointer" instead of "T*" here to avoid ADS 1.2 compile error.</span>
00311 ((pointer)first)-&gt;~T();
00312 }
00313
00314
00315 <span class="comment">/***************************</span>
00316 <span class="comment"> * things we don't believe are needed</span>
00317 <span class="comment"> * -- private definitions to block implicit ones --</span>
00318 <span class="comment"> */</span>
00319
00325 <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)
00326 {
00327 <span class="comment">// Do we need to copy a queue? Why...?</span>
00328 <span class="comment">// .. unless there's a need, let's not bother with the</span>
00329 <span class="comment">// complexity here..</span>
00330 <span class="comment">// (need something here, we don't want implicit assignment either</span>
00331 <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(x);
00332 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(<span class="keyword">false</span>);
00333 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00334 }
00335
00341 <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)
00342 : <a class="code" href="classOscl__Queue__Base.html">Oscl_Queue_Base</a>(sizeof(T), this, this)
00343 {
00344 <a class="code" href="group__osclbase.html#a89">OSCL_UNUSED_ARG</a>(x);
00345 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(<span class="keyword">false</span>);
00346 }
00347 }; <span class="comment">// end class oscl_queue</span>
00348
00352 <span class="preprocessor">#endif</span>
00353 <span class="preprocessor"></span>
00354
</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
</small></address>
</body>
</html>