• 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_error.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_error.h</h1><a href="oscl__error_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 _ E R R O R</span>
1300005
1400006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
1500007
1600018 <span class="preprocessor">#ifndef OSCL_ERROR_H_INCLUDED</span>
1700019 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_ERROR_H_INCLUDED</span>
1800020 <span class="preprocessor"></span>
1900021 <span class="preprocessor">#ifndef OSCL_HEAPBASE_H_INCLUDED</span>
2000022 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__heapbase_8h.html">oscl_heapbase.h</a>"</span>
2100023 <span class="preprocessor">#endif</span>
2200024 <span class="preprocessor"></span>
2300025 <span class="preprocessor">#ifndef OSCL_DEFALLOC_H_INCLUDED</span>
2400026 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__defalloc_8h.html">oscl_defalloc.h</a>"</span>
2500027 <span class="preprocessor">#endif</span>
2600028 <span class="preprocessor"></span>
2700029 <span class="preprocessor">#ifndef OSCL_ERROR_CODES_H_INCLUDED</span>
2800030 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__error__codes_8h.html">oscl_error_codes.h</a>"</span>
2900031 <span class="preprocessor">#endif</span>
3000032 <span class="preprocessor"></span>
3100036 <span class="keyword">class </span><a class="code" href="classOsclErrorTrapImp.html">OsclErrorTrapImp</a>;
32<a name="l00037"></a><a class="code" href="classOsclErrorTrap.html">00037</a> <span class="keyword">class </span><a class="code" href="classOsclErrorTrap.html">OsclErrorTrap</a>
3300038 {
3400039     <span class="keyword">public</span>:
3500047         OSCL_IMPORT_REF <span class="keyword">static</span> int32 <a class="code" href="classOsclErrorTrap.html#d0">Init</a>(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> *aAlloc = <a class="code" href="group__osclbase.html#a81">NULL</a>);
3600053         OSCL_IMPORT_REF <span class="keyword">static</span> int32 <a class="code" href="classOsclErrorTrap.html#d1">Cleanup</a>();
3700058         OSCL_IMPORT_REF <span class="keyword">static</span> <a class="code" href="classOsclErrorTrapImp.html">OsclErrorTrapImp</a>* <a class="code" href="classOsclErrorTrap.html#d2">GetErrorTrapImp</a>();
3800059 };
3900060
4000061
41<a name="l00065"></a><a class="code" href="classOsclError.html">00065</a> <span class="keyword">class </span><a class="code" href="classOsclError.html">OsclError</a>
4200066 {
4300067     <span class="keyword">public</span>:
4400074         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d0">PushL</a>(<a class="code" href="class__OsclHeapBase.html">_OsclHeapBase</a> * aPtr);
4500075
4600078         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d0">PushL</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* aPtr);
4700079
4800082         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d0">PushL</a>(<a class="code" href="classOsclTrapItem.html">OsclTrapItem</a> anItem);
4900083
5000086         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d3">Pop</a>();
5100087
5200090         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d3">Pop</a>(int32 aCount);
5300091
5400095         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d5">PopDealloc</a>();
5500096
5600099         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d5">PopDealloc</a>(int32 aCount);
5700100
5800106         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d7">Leave</a>(int32 aReason);
5900107
6000111         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d8">LeaveIfNull</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a> *a);
6100112
6200117         OSCL_IMPORT_REF <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclError.html#d9">LeaveIfError</a>(int32 aReason);
6300118
6400119 };
6500120
66<a name="l00123"></a><a class="code" href="group__osclerror.html#a8">00123</a> <span class="preprocessor">#define OSCL_TRAPSTACK_PUSH(a) OsclError::PushL(a)</span>
67<a name="l00124"></a><a class="code" href="group__osclerror.html#a9">00124</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TRAPSTACK_POP() OsclError::Pop()</span>
68<a name="l00125"></a><a class="code" href="group__osclerror.html#a10">00125</a> <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TRAPSTACK_POPDEALLOC() OsclError::PopDealloc()</span>
6900126 <span class="preprocessor"></span>
7000131 <span class="comment">//Map TPVBaseErrorEnum return codes to Oscl Error leave codes</span>
7100132 <span class="comment">//Some of these codes indicate failure to init Oscl layer, in</span>
7200133 <span class="comment">//that case they map to zero and assert.</span>
7300134 <span class="keyword">static</span> <span class="keyword">const</span> int32 _OsclBaseToErrorMap[] =
7400135 {
7500136     <span class="comment">/*0*/</span><a class="code" href="group__osclerror.html#a12">OsclErrGeneral</a>
7600137     ,<span class="comment">/*EPVErrorBaseNotInstalled=1*/</span>0
7700138     ,<span class="comment">/*EPVErrorBaseAlreadyInstalled=2*/</span><a class="code" href="group__osclerror.html#a28">OsclErrAlreadyInstalled</a>
7800139     ,<span class="comment">/*EPVErrorBaseOutOfMemory=3*/</span><a class="code" href="group__osclerror.html#a13">OsclErrNoMemory</a>
7900140     ,<span class="comment">/*EPVErrorBaseSystemCallFailed=4*/</span><a class="code" href="group__osclerror.html#a29">OsclErrSystemCallFailed</a>
8000141     ,<span class="comment">/*EPVErrorBaseTooManyThreads=5*/</span>0
8100142     ,<span class="comment">/*EPVErrorBaseNotSupported=6*/</span><a class="code" href="group__osclerror.html#a15">OsclErrNotSupported</a>
8200143     ,<span class="comment">/*EPVErrorBaseNotReady=7*/</span><a class="code" href="group__osclerror.html#a20">OsclErrNotReady</a>
8300144 };
8400145
8500146 <span class="preprocessor">#include "<a class="code" href="oscl__singleton_8h.html">oscl_singleton.h</a>"</span>
8600147 <span class="preprocessor">#include "<a class="code" href="oscl__assert_8h.html">oscl_assert.h</a>"</span>
8700148 <span class="preprocessor">#if(OSCL_HAS_SINGLETON_SUPPORT)</span>
8800149 <span class="preprocessor"></span><span class="keyword">class </span>OsclSingletonRegistryEx
8900150 {
9000151     <span class="keyword">public</span>:
9100152         <span class="comment">/*</span>
9200153 <span class="comment">        ** Get an entry</span>
9300154 <span class="comment">        ** @param ID: identifier</span>
9400155 <span class="comment">        ** @returns: the entry value</span>
9500156 <span class="comment">        ** @exception: leaves on error.</span>
9600157 <span class="comment">        */</span>
9700158         <span class="keyword">static</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* getInstance(uint32 ID)
9800159         {
9900160             int32 error;
10000161             <a class="code" href="group__osclbase.html#a25">OsclAny</a>* val = <a class="code" href="classOsclSingletonRegistry.html#d0">OsclSingletonRegistry::getInstance</a>(ID, error);
10100162             <span class="keywordflow">if</span> (error)
10200163             {
10300164                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
10400165                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
10500166             }
10600167             <span class="keywordflow">return</span> val;
10700168         }
10800169
10900170         <span class="comment">/*</span>
11000171 <span class="comment">        ** Set an entry</span>
11100172 <span class="comment">        ** @param ID: identifier</span>
11200173 <span class="comment">        ** @returns: the entry value</span>
11300174 <span class="comment">        ** @exception: leaves on error.</span>
11400175 <span class="comment">        */</span>
11500176         <span class="keyword">static</span> <span class="keywordtype">void</span> registerInstance(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* ptr, uint32 ID)
11600177         {
11700178             int32 error;
11800179             <a class="code" href="classOsclSingletonRegistry.html#d1">OsclSingletonRegistry::registerInstance</a>(ptr, ID, error);
11900180             <span class="keywordflow">if</span> (error)
12000181             {
12100182                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
12200183                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
12300184             }
12400185         }
12500186
12600187         <span class="comment">/*</span>
12700188 <span class="comment">        //These two APIs can be used to do "test and set" operations on a singleton.</span>
12800189 <span class="comment">        //Be sure to always call both APIs to avoid deadlock.</span>
12900190 <span class="comment">        */</span>
13000191
13100192         <span class="comment">/*</span>
13200193 <span class="comment">        * Return the current value of the singleton and leave the singleton table locked</span>
13300194 <span class="comment">        * on return.</span>
13400195 <span class="comment">        * @param ID the singleton ID</span>
13500196 <span class="comment">        * @returns the singleton value.</span>
13600197 <span class="comment">        ** @exception: leaves on error.</span>
13700198 <span class="comment">        */</span>
13800199         <span class="keyword">static</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* lockAndGetInstance(uint32 ID)
13900200         {
14000201             int32 error;
14100202             <a class="code" href="group__osclbase.html#a25">OsclAny</a>* val = <a class="code" href="classOsclSingletonRegistry.html#d2">OsclSingletonRegistry::lockAndGetInstance</a>(ID, error);
14200203             <span class="keywordflow">if</span> (error)
14300204             {
14400205                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
14500206                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
14600207             }
14700208             <span class="keywordflow">return</span> val;
14800209         }
14900210
15000211         <span class="comment">/*</span>
15100212 <span class="comment">        * Set the value of the singleton.  Assume the singleton table is locked on entry.</span>
15200213 <span class="comment">        * @param ptr the singleton value</span>
15300214 <span class="comment">        * @param ID the singleton ID</span>
15400215 <span class="comment">        ** @exception: leaves on error.</span>
15500216 <span class="comment">        */</span>
15600217         <span class="keyword">static</span> <span class="keywordtype">void</span> registerInstanceAndUnlock(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* ptr, uint32 ID)
15700218         {
15800219             int32 error;
15900220             <a class="code" href="classOsclSingletonRegistry.html#d3">OsclSingletonRegistry::registerInstanceAndUnlock</a>(ptr, ID, error);
16000221             <span class="keywordflow">if</span> (error)
16100222             {
16200223                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
16300224                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
16400225             }
16500226         }
16600227 };
16700228
16800229 <span class="keyword">template</span> &lt; <span class="keyword">class</span> T, u<span class="keywordtype">int</span>32 ID, <span class="keyword">class</span> Registry = OsclSingletonRegistryEx &gt; <span class="keyword">class </span>OsclSingletonEx
16900230 {
17000231     <span class="keyword">private</span>:
17100232         <span class="comment">// make the copy constructor and assignment operator private</span>
17200233         OsclSingletonEx&amp; operator=(OsclSingletonEx&amp; _Y)
17300234         {
17400235             <span class="keywordflow">return</span>(*this);
17500236         }
17600237
17700238     <span class="keyword">protected</span>:
17800239         T* _Ptr;
17900240
18000241     <span class="keyword">public</span>:
18100242         OsclSingletonEx(): _Ptr(<a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID))) {};
18200243
18300244         ~OsclSingletonEx() {};
18400245
18500253         T&amp; operator*()<span class="keyword"> const</span>
18600254 <span class="keyword">        </span>{
18700255             <span class="keywordflow">return</span>(*_Ptr);
18800256         }
18900257
19000265         T *operator-&gt;()<span class="keyword"> const</span>
19100266 <span class="keyword">        </span>{
19200267             <span class="keywordflow">return</span>(_Ptr);
19300268         }
19400269
19500270
19600277         <span class="keywordtype">bool</span> set()
19700278         {
19800279             _Ptr = <a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID));
19900280             <span class="keywordflow">return</span> (_Ptr ? <span class="keyword">true</span> : <span class="keyword">false</span>);
20000281         }
20100282
20200283 };
20300284 <span class="preprocessor">#endif //OSCL_HAS_SINGLETON_SUPPORT</span>
20400285 <span class="preprocessor"></span>
20500286 <span class="preprocessor">#include "<a class="code" href="oscl__tls_8h.html">oscl_tls.h</a>"</span>
20600287 <span class="preprocessor">#include "<a class="code" href="oscl__assert_8h.html">oscl_assert.h</a>"</span>
207<a name="l00288"></a><a class="code" href="classOsclTLSRegistryEx.html">00288</a> <span class="keyword">class </span><a class="code" href="classOsclTLSRegistryEx.html">OsclTLSRegistryEx</a>
20800289 {
20900290     <span class="keyword">public</span>:
21000291         <span class="comment">/*</span>
21100292 <span class="comment">        ** Get an entry</span>
21200293 <span class="comment">        ** @param ID: identifier</span>
21300294 <span class="comment">        ** @returns: the entry value</span>
21400295 <span class="comment">        ** @exception: leaves on error.</span>
21500296 <span class="comment">        */</span>
216<a name="l00297"></a><a class="code" href="classOsclTLSRegistryEx.html#d0">00297</a>         <span class="keyword">static</span> <a class="code" href="group__osclbase.html#a25">OsclAny</a>* <a class="code" href="classOsclTLSRegistryEx.html#d0">getInstance</a>(uint32 ID)
21700298         {
21800299             int32 error;
21900300             <a class="code" href="group__osclbase.html#a25">OsclAny</a>* val = <a class="code" href="classOsclTLSRegistry.html#d0">OsclTLSRegistry::getInstance</a>(ID, error);
22000301             <span class="keywordflow">if</span> (error)
22100302             {
22200303                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
22300304                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
22400305             }
22500306             <span class="keywordflow">return</span> val;
22600307         }
22700308         <span class="comment">/*</span>
22800309 <span class="comment">        ** Set an entry</span>
22900310 <span class="comment">        ** @param ID: identifier</span>
23000311 <span class="comment">        ** @returns: the entry value</span>
23100312 <span class="comment">        ** @exception: leaves on error.</span>
23200313 <span class="comment">        */</span>
233<a name="l00314"></a><a class="code" href="classOsclTLSRegistryEx.html#d1">00314</a>         <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclTLSRegistryEx.html#d1">registerInstance</a>(<a class="code" href="group__osclbase.html#a25">OsclAny</a>* ptr, uint32 ID)
23400315         {
23500316             int32 error;
23600317             <a class="code" href="classOsclTLSRegistry.html#d1">OsclTLSRegistry::registerInstance</a>(ptr, ID, error);
23700318             <span class="keywordflow">if</span> (error)
23800319             {
23900320                 <a class="code" href="group__osclbase.html#a78">OSCL_ASSERT</a>(_OsclBaseToErrorMap[error]);
24000321                 <a class="code" href="classOsclError.html#d7">OsclError::Leave</a>(_OsclBaseToErrorMap[error]);
24100322             }
24200323         }
24300324 };
24400325
245<a name="l00326"></a><a class="code" href="classOsclTLSEx.html">00326</a> <span class="keyword">template</span> &lt; <span class="keyword">class</span> T, u<span class="keywordtype">int</span>32 ID, <span class="keyword">class</span> Registry = OsclTLSRegistryEx &gt; <span class="keyword">class </span><a class="code" href="classOsclTLSEx.html">OsclTLSEx</a>
24600327 {
24700328     <span class="keyword">private</span>:
24800329         <span class="comment">// make the copy constructor and assignment operator private</span>
24900330         <a class="code" href="classOsclTLSEx.html">OsclTLSEx</a>&amp; operator=(<a class="code" href="classOsclTLSEx.html">OsclTLSEx</a>&amp; _Y)
25000331         {
25100332             <span class="keywordflow">return</span>(*this);
25200333         }
25300334
25400335     <span class="keyword">protected</span>:
255<a name="l00336"></a><a class="code" href="classOsclTLSEx.html#n0">00336</a>         T* <a class="code" href="classOsclTLSEx.html#n0">_Ptr</a>;
25600337
25700338     <span class="keyword">public</span>:
258<a name="l00339"></a><a class="code" href="classOsclTLSEx.html#a0">00339</a>         <a class="code" href="classOsclTLSEx.html#a0">OsclTLSEx</a>(): <a class="code" href="classOsclTLSEx.html#n0">_Ptr</a>(<a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID))) {};
25900340
260<a name="l00341"></a><a class="code" href="classOsclTLSEx.html#a1">00341</a>         <a class="code" href="classOsclTLSEx.html#a1">~OsclTLSEx</a>() {};
26100342
262<a name="l00350"></a><a class="code" href="classOsclTLSEx.html#a2">00350</a>         T&amp; <a class="code" href="classOsclTLSEx.html#a2">operator*</a>()<span class="keyword"> const</span>
26300351 <span class="keyword">        </span>{
26400352             <span class="keywordflow">return</span>(*_Ptr);
26500353         }
26600354
267<a name="l00362"></a><a class="code" href="classOsclTLSEx.html#a3">00362</a>         T *<a class="code" href="classOsclTLSEx.html#a3">operator-&gt;</a>()<span class="keyword"> const</span>
26800363 <span class="keyword">        </span>{
26900364             <span class="keywordflow">return</span>(_Ptr);
27000365         }
27100366
27200367
273<a name="l00374"></a><a class="code" href="classOsclTLSEx.html#a4">00374</a>         <span class="keywordtype">bool</span> <a class="code" href="classOsclTLSEx.html#a4">set</a>()
27400375         {
27500376             <a class="code" href="classOsclTLSEx.html#n0">_Ptr</a> = <a class="code" href="group__osclbase.html#a86">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID));
27600377             <span class="keywordflow">return</span> (<a class="code" href="classOsclTLSEx.html#n0">_Ptr</a> ? <span class="keyword">true</span> : <span class="keyword">false</span>);
27700378         }
27800379
27900380 };
28000381
28100382 <span class="preprocessor">#endif</span>
28200383 <span class="preprocessor"></span>
283</pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
284<address style="align: left;"><small>Posting Version: OPENCORE_20090310 </small>
285</small></address>
286</body>
287</html>
288