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> <a class="qindex" href="modules.html">Modules</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Data Structures</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Data Fields</a> <a class="qindex" href="globals.html">Globals</a> </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> < <span class="keyword">class</span> T, u<span class="keywordtype">int</span>32 ID, <span class="keyword">class</span> Registry = OsclSingletonRegistryEx > <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& operator=(OsclSingletonEx& _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& operator*()<span class="keyword"> const</span> 18600254 <span class="keyword"> </span>{ 18700255 <span class="keywordflow">return</span>(*_Ptr); 18800256 } 18900257 19000265 T *operator->()<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> < <span class="keyword">class</span> T, u<span class="keywordtype">int</span>32 ID, <span class="keyword">class</span> Registry = OsclTLSRegistryEx > <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>& operator=(<a class="code" href="classOsclTLSEx.html">OsclTLSEx</a>& _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& <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-></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