aboutsummaryrefslogtreecommitdiff
path: root/doc/oscl_html/oscl__tls_8h_source.html
blob: 862a6586c945856ad022d47b134cd8b66d1a9115 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>oscl: oscl_tls.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.3 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>oscl_tls.h</h1><a href="oscl__tls_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// -*- c++ -*-</span>
<a name="l00002"></a>00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00003"></a>00003 
<a name="l00004"></a>00004 <span class="comment">//                     O S C L _ T L S</span>
<a name="l00005"></a>00005 
<a name="l00006"></a>00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
<a name="l00007"></a>00007 
<a name="l00022"></a>00022 <span class="preprocessor">#ifndef OSCL_TLS_H_INCLUDED</span>
<a name="l00023"></a>00023 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_H_INCLUDED</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="oscl__base_8h.html" title="The file oscl_base.h is the public header that should be included to pick up the...">oscl_base.h</a>&quot;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#endif</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="preprocessor">#ifndef OSCL_DEFALLOC_H_INCLUDED</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="oscl__defalloc_8h.html" title="The file defines simple default memory allocator classes. These allocators are used...">oscl_defalloc.h</a>&quot;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#endif</span>
<a name="l00032"></a>00032 <span class="preprocessor"></span>
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 <span class="preprocessor">#if (OSCL_TLS_IS_KEYED)</span>
<a name="l00035"></a>00035 <span class="preprocessor"></span>
<a name="l00036"></a>00036 <span class="comment">//Keyed TLS requires global variable support</span>
<a name="l00037"></a>00037 <span class="preprocessor">#else</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span>
<a name="l00039"></a>00039 <span class="comment">//unused value.</span>
<a name="l00040"></a><a class="code" href="group__osclbase.html#ga723fadcc6e6137090da5371f44113941">00040</a> <span class="keyword">typedef</span> <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a> <a class="code" href="osclconfig__unix__common_8h.html#acf133db98748e490349e48d01b60b5bf">TOsclTlsKey</a>;
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="preprocessor">#endif //OSCL_TLS_IS_KEYED</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="comment">// list of TLS objects</span>
<a name="l00046"></a><a class="code" href="group__osclbase.html#gaf05abfcb99d7bb5fbd12a7e0c7c09896">00046</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#gaf05abfcb99d7bb5fbd12a7e0c7c09896">OSCL_TLS_ID_MAGICNUM</a>       = 0;
<a name="l00047"></a><a class="code" href="group__osclbase.html#ga8bff100b390508716ae12b5bf0412314">00047</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga8bff100b390508716ae12b5bf0412314">OSCL_TLS_ID_ERRORHOOK</a>      = 1;
<a name="l00048"></a><a class="code" href="group__osclbase.html#ga85fa72a03af9bc9e223676567cd80b80">00048</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga85fa72a03af9bc9e223676567cd80b80">OSCL_TLS_ID_PVLOGGER</a>       = 2;
<a name="l00049"></a><a class="code" href="group__osclbase.html#gac1f0ea024ee0bc4eb7618fc97afb4fb3">00049</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#gac1f0ea024ee0bc4eb7618fc97afb4fb3">OSCL_TLS_ID_TEST</a>           = 3;
<a name="l00050"></a><a class="code" href="group__osclbase.html#ga3b2de080edef7853c12aee984b8b7b87">00050</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga3b2de080edef7853c12aee984b8b7b87">OSCL_TLS_ID_PVSCHEDULER</a>    = 4;
<a name="l00051"></a><a class="code" href="group__osclbase.html#ga4cb20f79d59ec0ec4815d5da685b5d13">00051</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga4cb20f79d59ec0ec4815d5da685b5d13">OSCL_TLS_ID_PVERRORTRAP</a>    = 5;
<a name="l00052"></a><a class="code" href="group__osclbase.html#ga969661abc3703a924f229b3381f619b8">00052</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga969661abc3703a924f229b3381f619b8">OSCL_TLS_ID_SDPMEDIAPARSER</a> = 6;
<a name="l00053"></a><a class="code" href="group__osclbase.html#ga22410997b5ef50aad7043a5f09970d0e">00053</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga22410997b5ef50aad7043a5f09970d0e">OSCL_TLS_ID_PAYLOADPARSER</a>  = 7;
<a name="l00054"></a><a class="code" href="group__osclbase.html#ga7978d8f58faa5bb6f5518c87c9c40031">00054</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga7978d8f58faa5bb6f5518c87c9c40031">OSCL_TLS_ID_PVMFRECOGNIZER</a> = 8;
<a name="l00055"></a><a class="code" href="group__osclbase.html#gab1a8e64f1f4762c8c0602ce17f3a5bff">00055</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#gab1a8e64f1f4762c8c0602ce17f3a5bff">OSCL_TLS_ID_WMDRM</a>          = 9;
<a name="l00056"></a><a class="code" href="group__osclbase.html#ga08c2f3b8b4804ae19ae2e0969ce8b571">00056</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga08c2f3b8b4804ae19ae2e0969ce8b571">OSCL_TLS_ID_OSCLREGISTRY</a>   = 10;
<a name="l00057"></a><a class="code" href="group__osclbase.html#ga8e7abb2560ae4dd75467ab2e4259b931">00057</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga8e7abb2560ae4dd75467ab2e4259b931">OSCL_TLS_ID_SQLITE3</a>        = 11;
<a name="l00058"></a><a class="code" href="group__osclbase.html#ga0c23193ed013c5e4a67592281baf590d">00058</a> <span class="keyword">const</span> uint32 <a class="code" href="group__osclbase.html#ga0c23193ed013c5e4a67592281baf590d">OSCL_TLS_ID_BASE_LAST</a>      = 11; <span class="comment">// should always equal the largest ID defined here</span>
<a name="l00059"></a>00059 
<a name="l00060"></a><a class="code" href="group__osclbase.html#gad264e63e3eaaeff06fc893f6dc24c7be">00060</a> <span class="preprocessor">#define OSCL_TLS_BASE_SLOTS OSCL_TLS_ID_BASE_LAST +1</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span>
<a name="l00062"></a>00062 <span class="comment">//There may be additional slots defined in the osclconfig.h for the build.</span>
<a name="l00063"></a>00063 <span class="preprocessor">#ifndef OSCL_TLS_EXTERNAL_SLOTS</span>
<a name="l00064"></a>00064 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_TLS_EXTERNAL_SLOTS 0</span>
<a name="l00065"></a>00065 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00066"></a>00066 <span class="preprocessor"></span>
<a name="l00067"></a><a class="code" href="group__osclbase.html#gab87cbf8399e2eab2a9f4de8e70c50815">00067</a> <span class="preprocessor">#define OSCL_TLS_MAX_SLOTS ( OSCL_TLS_BASE_SLOTS + OSCL_TLS_EXTERNAL_SLOTS)</span>
<a name="l00068"></a>00068 <span class="preprocessor"></span>
<a name="l00069"></a><a class="code" href="classTLSStorageOps.html">00069</a> <span class="keyword">class </span><a class="code" href="classTLSStorageOps.html">TLSStorageOps</a>
<a name="l00070"></a>00070 {
<a name="l00071"></a>00071     <span class="keyword">public</span>:
<a name="l00072"></a>00072         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classTLSStorageOps.html#aafdc087b5187d3188d950d487e6afcfb">save_registry</a>(<a class="code" href="osclconfig__unix__common_8h.html#acf133db98748e490349e48d01b60b5bf">TOsclTlsKey</a>* key, <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* ptr, int32&amp;);
<a name="l00073"></a>00073         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* <a class="code" href="classTLSStorageOps.html#af6bde0edccc3b9ea8f9d347710475eb3">get_registry</a>(<a class="code" href="osclconfig__unix__common_8h.html#acf133db98748e490349e48d01b60b5bf">TOsclTlsKey</a>* key);
<a name="l00074"></a>00074 };
<a name="l00075"></a>00075 
<a name="l00076"></a><a class="code" href="classOsclTLSRegistry.html">00076</a> <span class="keyword">class </span><a class="code" href="classOsclTLSRegistry.html">OsclTLSRegistry</a>
<a name="l00077"></a>00077 {
<a name="l00078"></a>00078     <span class="keyword">public</span>:
<a name="l00079"></a>00079         <span class="comment">/*</span>
<a name="l00080"></a>00080 <span class="comment">        ** Get an entry</span>
<a name="l00081"></a>00081 <span class="comment">        ** @param ID: identifier</span>
<a name="l00082"></a>00082 <span class="comment">        ** @param error (output) 0 for success or an error from TPVBaseErrorEnum</span>
<a name="l00083"></a>00083 <span class="comment">        ** @returns: the entry value</span>
<a name="l00084"></a>00084 <span class="comment">        */</span>
<a name="l00085"></a>00085         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* <a class="code" href="classOsclTLSRegistry.html#aa09deaff0db320d880bfeede869a95a2">getInstance</a>(uint32 ID, int32 &amp;error);
<a name="l00086"></a>00086         <span class="comment">/*</span>
<a name="l00087"></a>00087 <span class="comment">        ** Set an entry</span>
<a name="l00088"></a>00088 <span class="comment">        ** @param ID: identifier</span>
<a name="l00089"></a>00089 <span class="comment">        ** @param error (output) 0 for success or an error from TPVBaseErrorEnum</span>
<a name="l00090"></a>00090 <span class="comment">        ** @returns: the entry value</span>
<a name="l00091"></a>00091 <span class="comment">        */</span>
<a name="l00092"></a>00092         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classOsclTLSRegistry.html#a221ab904bd28fded903cbac2014a1cc3">registerInstance</a>(<a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* ptr, uint32 ID, int32 &amp;error);
<a name="l00093"></a>00093 
<a name="l00094"></a>00094     <span class="keyword">private</span>:
<a name="l00095"></a>00095         <a class="code" href="classOsclTLSRegistry.html">OsclTLSRegistry</a>()
<a name="l00096"></a>00096         {}
<a name="l00097"></a>00097         <span class="keyword">typedef</span> <a class="code" href="group__osclbase.html#ga3bac54662348f5e6c08b97ca97066b89" title="The OsclAny is meant to be used the context of a generic pointer (i.e., no specific...">OsclAny</a>* registry_type;
<a name="l00098"></a>00098         <span class="keyword">typedef</span> registry_type* registry_pointer_type;
<a name="l00099"></a>00099         <span class="keyword">static</span> _OsclBasicLock sLock;  <span class="comment">// _osclbaselock declaration with TLS registry and key</span>
<a name="l00100"></a>00100 
<a name="l00101"></a>00101 <span class="preprocessor">#if ( OSCL_TLS_IS_KEYED)</span>
<a name="l00102"></a>00102 <span class="preprocessor"></span>        <span class="keyword">class </span>TlsKey
<a name="l00103"></a>00103         {
<a name="l00104"></a>00104             <span class="keyword">public</span>:
<a name="l00105"></a>00105                 TlsKey(): iRefCnt(0), iOsclTlsKey(<a class="code" href="group__osclbase.html#ga070d2ce7b6bb7e5c05602aa8c308d0c4" title="The NULL_TERM_CHAR is used to terminate c-style strings.">NULL</a>)
<a name="l00106"></a>00106                 {}
<a name="l00107"></a>00107                 uint32 iRefCnt;
<a name="l00108"></a>00108                 <a class="code" href="osclconfig__unix__common_8h.html#acf133db98748e490349e48d01b60b5bf">TOsclTlsKey</a> *iOsclTlsKey;
<a name="l00109"></a>00109         };
<a name="l00110"></a>00110 
<a name="l00111"></a>00111         <span class="comment">//The key is a global variable.</span>
<a name="l00112"></a>00112         <span class="keyword">static</span> TlsKey* iTlsKey;
<a name="l00113"></a>00113 <span class="preprocessor">#endif</span>
<a name="l00114"></a>00114 <span class="preprocessor"></span>
<a name="l00115"></a>00115     <span class="keyword">private</span>:
<a name="l00116"></a>00116         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <span class="keywordtype">void</span> initialize(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;alloc, int32 &amp;error);
<a name="l00117"></a>00117         <a class="code" href="osclconfig_8h.html#a6de0f53c5c11f8f53ce72c70d74d9abc">OSCL_IMPORT_REF</a> <span class="keyword">static</span> <span class="keywordtype">void</span> cleanup(<a class="code" href="classOscl__DefAlloc.html">Oscl_DefAlloc</a> &amp;alloc, int32 &amp;error);
<a name="l00118"></a><a class="code" href="classOsclTLSRegistry.html#a0b2ab5d300f5cc97c0079e2c7204c9e9">00118</a>         <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclTLSRegistry.html#a0b2ab5d300f5cc97c0079e2c7204c9e9">OsclBase</a>;
<a name="l00119"></a>00119 
<a name="l00120"></a>00120 };
<a name="l00121"></a>00121 
<a name="l00122"></a><a class="code" href="classOsclTLS.html">00122</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 = OsclTLSRegistry &gt; <span class="keyword">class </span><a class="code" href="classOsclTLS.html">OsclTLS</a>
<a name="l00123"></a>00123 {
<a name="l00124"></a>00124     <span class="keyword">private</span>:
<a name="l00125"></a>00125         <span class="comment">// make the copy constructor and assignment operator private</span>
<a name="l00126"></a>00126         <a class="code" href="classOsclTLS.html">OsclTLS</a>&amp; operator=(<a class="code" href="classOsclTLS.html">OsclTLS</a>&amp; _Y)
<a name="l00127"></a>00127         {
<a name="l00128"></a>00128             <span class="keywordflow">return</span>(*<span class="keyword">this</span>);
<a name="l00129"></a>00129         }
<a name="l00130"></a>00130 
<a name="l00131"></a>00131     <span class="keyword">protected</span>:
<a name="l00132"></a><a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">00132</a>         T* <a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a>;
<a name="l00133"></a>00133 
<a name="l00134"></a>00134     <span class="keyword">public</span>:
<a name="l00135"></a><a class="code" href="classOsclTLS.html#ade1017a7b6ee07e24225c8b4097a0354">00135</a>         <a class="code" href="classOsclTLS.html#ade1017a7b6ee07e24225c8b4097a0354">OsclTLS</a>()
<a name="l00136"></a>00136         {
<a name="l00137"></a>00137             int32 err;
<a name="l00138"></a>00138             <a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a> = <a class="code" href="group__osclbase.html#ga6872259ca6fd7080c6299210e4b13a6f">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID, err));
<a name="l00139"></a>00139         }
<a name="l00140"></a>00140 
<a name="l00141"></a><a class="code" href="classOsclTLS.html#aae5edb33468f1792302fcf5041899c1d">00141</a>         <a class="code" href="classOsclTLS.html#aae5edb33468f1792302fcf5041899c1d">~OsclTLS</a>() {};
<a name="l00142"></a>00142 
<a name="l00150"></a><a class="code" href="classOsclTLS.html#ad6136c2c9432ecb3848ec08686cc28d2">00150</a>         T&amp; <a class="code" href="classOsclTLS.html#ad6136c2c9432ecb3848ec08686cc28d2" title="The indirection operator (*) accesses a value indirectly, through a pointer.">operator*</a>()<span class="keyword"> const</span>
<a name="l00151"></a>00151 <span class="keyword">        </span>{
<a name="l00152"></a>00152             <span class="keywordflow">return</span>(*<a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a>);
<a name="l00153"></a>00153         }
<a name="l00154"></a>00154 
<a name="l00162"></a><a class="code" href="classOsclTLS.html#a1fd460e76f1930cc986f8c370defdc2a">00162</a>         T *<a class="code" href="classOsclTLS.html#a1fd460e76f1930cc986f8c370defdc2a" title="The indirection operator (-&amp;gt;) accesses a value indirectly, through a pointer.">operator-&gt;</a>()<span class="keyword"> const</span>
<a name="l00163"></a>00163 <span class="keyword">        </span>{
<a name="l00164"></a>00164             <span class="keywordflow">return</span>(<a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a>);
<a name="l00165"></a>00165         }
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 
<a name="l00174"></a><a class="code" href="classOsclTLS.html#a41f768d84936e4836e7f64f53a28b534">00174</a>         <span class="keywordtype">bool</span> <span class="keyword">set</span>()
<a name="l00175"></a>00175         {
<a name="l00176"></a>00176             int32 err;
<a name="l00177"></a>00177             <a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a> = <a class="code" href="group__osclbase.html#ga6872259ca6fd7080c6299210e4b13a6f">OSCL_STATIC_CAST</a>(T*, Registry::getInstance(ID, err));
<a name="l00178"></a>00178             <span class="keywordflow">return</span> (<a class="code" href="classOsclTLS.html#a7b738c3b25dfbf2b037bc44d92b34f5c">_Ptr</a> ? <span class="keyword">true</span> : <span class="keyword">false</span>);
<a name="l00179"></a>00179         }
<a name="l00180"></a>00180 
<a name="l00181"></a>00181 };
<a name="l00182"></a>00182 
<a name="l00187"></a>00187 <span class="preprocessor">#endif</span>
<a name="l00188"></a>00188 <span class="preprocessor"></span>
</pre></div></div>
<hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
<address style="align: left;"><small>Posting Version: CORE_9.004.1.1 </small>
</small></address>
</body>
</html>