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_file_io.h Source File</title>
4 <link href="doxygen.css" rel="stylesheet" type="text/css">
6 <!-- Generated by Doxygen 1.2.18 -->
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> <a class="qindex" href="pages.html">Related Pages</a> </center>
9 <hr><h1>oscl_file_io.h</h1><a href="oscl__file__io_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <span class="comment">// -*- c++ -*-</span>
10 00002 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
12 00004 <span class="comment">// O S C L _ F I L E _ I O</span>
14 00006 <span class="comment">// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =</span>
16 00021 <span class="preprocessor">#ifndef OSCL_FILE_IO_H_INCLUDED</span>
17 00022 <span class="preprocessor"></span><span class="preprocessor">#define OSCL_FILE_IO_H_INCLUDED</span>
18 00023 <span class="preprocessor"></span>
19 00024 <span class="preprocessor">#ifndef OSCLCONFIG_IO_H_INCLUDED</span>
20 00025 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="osclconfig__io_8h.html">osclconfig_io.h</a>"</span>
21 00026 <span class="preprocessor">#endif</span>
22 00027 <span class="preprocessor"></span>
23 00028 <span class="preprocessor">#ifndef OSCL_BASE_H_INCLUDED</span>
24 00029 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__base_8h.html">oscl_base.h</a>"</span>
25 00030 <span class="preprocessor">#endif</span>
26 00031 <span class="preprocessor"></span>
27 00032 <span class="preprocessor">#ifndef OSCL_MEM_H_INCLUDED</span>
28 00033 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__mem_8h.html">oscl_mem.h</a>"</span>
29 00034 <span class="preprocessor">#endif</span>
30 00035 <span class="preprocessor"></span>
31 00036 <span class="preprocessor">#ifndef OSCL_VECTOR_H_INCLUDED</span>
32 00037 <span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="oscl__vector_8h.html">oscl_vector.h</a>"</span>
33 00038 <span class="preprocessor">#endif</span>
34 00039 <span class="preprocessor"></span>
35 00047 <span class="keyword">class </span><a class="code" href="classPVLogger.html">PVLogger</a>;
36 00048 <span class="keyword">class </span><a class="code" href="classOsclFileCache.html">OsclFileCache</a>;
37 00049 <span class="keyword">class </span><a class="code" href="classOsclFileCacheBuffer.html">OsclFileCacheBuffer</a>;
38 00050 <span class="keyword">class </span><a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>;
39 00051 <span class="keyword">class </span><a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>;
40 00052 <span class="keyword">class </span><a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>;
41 00053 <span class="keyword">class </span><a class="code" href="classOsclFileStats.html">OsclFileStats</a>;
42 00054 <span class="keyword">class </span><a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>;
43 00055 <span class="keyword">class </span><a class="code" href="classOsclAsyncFile.html">OsclAsyncFile</a>;
44 <a name="l00056"></a><a class="code" href="group__osclio.html#a18">00056</a> <span class="preprocessor">#define TOsclFileOffsetInt32 int32</span>
45 00057 <span class="preprocessor"></span>
46 <a name="l00058"></a><a class="code" href="classOscl__File.html">00058</a> <span class="keyword">class </span><a class="code" href="classOscl__File.html">Oscl_File</a> : <span class="keyword">public</span> <a class="code" href="classHeapBase.html">HeapBase</a>
48 00060 <span class="keyword">public</span>:
50 <a name="l00062"></a><a class="code" href="classOscl__File.html#s11">00062</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
52 00067 <a class="code" href="classOscl__File.html#s11s0">SEEKSET</a>,
53 00071 <a class="code" href="classOscl__File.html#s11s1">SEEKCUR</a>,
54 00075 <a class="code" href="classOscl__File.html#s11s2">SEEKEND</a>
55 00076 } <a class="code" href="classOscl__File.html#s11">seek_type</a>;
57 <a name="l00078"></a><a class="code" href="classOscl__File.html#s12">00078</a> <span class="keyword">typedef</span> <span class="keyword">enum</span>
59 00083 <a class="code" href="classOscl__File.html#s12s3">MODE_READ</a> = 0x0001,
60 00089 <a class="code" href="classOscl__File.html#s12s4">MODE_READWRITE</a> = 0x0002,
61 00096 <a class="code" href="classOscl__File.html#s12s5">MODE_APPEND</a> = 0x0004,
62 00100 <a class="code" href="classOscl__File.html#s12s6">MODE_BINARY</a> = 0x0008,
63 00104 <a class="code" href="classOscl__File.html#s12s7">MODE_TEXT</a> = 0x0010,
64 00109 <a class="code" href="classOscl__File.html#s12s8">MODE_READ_PLUS</a> = 0x0020
66 00111 } <a class="code" href="classOscl__File.html#s12">mode_type</a>;
68 00116 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="classOscl__File.html#a0">Oscl_File</a>();
70 00123 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize);
71 00130 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="classOscl__File.html#a0">Oscl_File</a>(uint32 aCacheSize, <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aFileHandle);
73 00135 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="classOscl__File.html#a3">~Oscl_File</a>();
75 00146 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a4">SetPVCacheSize</a>(uint32 aSize);
77 <a name="l00151"></a><a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html">00151</a> <span class="keyword">class </span><a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html">OsclFixedCacheParam</a>
79 00153 <span class="keyword">public</span>:
80 00154 <span class="comment">/*</span>
81 00155 <span class="comment"> ** File position where the fixed cache is located.</span>
82 00156 <span class="comment"> */</span>
83 <a name="l00157"></a><a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m0">00157</a> <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> <a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m0">iFilePosition</a>;
84 00158 <span class="comment">/*</span>
85 00159 <span class="comment"> ** Fixed cache size in bytes.</span>
86 00160 <span class="comment"> */</span>
87 <a name="l00161"></a><a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m1">00161</a> uint32 <a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m1">iSize</a>;
89 <a name="l00163"></a><a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#a0">00163</a> <span class="keywordtype">bool</span> <a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#a0">Contains</a>(<a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> pos)<span class="keyword"> const</span>
90 00164 <span class="keyword"> </span>{
91 00165 <span class="keywordflow">return</span> (<a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m0">iFilePosition</a> <= pos && pos < <a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m0">iFilePosition</a> + (TOsclFileOffset)<a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html#m1">iSize</a>);
95 <a name="l00176"></a><a class="code" href="classOscl__File.html#a5">00176</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a5">AddFixedCache</a>(<span class="keyword">const</span> <a class="code" href="classOscl__File_1_1OsclFixedCacheParam.html">OsclFixedCacheParam</a>& aParam)
97 00178 iAddFixedCache.<a class="code" href="classOscl__Vector.html#a5">push_back</a>(aParam);
100 <a name="l00186"></a><a class="code" href="classOscl__File.html#a6">00186</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a6">RemoveFixedCache</a>(<span class="keyword">const</span> <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> &aPos)
102 00188 iRemoveFixedCache.<a class="code" href="classOscl__Vector.html#a5">push_back</a>(aPos);
105 <a name="l00196"></a><a class="code" href="classOscl__File_1_1OsclCacheObserver.html">00196</a> <span class="keyword">class </span><a class="code" href="classOscl__File_1_1OsclCacheObserver.html">OsclCacheObserver</a>
107 00198 <span class="keyword">public</span>:
108 <a name="l00199"></a><a class="code" href="classOscl__File_1_1OsclCacheObserver.html#a0">00199</a> <span class="keyword">virtual</span> <a class="code" href="classOscl__File_1_1OsclCacheObserver.html#a0">~OsclCacheObserver</a>() {};
109 00200 <span class="keyword">virtual</span> <a class="code" href="classOsclFileCacheBuffer.html">OsclFileCacheBuffer</a>* <a class="code" href="classOscl__File_1_1OsclCacheObserver.html#a1">ChooseCurCache</a>(<a class="code" href="classOsclFileCache.html">OsclFileCache</a>& aContext, <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> aPos) = 0;
111 <a name="l00202"></a><a class="code" href="classOscl__File.html#a7">00202</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a7">SetCacheObserver</a>(<a class="code" href="classOscl__File_1_1OsclCacheObserver.html">OsclCacheObserver</a>* aObs)
113 00204 iCacheObserver = aObs;
116 00217 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a8">SetNativeAccessMode</a>(uint32 aMode);
118 <a name="l00222"></a><a class="code" href="classOscl__File.html#s13">00222</a> <span class="keyword">enum</span> <a class="code" href="classOscl__File.html#s13">TSymbianAccessMode</a>
120 00224 <a class="code" href="classOscl__File.html#s13s9">ESymbianAccessMode_Rfile</a> = 0
121 00225 , <a class="code" href="classOscl__File.html#s13s10">ESymbianAccessMode_RfileBuf</a> = 1
124 00242 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a9">SetNativeBufferSize</a>(int32 aSize);
126 00257 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a10">SetAsyncReadBufferSize</a>(uint32 aSize);
128 00281 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a11">SetFileHandle</a>(<a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* aHandle);
130 00296 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a12">Open</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv);
132 00310 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a12">Open</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a34">oscl_wchar</a> *filename, uint32 mode, <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv);
134 00328 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> uint32 <a class="code" href="classOscl__File.html#a14">Read</a>(<a class="code" href="group__osclbase.html#a27">OsclAny</a> *buffer,
136 00330 uint32 numelements);
138 00343 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> uint32 <a class="code" href="classOscl__File.html#a15">Write</a>(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a27">OsclAny</a> *buffer,
140 00345 uint32 numelements);
143 00357 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a16">Seek</a>(<a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> offset,
144 00358 <a class="code" href="classOscl__File.html#s11">seek_type</a> origin);
146 00364 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> <a class="code" href="classOscl__File.html#a17">Tell</a>();
149 00377 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a18">Close</a>();
152 00388 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a19">Flush</a>();
154 00397 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a20">SetSize</a>(uint32 size);
156 00406 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a21">EndOfFile</a>();
159 00416 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> int32 <a class="code" href="classOscl__File.html#a22">GetError</a>();
161 <a name="l00423"></a><a class="code" href="classOscl__File.html#a23">00423</a> <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* <a class="code" href="classOscl__File.html#a23">Handle</a>()
163 00425 <span class="keywordflow">return</span> iOpenFileHandle;
166 00433 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> <a class="code" href="classOscl__File.html#a24">Size</a>();
168 00443 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a25">SetLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
170 00452 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> <span class="keywordtype">void</span> <a class="code" href="classOscl__File.html#a26">SetSummaryStatsLoggingEnable</a>(<span class="keywordtype">bool</span> aEnable);
173 00455 <span class="keyword">private</span>:
174 <a name="l00456"></a><a class="code" href="classOscl__File.html#l0">00456</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclFileCache.html">OsclFileCache</a>;
175 <a name="l00457"></a><a class="code" href="classOscl__File.html#l1">00457</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOsclFileCacheBuffer.html">OsclFileCacheBuffer</a>;
176 <a name="l00458"></a><a class="code" href="classOscl__File.html#l2">00458</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l2">asyncfilereadwrite_test</a>;
177 <a name="l00459"></a><a class="code" href="classOscl__File.html#l3">00459</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l3">largeasyncfilereadwrite_test</a>;
178 <a name="l00460"></a><a class="code" href="classOscl__File.html#l4">00460</a> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classOscl__File.html#l4">asyncfilereadcancel_test</a>;
180 00462 <span class="keywordtype">void</span> Construct();
181 00463 <span class="keywordtype">void</span> OldCacheDefaults();
182 00464 <span class="keywordtype">void</span> OldCacheSelect(uint32);
184 00466 <span class="comment">//state info</span>
185 00467 <span class="keywordtype">bool</span> iIsOpen;
187 00469 <span class="comment">//For Logging</span>
188 00470 <a class="code" href="classPVLogger.html">PVLogger</a>* iLogger;
189 00471 <a class="code" href="classPVLogger.html">PVLogger</a>* iStatsLogger;
190 00472 <a class="code" href="classPVLogger.html">PVLogger</a>* iNativeLogger;
191 00473 <a class="code" href="classPVLogger.html">PVLogger</a>* iAsyncLogger;
192 00474 <a class="code" href="classOsclFileStats.html">OsclFileStats</a>* iFileStats;
193 00475 <span class="keywordtype">void</span> CreateFileStats();
195 00477 <span class="comment">//External file handle.</span>
196 00478 <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>* iOpenFileHandle;
198 00480 <span class="comment">//For PV File Cache</span>
199 00481 uint32 iPVCacheSize;
200 00482 <a class="code" href="classOsclFileCache.html">OsclFileCache</a>* iFileCache;
201 00483 <a class="code" href="classOscl__Vector.html">Oscl_Vector<OsclFixedCacheParam, OsclMemAllocator></a> iAddFixedCache;
202 00484 <a class="code" href="classOscl__Vector.html">Oscl_Vector<TOsclFileOffset, OsclMemAllocator></a> iRemoveFixedCache;
203 00485 <a class="code" href="classOscl__File_1_1OsclCacheObserver.html">OsclCacheObserver</a>* iCacheObserver;
205 00487 int32 OpenFileCacheOrAsyncBuffer(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename
206 00488 , <span class="keyword">const</span> <a class="code" href="group__osclbase.html#a34">oscl_wchar</a>* wfilename
208 00490 , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>& params
209 00491 , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv) ;
211 00493 <span class="comment">//For native file I/O.</span>
212 00494 <a class="code" href="classOsclNativeFile.html">OsclNativeFile</a>* iNativeFile;
213 00495 int32 iNativeBufferSize;
214 00496 uint32 iNativeAccessMode;
216 00498 <span class="comment">//For async read feature</span>
217 00499 uint32 iAsyncReadBufferSize;
218 00500 <a class="code" href="classOsclAsyncFile.html">OsclAsyncFile</a>* iAsyncFile;
220 00502 <span class="comment">// These are wrappers to call the Native OS File IO calls with</span>
221 00503 <span class="comment">// stats and logging.</span>
223 00505 int32 CallNativeOpen(<span class="keyword">const</span> <a class="code" href="classOsclFileHandle.html">OsclFileHandle</a>&, uint32 mode
224 00506 , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>& params
225 00507 , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv);
226 00508 int32 CallNativeOpen(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a34">oscl_wchar</a> *filename, uint32 mode
227 00509 , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>& params
228 00510 , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv);
229 00511 int32 CallNativeOpen(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename, uint32 mode
230 00512 , <span class="keyword">const</span> <a class="code" href="classOsclNativeFileParams.html">OsclNativeFileParams</a>& params
231 00513 , <a class="code" href="classOscl__FileServer.html">Oscl_FileServer</a>& fileserv);
232 00514 uint32 CallNativeRead(<a class="code" href="group__osclbase.html#a27">OsclAny</a> *buffer, uint32 size, uint32 numelements);
233 00515 uint32 CallNativeWrite(<span class="keyword">const</span> <a class="code" href="group__osclbase.html#a27">OsclAny</a> *buffer, uint32 size, uint32 numelements);
234 00516 int32 CallNativeSeek(<a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> offset, <a class="code" href="classOscl__File.html#s11">Oscl_File::seek_type</a> origin);
235 00517 int32 CallNativeSetSize(uint32 size);
236 00518 <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> CallNativeTell();
237 00519 int32 CallNativeFlush();
238 00520 int32 CallNativeEndOfFile();
239 00521 <a class="code" href="osclconfig__io_8h.html#a67">TOsclFileOffset</a> CallNativeSize();
240 00522 int32 CallNativeClose();
241 00523 uint32 CallNativeMode();
242 00524 int32 CallNativeGetError();
243 00525 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> uint32 GetAsyncFileNumOfRun();
244 00526 <a class="code" href="osclconfig_8h.html#a3">OSCL_IMPORT_REF</a> uint32 GetAsyncFileNumOfRunError();
249 00531 <span class="comment">//Include all public file apis for convenience here.</span>
250 00532 <span class="preprocessor">#include "<a class="code" href="oscl__file__server_8h.html">oscl_file_server.h</a>"</span>
251 00533 <span class="preprocessor">#include "<a class="code" href="oscl__file__find_8h.html">oscl_file_find.h</a>"</span>
252 00534 <span class="preprocessor">#include "<a class="code" href="oscl__file__dir__utils_8h.html">oscl_file_dir_utils.h</a>"</span>
253 00535 <span class="preprocessor">#include "<a class="code" href="oscl__file__handle_8h.html">oscl_file_handle.h</a>"</span>
255 00537 <span class="preprocessor">#endif // OSCL_FILE_IO_H_INCLUDED</span>
256 00538 <span class="preprocessor"></span>
257 </pre></div><hr size="1"><img src="pvlogo_small.jpg"><address style="align: right;"><small>OSCL API</small>
258 <address style="align: left;"><small>Posting Version: CORE_8.506.1.1 </small>