Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_manipulating_descriptors_8cpp_source.html
author Dominic Pinkman <dominic.pinkman@nokia.com>
Fri, 13 Aug 2010 16:47:46 +0100
changeset 14 578be2adaf3e
parent 6 43e37759235e
permissions -rw-r--r--
Week 32 contribution of PDK documentation content. See release notes for details. Fixes bug Bug 3582

<!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>TB9.2 Example Applications: examples/ForumNokia/DescriptorExample/src/ManipulatingDescriptors.cpp 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.2 -->
<h1>examples/ForumNokia/DescriptorExample/src/ManipulatingDescriptors.cpp</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright © 2008 Nokia Corporation.</span>
<a name="l00003"></a>00003 <span class="comment"> */</span>
<a name="l00004"></a>00004 
<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;e32std.h&gt;</span>
<a name="l00006"></a>00006 <span class="preprocessor">#include &lt;e32base.h&gt;</span>
<a name="l00007"></a>00007 <span class="preprocessor">#include &lt;charconv.h&gt;</span>
<a name="l00008"></a>00008 <span class="preprocessor">#include &lt;collate.h&gt;</span>
<a name="l00009"></a>00009 <span class="preprocessor">#include &quot;DescriptorExamples.h&quot;</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include &quot;StringRenderer.h&quot;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00013"></a>00013 <span class="comment">// These macros are shorter versions for Rendering macros. They assume variable</span>
<a name="l00014"></a>00014 <span class="comment">// &#39;output&#39; derived from TDes to be in the scope where used.</span>
<a name="l00015"></a>00015 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00016"></a>00016 <span class="preprocessor">#define RenderVariableString(aVariableName) \</span>
<a name="l00017"></a>00017 <span class="preprocessor">    RenderVariableFormatted(aVariableName, output, KRenderDefault);</span>
<a name="l00018"></a>00018 <span class="preprocessor"></span>
<a name="l00019"></a>00019 <span class="preprocessor">#define RenderVariableBinary(aVariableName) \</span>
<a name="l00020"></a>00020 <span class="preprocessor">    RenderVariableFormatted(aVariableName, output, KRenderContentAsBinary);</span>
<a name="l00021"></a>00021 <span class="preprocessor"></span>
<a name="l00022"></a>00022 <span class="preprocessor">#define RenderResult(aDeclaration) \</span>
<a name="l00023"></a>00023 <span class="preprocessor">    RenderResultFormatted(aDeclaration, output, KRenderDefault);</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span>
<a name="l00025"></a>00025 <span class="preprocessor">#define ExecuteAndRenderVariable(aDeclaration, aVariable) \</span>
<a name="l00026"></a>00026 <span class="preprocessor">    ExecuteAndRenderVariableFormatted(aDeclaration, aVariable, output, \</span>
<a name="l00027"></a>00027 <span class="preprocessor">                                      KRenderDefault );</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span>
<a name="l00029"></a>00029 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00030"></a>00030 <span class="comment">// This example method is documented in header file &quot;DescriptorExamples.h&quot;</span>
<a name="l00031"></a>00031 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00032"></a><a class="code" href="class_c_descriptor_examples.html#ac45c0edc4bd868c8c21d25ec676f121b">00032</a> <span class="keywordtype">void</span> <a class="code" href="class_c_descriptor_examples.html#ac45c0edc4bd868c8c21d25ec676f121b">CDescriptorExamples::NonModifyingMethods</a>()
<a name="l00033"></a>00033     {
<a name="l00034"></a>00034     TPtr output( iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00035"></a>00035     RenderHeader( _L( <span class="stringliteral">&quot;NonModifyingMethods&quot;</span> ), output );
<a name="l00036"></a>00036 
<a name="l00037"></a>00037     <span class="comment">// ---------- Initialize an example string ----------</span>
<a name="l00038"></a>00038     <span class="comment">// this declares a literal with a few characters</span>
<a name="l00039"></a>00039     <a class="code" href="secureclientandserver_8h.html#a5eadd4429627d82193b37536d4faa03a">_LIT</a>(KCharacters, <span class="stringliteral">&quot;abcdefghijklmnopqrstuvwxyz0123456789&quot;</span>);
<a name="l00040"></a>00040     <span class="comment">// this casts the literal to non modifiable descriptor</span>
<a name="l00041"></a>00041     <span class="keyword">const</span> TDesC &amp;str = KCharacters();
<a name="l00042"></a>00042     RenderVariableString(str);
<a name="l00043"></a>00043 
<a name="l00044"></a>00044     <span class="comment">// ---------- Capacity ----------</span>
<a name="l00045"></a>00045     output.Append( _L( <span class="stringliteral">&quot;\nCapacity...\n&quot;</span> ) );
<a name="l00046"></a>00046 
<a name="l00047"></a>00047     <span class="comment">// Length() returns number of characters in descriptor</span>
<a name="l00048"></a>00048     RenderResult( str.Length() ); <span class="comment">// 36</span>
<a name="l00049"></a>00049 
<a name="l00050"></a>00050     <span class="comment">// Size() returns number of bytes in descriptor - in unicode buid it is</span>
<a name="l00051"></a>00051     <span class="comment">//        2*Length() and in non-unicode build it is same as Length()</span>
<a name="l00052"></a>00052     RenderResult( str.Size() ); <span class="comment">// 72</span>
<a name="l00053"></a>00053 
<a name="l00054"></a>00054     <span class="comment">// ---------- Extracting portions ----------</span>
<a name="l00055"></a>00055     output.Append( _L( <span class="stringliteral">&quot;\nExtracting portions...\n&quot;</span> ) );
<a name="l00056"></a>00056 
<a name="l00057"></a>00057     <span class="comment">// Left(count) returns a string witn &quot;count&quot; number of characters</span>
<a name="l00058"></a>00058     <span class="comment">// calculated from left side of the string</span>
<a name="l00059"></a>00059     RenderResult( str.Left(2) ); <span class="comment">// &quot;ab&quot;</span>
<a name="l00060"></a>00060     RenderResult( str.Left(5) ); <span class="comment">// &quot;abcde&quot;</span>
<a name="l00061"></a>00061 
<a name="l00062"></a>00062     <span class="comment">// Right(count) returns a string witn &quot;count&quot; number of characters</span>
<a name="l00063"></a>00063     <span class="comment">// calculated from right side of the string</span>
<a name="l00064"></a>00064     RenderResult( str.Right(2) ); <span class="comment">// &quot;89&quot;</span>
<a name="l00065"></a>00065     RenderResult( str.Right(12) ); <span class="comment">// &quot;yz0123456789&quot;</span>
<a name="l00066"></a>00066 
<a name="l00067"></a>00067     <span class="comment">// Mid(index, count) returns a portion from string starting</span>
<a name="l00068"></a>00068     <span class="comment">// from &quot;index&quot; and having &quot;count&quot; number of characters</span>
<a name="l00069"></a>00069     RenderResult( str.Mid(2,6) ); <span class="comment">// &quot;cdefgh&quot;</span>
<a name="l00070"></a>00070     RenderResult( str.Mid(33,3) ); <span class="comment">// &quot;789&quot;</span>
<a name="l00071"></a>00071 
<a name="l00072"></a>00072     <span class="comment">// if &quot;count&quot; is omitted the rest of the string from &quot;index&quot; is returned</span>
<a name="l00073"></a>00073     RenderResult( str.Mid(28) ); <span class="comment">// &quot;23456789&quot;</span>
<a name="l00074"></a>00074     RenderResult( str.Mid(35) ); <span class="comment">// &quot;9&quot;</span>
<a name="l00075"></a>00075 
<a name="l00076"></a>00076     <span class="comment">// ---------- Locating character ----------</span>
<a name="l00077"></a>00077     output.Append( _L( <span class="stringliteral">&quot;\nLocating character...\n&quot;</span> ) );
<a name="l00078"></a>00078 
<a name="l00079"></a>00079     <span class="comment">// locate index of given character</span>
<a name="l00080"></a>00080     RenderResult( str.Locate(<span class="charliteral">&#39;d&#39;</span>) ); <span class="comment">// 3</span>
<a name="l00081"></a>00081     RenderResultFormatted( _L(<span class="stringliteral">&quot;1ABAD&quot;</span>).Locate(<span class="charliteral">&#39;A&#39;</span>),
<a name="l00082"></a>00082         output, KRenderDefault); <span class="comment">// &quot;1&quot;</span>
<a name="l00083"></a>00083     RenderResultFormatted( _L(<span class="stringliteral">&quot;1ABAD&quot;</span>).LocateReverse(<span class="charliteral">&#39;A&#39;</span>),
<a name="l00084"></a>00084         output, KRenderDefault); <span class="comment">// &quot;1&quot;</span>
<a name="l00085"></a>00085 
<a name="l00086"></a>00086     <span class="comment">// ---------- Compare ----------</span>
<a name="l00087"></a>00087     <span class="comment">// Comparison with method Compare() uses the binary comparison approach to</span>
<a name="l00088"></a>00088     <span class="comment">// compare each character in string. For example value of character</span>
<a name="l00089"></a>00089     <span class="comment">// &#39;A&#39; has unicode value of 65 and &#39;a&#39; 97.</span>
<a name="l00090"></a>00090     <span class="comment">//</span>
<a name="l00091"></a>00091     <span class="comment">// Both strings could have been converted to lower or upper case to perform</span>
<a name="l00092"></a>00092     <span class="comment">// case insensitive comparison. However, there exists also CompareC() method</span>
<a name="l00093"></a>00093     <span class="comment">// below that introduces a method to compare in case insensitive manner.</span>
<a name="l00094"></a>00094     output.Append( _L( <span class="stringliteral">&quot;\nCompare()\n&quot;</span> ) );
<a name="l00095"></a>00095 
<a name="l00096"></a>00096     <span class="comment">// examplerun: str.Compare(_L(&quot;aaa&quot;))=1</span>
<a name="l00097"></a>00097     RenderResultFormatted( str.Compare( _L(<span class="stringliteral">&quot;aaa&quot;</span>) ),
<a name="l00098"></a>00098         output, KRenderDefault); <span class="comment">// &gt;0 : str is greater</span>
<a name="l00099"></a>00099 
<a name="l00100"></a>00100     <span class="comment">// examplerun: str.Compare(_L(&quot;zzz&quot;))=-25</span>
<a name="l00101"></a>00101     RenderResultFormatted( str.Compare( _L(<span class="stringliteral">&quot;zzz&quot;</span>) ),
<a name="l00102"></a>00102         output, KRenderDefault ); <span class="comment">// &lt;0 : str is less</span>
<a name="l00103"></a>00103 
<a name="l00104"></a>00104     <span class="comment">// examplerun: str.Compare(str)=0</span>
<a name="l00105"></a>00105     RenderResult( str.Compare(str) );       <span class="comment">// 0  : str is equal</span>
<a name="l00106"></a>00106 
<a name="l00107"></a>00107     <span class="comment">// examplerun: str.Left(2).Compare(_L(&quot;ab&quot;))=0</span>
<a name="l00108"></a>00108     RenderResultFormatted( str.Left(2).Compare(_L(<span class="stringliteral">&quot;ab&quot;</span>)),
<a name="l00109"></a>00109         output, KRenderDefault); <span class="comment">// 0 : equal</span>
<a name="l00110"></a>00110 
<a name="l00111"></a>00111     <span class="comment">// examplerun: str.Left(2).Compare(_L(&quot;AB&quot;))=32</span>
<a name="l00112"></a>00112     <span class="comment">// &#39;A&#39; (65) &gt; &#39;a&#39; (97)</span>
<a name="l00113"></a>00113     RenderResultFormatted( str.Left(2).Compare(_L(<span class="stringliteral">&quot;AB&quot;</span>)),
<a name="l00114"></a>00114         output, KRenderDefault ); <span class="comment">// 0 : equal</span>
<a name="l00115"></a>00115 
<a name="l00116"></a>00116     <span class="comment">// ---------- Comparing (Collated) ----------</span>
<a name="l00117"></a>00117     <span class="comment">// To perform collated comparisons, method</span>
<a name="l00118"></a>00118     <span class="comment">//</span>
<a name="l00119"></a>00119     <span class="comment">//   CompareC(TDesC&amp;, TInt aMaxLevel, const TCollationMethod*)</span>
<a name="l00120"></a>00120     <span class="comment">//</span>
<a name="l00121"></a>00121     <span class="comment">// is used. The aMaxLevel parameter can be used to perform specific rules:</span>
<a name="l00122"></a>00122     <span class="comment">//</span>
<a name="l00123"></a>00123     <span class="comment">// 0 - only test the character identity; accents and case are ignored</span>
<a name="l00124"></a>00124     <span class="comment">// 1 - test the character identity and accents; case is ignored</span>
<a name="l00125"></a>00125     <span class="comment">// 2 - test the character identity, accents and case</span>
<a name="l00126"></a>00126     <span class="comment">// 3 - test the Unicode value as well as the character identity,</span>
<a name="l00127"></a>00127     <span class="comment">//     accents and case.</span>
<a name="l00128"></a>00128     <span class="comment">//</span>
<a name="l00129"></a>00129     output.Append( _L( <span class="stringliteral">&quot;\nCompareC()...\n&quot;</span> ) );
<a name="l00130"></a>00130 
<a name="l00131"></a>00131     <span class="comment">// To perform case insensitive comparison, level 1 is used</span>
<a name="l00132"></a>00132     RenderResultFormatted( _L(<span class="stringliteral">&quot;ab&quot;</span>).CompareC(_L(<span class="stringliteral">&quot;AB&quot;</span>),1,NULL),
<a name="l00133"></a>00133         output, KRenderDefault ); <span class="comment">// 0 : equal</span>
<a name="l00134"></a>00134 
<a name="l00135"></a>00135     <span class="comment">// note that when using collated comparison as case sensitive manner</span>
<a name="l00136"></a>00136     <span class="comment">// the string &quot;ab&quot; is less than &quot;AB&quot; while using standars Compare()</span>
<a name="l00137"></a>00137     <span class="comment">// the &quot;ab&quot; is greater than &quot;AB&quot;!!!</span>
<a name="l00138"></a>00138     RenderResultFormatted( _L(<span class="stringliteral">&quot;ab&quot;</span>).CompareC(_L(<span class="stringliteral">&quot;AB&quot;</span>),2,NULL),
<a name="l00139"></a>00139         output, KRenderDefault );
<a name="l00140"></a>00140     RenderResultFormatted( _L(<span class="stringliteral">&quot;ab&quot;</span>).Compare(_L(<span class="stringliteral">&quot;AB&quot;</span>)),
<a name="l00141"></a>00141         output, KRenderDefault );
<a name="l00142"></a>00142 
<a name="l00143"></a>00143     <span class="comment">// ----------</span>
<a name="l00144"></a>00144     <span class="comment">// The natural comparison ignores white space differences.</span>
<a name="l00145"></a>00145     <span class="comment">// This and other specific behaviour can be changed by modifying</span>
<a name="l00146"></a>00146     <span class="comment">// the standard behaviour.</span>
<a name="l00147"></a>00147     TCollationMethod stdMethod = *Mem::CollationMethodByIndex(0); <span class="comment">// std impl</span>
<a name="l00148"></a>00148 
<a name="l00149"></a>00149     <span class="comment">// dont ignore punctuation and spaces</span>
<a name="l00150"></a>00150     TCollationMethod strictMethod = stdMethod; <span class="comment">// copy std impl</span>
<a name="l00151"></a>00151     strictMethod.iFlags |= TCollationMethod::EIgnoreNone; <span class="comment">// modify copy</span>
<a name="l00152"></a>00152 
<a name="l00153"></a>00153     <span class="comment">// use level 1 (case ignored) in both cases to compare. Then use</span>
<a name="l00154"></a>00154     <span class="comment">// standard method and modified one. Examplerun:</span>
<a name="l00155"></a>00155     <span class="comment">//</span>
<a name="l00156"></a>00156     <span class="comment">//    _L(&quot;a  b&quot;).CompareC(_L(&quot;A B&quot;),1,&amp;stdMethod)=0</span>
<a name="l00157"></a>00157     <span class="comment">//    _L(&quot;a  b&quot;).CompareC(_L(&quot;A B&quot;),1,&amp;strictMethod)=-2</span>
<a name="l00158"></a>00158     <span class="comment">//</span>
<a name="l00159"></a>00159     RenderResultFormatted( _L(<span class="stringliteral">&quot;a   b&quot;</span>).CompareC(_L(<span class="stringliteral">&quot;A B&quot;</span>),1,&amp;stdMethod),
<a name="l00160"></a>00160         output, KRenderDefault );
<a name="l00161"></a>00161     RenderResultFormatted( _L(<span class="stringliteral">&quot;a   b&quot;</span>).CompareC(_L(<span class="stringliteral">&quot;A B&quot;</span>),1,&amp;strictMethod),
<a name="l00162"></a>00162         output, KRenderDefault );
<a name="l00163"></a>00163 
<a name="l00164"></a>00164     iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a8e10673e2504a4af6382f26794bb8004">UpdateView</a>();
<a name="l00165"></a>00165     }
<a name="l00166"></a>00166 
<a name="l00167"></a>00167 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00168"></a>00168 <span class="comment">// This example method is documented in header file &quot;DescriptorExamples.h&quot;</span>
<a name="l00169"></a>00169 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00170"></a><a class="code" href="class_c_descriptor_examples.html#a5c4e6afcc42704c6d55ff898f7d5f749">00170</a> <span class="keywordtype">void</span> <a class="code" href="class_c_descriptor_examples.html#a5c4e6afcc42704c6d55ff898f7d5f749">CDescriptorExamples::ModifyingMethodsL</a>()
<a name="l00171"></a>00171     {
<a name="l00172"></a>00172     <span class="comment">// this is used to point to correct position in view buffer</span>
<a name="l00173"></a>00173     TPtr output( iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00174"></a>00174     RenderHeader( _L( <span class="stringliteral">&quot;ModifyingMethods&quot;</span> ), output );
<a name="l00175"></a>00175     TBuf&lt;10&gt; buf10;
<a name="l00176"></a>00176 
<a name="l00177"></a>00177     <span class="comment">// ---------- Setting and viewing characteristics ----------</span>
<a name="l00178"></a>00178     output.Append( _L(<span class="stringliteral">&quot;\nCharacteristics of buffer after initialization:\n&quot;</span>) );
<a name="l00179"></a>00179     RenderResult( buf10.MaxLength() ); <span class="comment">// max number of chars</span>
<a name="l00180"></a>00180     RenderResult( buf10.MaxSize() ); <span class="comment">// max number of bytes</span>
<a name="l00181"></a>00181     RenderResult( buf10.Length() ); <span class="comment">// number of chars</span>
<a name="l00182"></a>00182     RenderResult( buf10.Size() ); <span class="comment">// number of bytes</span>
<a name="l00183"></a>00183 
<a name="l00184"></a>00184     TBuf&lt;20&gt; example(_L(<span class="stringliteral">&quot;Hello&quot;</span>));
<a name="l00185"></a>00185     RenderVariableFormatted( example, output, KRenderCharacteristics );
<a name="l00186"></a>00186 
<a name="l00187"></a>00187     <span class="comment">// first init the data in buffer with asterix</span>
<a name="l00188"></a>00188     output.Append( _L(<span class="stringliteral">&quot;\nLet&#39;s fill the buffer\n&quot;</span>) );
<a name="l00189"></a>00189     buf10.Fill( <span class="charliteral">&#39;*&#39;</span>, buf10.MaxLength() );
<a name="l00190"></a>00190     RenderVariableString( buf10 ); <span class="comment">// max number of bytes</span>
<a name="l00191"></a>00191     RenderResult( buf10.Length() ); <span class="comment">// number of chars</span>
<a name="l00192"></a>00192     RenderResult( buf10.Size() ); <span class="comment">// number of bytes</span>
<a name="l00193"></a>00193 
<a name="l00194"></a>00194     output.Append( _L(<span class="stringliteral">&quot;\nNow manipilate the length:\n&quot;</span>) );
<a name="l00195"></a>00195     <span class="comment">// set the current length to three. The data that exist in the</span>
<a name="l00196"></a>00196     <span class="comment">// buffer is as is</span>
<a name="l00197"></a>00197     ExecuteAndRenderVariable( buf10.SetLength(3), buf10 );
<a name="l00198"></a>00198     ExecuteAndRenderVariable( buf10.SetMax(), buf10 );
<a name="l00199"></a>00199     ExecuteAndRenderVariable( buf10.Zero(), buf10 );
<a name="l00200"></a>00200 
<a name="l00201"></a>00201     <span class="comment">// ---------- Copying ----------</span>
<a name="l00202"></a>00202     output.Append( _L(<span class="stringliteral">&quot;\nCopying...\n&quot;</span>) );
<a name="l00203"></a>00203     TPtrC8 narrowHello( _L8( <span class="stringliteral">&quot;hello&quot;</span> ) );
<a name="l00204"></a>00204     RenderVariableString( narrowHello );
<a name="l00205"></a>00205     TPtrC16 wideHello( _L16( <span class="stringliteral">&quot;unIc heLLo&quot;</span> ) );
<a name="l00206"></a>00206     RenderVariableString( wideHello );
<a name="l00207"></a>00207     <span class="comment">// copy contents of 8 bit descriptor to 16 bit descriptor</span>
<a name="l00208"></a>00208     ExecuteAndRenderVariable( buf10.Copy(narrowHello), buf10 );
<a name="l00209"></a>00209     <span class="comment">// copy contents of 16 bit descriptor to 16 bit descriptor</span>
<a name="l00210"></a>00210     ExecuteAndRenderVariable( buf10.Copy(wideHello), buf10 );
<a name="l00211"></a>00211     <span class="comment">// copy contents of 16 bit descriptor to 16 bit descriptor</span>
<a name="l00212"></a>00212     <span class="comment">// and capitalize the content</span>
<a name="l00213"></a>00213     ExecuteAndRenderVariable( buf10.CopyCP(wideHello), buf10 );
<a name="l00214"></a>00214     <span class="comment">// copy and set to lower case</span>
<a name="l00215"></a>00215     ExecuteAndRenderVariable( buf10.CopyLC(wideHello), buf10 );
<a name="l00216"></a>00216     <span class="comment">// copy and set to Uppper case</span>
<a name="l00217"></a>00217     ExecuteAndRenderVariable( buf10.CopyUC(wideHello), buf10 );
<a name="l00218"></a>00218 
<a name="l00219"></a>00219     <span class="comment">// ---------- Repeating ----------</span>
<a name="l00220"></a>00220     output.Append( _L(<span class="stringliteral">&quot;\nRepeating...\n&quot;</span>) );
<a name="l00221"></a>00221     TPtrC abc( _L( <span class="stringliteral">&quot;aBc&quot;</span> ) );
<a name="l00222"></a>00222     RenderVariableString( abc );
<a name="l00223"></a>00223     <span class="comment">// write abs twise to the descriptor</span>
<a name="l00224"></a>00224     ExecuteAndRenderVariable( buf10.Repeat((TText*)abc.Ptr(),2), buf10 );
<a name="l00225"></a>00225     <span class="comment">// write abs until to the maximum size</span>
<a name="l00226"></a>00226     ExecuteAndRenderVariable( buf10.Repeat(abc), buf10 );
<a name="l00227"></a>00227 
<a name="l00228"></a>00228     <span class="comment">// ---------- Justifying ----------</span>
<a name="l00229"></a>00229     output.Append( _L(<span class="stringliteral">&quot;\nJustifying...\n&quot;</span>) );
<a name="l00230"></a>00230     RenderVariableString( abc );
<a name="l00231"></a>00231     <span class="comment">// show aligning of string &quot;abs&quot; to our buffer</span>
<a name="l00232"></a>00232     ExecuteAndRenderVariable( buf10.Justify(abc,8,ELeft,<span class="charliteral">&#39;_&#39;</span>), buf10 );
<a name="l00233"></a>00233     ExecuteAndRenderVariable( buf10.Justify(abc,8,ECenter,<span class="charliteral">&#39;*&#39;</span>), buf10 );
<a name="l00234"></a>00234     ExecuteAndRenderVariable( buf10.Justify(abc,10,ERight,<span class="charliteral">&#39;.&#39;</span>), buf10 );
<a name="l00235"></a>00235 
<a name="l00236"></a>00236     <span class="comment">// ---------- Rendering numbers ----------</span>
<a name="l00237"></a>00237     output.Append( _L(<span class="stringliteral">&quot;\nRendering numbers...\n&quot;</span>) );
<a name="l00238"></a>00238     <span class="comment">// decimal number</span>
<a name="l00239"></a>00239     ExecuteAndRenderVariable( buf10.Num(12345), buf10 );
<a name="l00240"></a>00240     <span class="comment">// hexadecimal number. characters in lover case</span>
<a name="l00241"></a>00241     ExecuteAndRenderVariable( buf10.Num(65300,EHex), buf10 );
<a name="l00242"></a>00242     <span class="comment">// binary number</span>
<a name="l00243"></a>00243     ExecuteAndRenderVariable( buf10.Num(55,EBinary), buf10 );
<a name="l00244"></a>00244     <span class="comment">// hexadecimal number. characters in upper case</span>
<a name="l00245"></a>00245     ExecuteAndRenderVariable( buf10.NumUC(65300,EHex), buf10 );
<a name="l00246"></a>00246     <span class="comment">// fixed width decimal number</span>
<a name="l00247"></a>00247     ExecuteAndRenderVariable( buf10.NumFixedWidth(25,EDecimal,6), buf10 );
<a name="l00248"></a>00248     <span class="comment">// fixed width hexadecimal number</span>
<a name="l00249"></a>00249     ExecuteAndRenderVariable( buf10.NumFixedWidth(0xf05,EHex,6), buf10 );
<a name="l00250"></a>00250     <span class="comment">// fixed width binary number</span>
<a name="l00251"></a>00251     ExecuteAndRenderVariable( buf10.NumFixedWidth(3,EBinary,8), buf10 );
<a name="l00252"></a>00252     <span class="comment">// fixed width hexadecimal number, upper case</span>
<a name="l00253"></a>00253     ExecuteAndRenderVariable( buf10.NumFixedWidthUC(0xf05,EHex,6), buf10 );
<a name="l00254"></a>00254 
<a name="l00255"></a>00255     <span class="comment">// declare 64 bit number that has now only lower 32 bits set</span>
<a name="l00256"></a>00256     TInt64 longNum(0x12345678);
<a name="l00257"></a>00257     ExecuteAndRenderVariable( buf10.Num(longNum,EHex), buf10 );
<a name="l00258"></a>00258     <span class="comment">// multiply the result so that it needs more than 32 bits and show results.</span>
<a name="l00259"></a>00259     <span class="comment">// The result 123456780 &gt; FFFFFFFF that is the maximum size 32 bit</span>
<a name="l00260"></a>00260     <span class="comment">// integer can store</span>
<a name="l00261"></a>00261     ExecuteAndRenderVariable( buf10.Num(longNum*16,EHex), buf10 );
<a name="l00262"></a>00262 
<a name="l00263"></a>00263     TRealFormat realFormatter(8);
<a name="l00264"></a>00264     ExecuteAndRenderVariable( buf10.Num(3.5,realFormatter), buf10 );
<a name="l00265"></a>00265     ExecuteAndRenderVariable( buf10.Num(10.0/3,realFormatter), buf10 );
<a name="l00266"></a>00266     ExecuteAndRenderVariable( buf10.Num(123.0*1000*1000*1000,realFormatter),
<a name="l00267"></a>00267                               buf10 );
<a name="l00268"></a>00268 
<a name="l00269"></a>00269     <span class="comment">// ---------- Formatting ----------</span>
<a name="l00270"></a>00270     output.Append( _L(<span class="stringliteral">&quot;\nFormatting data types\n&quot;</span>) );
<a name="l00271"></a>00271     TBuf&lt;64&gt; buf;
<a name="l00272"></a>00272     RenderVariableFormatted( buf, output, KRenderCharacteristics );
<a name="l00273"></a>00273 
<a name="l00274"></a>00274     <span class="comment">// binary format using %b</span>
<a name="l00275"></a>00275     ExecuteAndRenderVariableFormatted(
<a name="l00276"></a>00276         buf.Format( _L(<span class="stringliteral">&quot;binary=%b&quot;</span> ), 33),
<a name="l00277"></a>00277         buf,output, KRenderDefault );
<a name="l00278"></a>00278 
<a name="l00279"></a>00279     <span class="comment">// integer format using %d</span>
<a name="l00280"></a>00280     ExecuteAndRenderVariableFormatted(
<a name="l00281"></a>00281         buf.Format( _L(<span class="stringliteral">&quot;decimal=%d&quot;</span> ), 33),
<a name="l00282"></a>00282         buf,output, KRenderDefault );
<a name="l00283"></a>00283 
<a name="l00284"></a>00284     <span class="comment">// hexadecimal format using %x</span>
<a name="l00285"></a>00285     ExecuteAndRenderVariableFormatted(
<a name="l00286"></a>00286         buf.Format( _L(<span class="stringliteral">&quot;hexadecimal=%x&quot;</span> ), 33),
<a name="l00287"></a>00287         buf,output, KRenderDefault );
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     <span class="comment">// real as exponent format</span>
<a name="l00290"></a>00290     ExecuteAndRenderVariableFormatted(
<a name="l00291"></a>00291         buf.Format( _L(<span class="stringliteral">&quot;real (exp)=%e&quot;</span> ), 33.43),
<a name="l00292"></a>00292         buf,output, KRenderDefault );
<a name="l00293"></a>00293 
<a name="l00294"></a>00294     <span class="comment">// real as fixed format</span>
<a name="l00295"></a>00295     ExecuteAndRenderVariableFormatted(
<a name="l00296"></a>00296         buf.Format( _L(<span class="stringliteral">&quot;real (fixed)=%f&quot;</span> ), 33.43),
<a name="l00297"></a>00297         buf,output, KRenderDefault );
<a name="l00298"></a>00298 
<a name="l00299"></a>00299     <span class="comment">// pointer to descriptor</span>
<a name="l00300"></a>00300     TPtrC str = _L(<span class="stringliteral">&quot;hello&quot;</span>);
<a name="l00301"></a>00301     RenderVariableString( str );
<a name="l00302"></a>00302     ExecuteAndRenderVariableFormatted(
<a name="l00303"></a>00303         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%S&#39;&quot;</span> ), &amp;str),
<a name="l00304"></a>00304         buf,output, KRenderDefault );
<a name="l00305"></a>00305 
<a name="l00306"></a>00306     <span class="comment">// pointer to null terminated character array</span>
<a name="l00307"></a>00307     ExecuteAndRenderVariableFormatted(
<a name="l00308"></a>00308         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%s&#39;&quot;</span> ), str.Ptr()),
<a name="l00309"></a>00309         buf,output, KRenderDefault );
<a name="l00310"></a>00310 
<a name="l00311"></a>00311     <span class="comment">// ---------- Formatting align and padding ----------</span>
<a name="l00312"></a>00312     output.Append( _L(<span class="stringliteral">&quot;\nFormatting align and padding\n&quot;</span>) );
<a name="l00313"></a>00313 
<a name="l00314"></a>00314     <span class="comment">// padding width: 10, default pad character, default alignment</span>
<a name="l00315"></a>00315     ExecuteAndRenderVariableFormatted(
<a name="l00316"></a>00316         buf.Format( _L(<span class="stringliteral">&quot;binary=%10b&quot;</span> ), 33),
<a name="l00317"></a>00317         buf,output, KRenderDefault );
<a name="l00318"></a>00318 
<a name="l00319"></a>00319     <span class="comment">// padding width: 10, &#39;0&#39; as pad character, default alignment</span>
<a name="l00320"></a>00320     ExecuteAndRenderVariableFormatted(
<a name="l00321"></a>00321         buf.Format( _L(<span class="stringliteral">&quot;binary=%010b&quot;</span> ), 33),
<a name="l00322"></a>00322         buf,output, KRenderDefault );
<a name="l00323"></a>00323 
<a name="l00324"></a>00324     <span class="comment">// padding width: 8, &#39;0&#39; as pad character, default alignment</span>
<a name="l00325"></a>00325     ExecuteAndRenderVariableFormatted(
<a name="l00326"></a>00326         buf.Format( _L(<span class="stringliteral">&quot;binary=%08d&quot;</span> ), 12345),
<a name="l00327"></a>00327         buf,output, KRenderDefault );
<a name="l00328"></a>00328 
<a name="l00329"></a>00329     RenderVariableString( str );
<a name="l00330"></a>00330     <span class="comment">// padding width: 20, default pad character, default alignment</span>
<a name="l00331"></a>00331     ExecuteAndRenderVariableFormatted(
<a name="l00332"></a>00332         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%20S&#39;&quot;</span> ), &amp;str),
<a name="l00333"></a>00333         buf,output, KRenderDefault );
<a name="l00334"></a>00334 
<a name="l00335"></a>00335     <span class="comment">// padding width: 20, &#39;0&#39; as pad character, default alignment</span>
<a name="l00336"></a>00336     ExecuteAndRenderVariableFormatted(
<a name="l00337"></a>00337         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%020S&#39;&quot;</span> ), &amp;str),
<a name="l00338"></a>00338         buf,output, KRenderDefault );
<a name="l00339"></a>00339 
<a name="l00340"></a>00340     <span class="comment">// padding width: 20, default (space) as pad character, center alignment</span>
<a name="l00341"></a>00341     ExecuteAndRenderVariableFormatted(
<a name="l00342"></a>00342         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%=20S&#39;&quot;</span> ), &amp;str),
<a name="l00343"></a>00343         buf,output, KRenderDefault );
<a name="l00344"></a>00344 
<a name="l00345"></a>00345     <span class="comment">// padding width: 20, default (space) as pad character, left alignment</span>
<a name="l00346"></a>00346     ExecuteAndRenderVariableFormatted(
<a name="l00347"></a>00347         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%-20S&#39;&quot;</span> ), &amp;str),
<a name="l00348"></a>00348         buf,output, KRenderDefault );
<a name="l00349"></a>00349 
<a name="l00350"></a>00350     <span class="comment">// padding width: 20, default (space) as pad character, right alignment</span>
<a name="l00351"></a>00351     ExecuteAndRenderVariableFormatted(
<a name="l00352"></a>00352         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%+20S&#39;&quot;</span> ), &amp;str),
<a name="l00353"></a>00353         buf,output, KRenderDefault );
<a name="l00354"></a>00354 
<a name="l00355"></a>00355     <span class="comment">// padding width: 20, custom pad character, center alignment</span>
<a name="l00356"></a>00356     ExecuteAndRenderVariableFormatted(
<a name="l00357"></a>00357         buf.Format( _L(<span class="stringliteral">&quot;str=&#39;%=*20S&#39;&quot;</span> ), <span class="charliteral">&#39;.&#39;</span>, &amp;str),
<a name="l00358"></a>00358         buf,output, KRenderDefault );
<a name="l00359"></a>00359 
<a name="l00360"></a>00360     <span class="comment">// ---------- Modifying content in other means ----------</span>
<a name="l00361"></a>00361     output.Append( _L(<span class="stringliteral">&quot;\nOther modifications...\n&quot;</span>) );
<a name="l00362"></a>00362     buf.Copy(_L(<span class="stringliteral">&quot;abcd&quot;</span>));
<a name="l00363"></a>00363     RenderVariableString( buf );
<a name="l00364"></a>00364 
<a name="l00365"></a>00365     <span class="comment">// insert a string to middle of buffer</span>
<a name="l00366"></a>00366     ExecuteAndRenderVariableFormatted(
<a name="l00367"></a>00367         buf.Insert( 2, _L(<span class="stringliteral">&quot;____&quot;</span>) ),
<a name="l00368"></a>00368         buf, output, KRenderDefault );
<a name="l00369"></a>00369 
<a name="l00370"></a>00370     <span class="comment">// replaces a portion with given string</span>
<a name="l00371"></a>00371     ExecuteAndRenderVariableFormatted(
<a name="l00372"></a>00372         buf.Replace( 3, 2, _L(<span class="stringliteral">&quot;****&quot;</span>) ),
<a name="l00373"></a>00373         buf, output, KRenderDefault );
<a name="l00374"></a>00374 
<a name="l00375"></a>00375     <span class="comment">// replaces but since portion size is 0, this is same</span>
<a name="l00376"></a>00376     <span class="comment">// as insert( 1, _L(&quot;AA&quot;) );</span>
<a name="l00377"></a>00377     ExecuteAndRenderVariableFormatted(
<a name="l00378"></a>00378         buf.Replace( 1, 0, _L(<span class="stringliteral">&quot;AA&quot;</span>) ),
<a name="l00379"></a>00379         buf, output, KRenderDefault );
<a name="l00380"></a>00380 
<a name="l00381"></a>00381     <span class="comment">// replaces a portion but since no data empty, this is same</span>
<a name="l00382"></a>00382     <span class="comment">// as delete( 1, 9 );</span>
<a name="l00383"></a>00383     ExecuteAndRenderVariableFormatted(
<a name="l00384"></a>00384         buf.Replace( 2, 9, _L(<span class="stringliteral">&quot;&quot;</span>) ),
<a name="l00385"></a>00385         buf, output, KRenderDefault );
<a name="l00386"></a>00386 
<a name="l00387"></a>00387     <span class="comment">// delete from index 1, 2 characters</span>
<a name="l00388"></a>00388     buf.Copy( _L(<span class="stringliteral">&quot;Hello!&quot;</span> ));
<a name="l00389"></a>00389     RenderVariableString(buf);
<a name="l00390"></a>00390     ExecuteAndRenderVariableFormatted(
<a name="l00391"></a>00391         buf.Delete( 1, 2 ),
<a name="l00392"></a>00392         buf, output, KRenderDefault );
<a name="l00393"></a>00393 
<a name="l00394"></a>00394     <span class="comment">// ---------- Trimming ----------</span>
<a name="l00395"></a>00395     output.Append( _L(<span class="stringliteral">&quot;\nTrimming. The buf in each case is\n&quot;</span>) );
<a name="l00396"></a>00396     buf.Copy( _L( <span class="stringliteral">&quot;    Hello   World!  &quot;</span> ) );
<a name="l00397"></a>00397     RenderVariableString(buf);
<a name="l00398"></a>00398 
<a name="l00399"></a>00399     <span class="comment">// trim from left</span>
<a name="l00400"></a>00400     ExecuteAndRenderVariableFormatted(
<a name="l00401"></a>00401         buf.TrimLeft(),
<a name="l00402"></a>00402         buf, output, KRenderDefault );
<a name="l00403"></a>00403 
<a name="l00404"></a>00404     <span class="comment">// trim from right</span>
<a name="l00405"></a>00405     buf.Copy( _L( <span class="stringliteral">&quot;    Hello   World!  &quot;</span> ) );
<a name="l00406"></a>00406     ExecuteAndRenderVariableFormatted(
<a name="l00407"></a>00407         buf.TrimRight(),
<a name="l00408"></a>00408         buf, output, KRenderDefault );
<a name="l00409"></a>00409 
<a name="l00410"></a>00410     <span class="comment">// trim from left &amp; right</span>
<a name="l00411"></a>00411     buf.Copy( _L( <span class="stringliteral">&quot;    Hello   World!  &quot;</span> ) );
<a name="l00412"></a>00412     ExecuteAndRenderVariableFormatted(
<a name="l00413"></a>00413         buf.Trim(),
<a name="l00414"></a>00414         buf, output, KRenderDefault );
<a name="l00415"></a>00415 
<a name="l00416"></a>00416     <span class="comment">// trim from left &amp; right &amp; from middle</span>
<a name="l00417"></a>00417     buf.Copy( _L( <span class="stringliteral">&quot;    Hello   World!  &quot;</span> ) );
<a name="l00418"></a>00418     ExecuteAndRenderVariableFormatted(
<a name="l00419"></a>00419         buf.TrimAll(),
<a name="l00420"></a>00420         buf, output, KRenderDefault );
<a name="l00421"></a>00421 
<a name="l00422"></a>00422     <span class="comment">// ---------- Filling ----------</span>
<a name="l00423"></a>00423     output.Append( _L(<span class="stringliteral">&quot;\nFilling...\n&quot;</span>) );
<a name="l00424"></a>00424     buf.Copy( _L( <span class="stringliteral">&quot;abcd&quot;</span> ) );
<a name="l00425"></a>00425     RenderVariableString(buf);
<a name="l00426"></a>00426     <span class="comment">// fill chars from zero index to current length with given char</span>
<a name="l00427"></a>00427     ExecuteAndRenderVariableFormatted(
<a name="l00428"></a>00428         buf.Fill(<span class="charliteral">&#39;*&#39;</span>),
<a name="l00429"></a>00429         buf, output, KRenderCharacteristics );
<a name="l00430"></a>00430 
<a name="l00431"></a>00431     <span class="comment">// fill chars from zero index to 11 with given char</span>
<a name="l00432"></a>00432     ExecuteAndRenderVariableFormatted(
<a name="l00433"></a>00433         buf.Fill(<span class="charliteral">&#39;.&#39;</span>, 12),
<a name="l00434"></a>00434         buf, output, KRenderCharacteristics );
<a name="l00435"></a>00435 
<a name="l00436"></a>00436     <span class="comment">// fill chars from zero index to 6 with binary zero</span>
<a name="l00437"></a>00437     ExecuteAndRenderVariableFormatted(
<a name="l00438"></a>00438         buf.FillZ(6),
<a name="l00439"></a>00439         buf, output, KRenderCharacteristics | KRenderContentAsBinary);
<a name="l00440"></a>00440 
<a name="l00441"></a>00441     <span class="comment">// change content of buffer (so length changes)</span>
<a name="l00442"></a>00442     ExecuteAndRenderVariableFormatted(
<a name="l00443"></a>00443         buf.Copy( _L(<span class="stringliteral">&quot;Hey!&quot;</span>) ),
<a name="l00444"></a>00444         buf, output, KRenderDefault);
<a name="l00445"></a>00445     <span class="comment">// fill chars from zero index to current length binary zero</span>
<a name="l00446"></a>00446     ExecuteAndRenderVariableFormatted(
<a name="l00447"></a>00447         buf.FillZ(),
<a name="l00448"></a>00448         buf, output, KRenderCharacteristics | KRenderContentAsBinary);
<a name="l00449"></a>00449 
<a name="l00450"></a>00450     <span class="comment">// ---------- Filling ----------</span>
<a name="l00451"></a>00451     output.Append( _L(<span class="stringliteral">&quot;\nText conversions...\n&quot;</span>) );
<a name="l00452"></a>00452     buf.Copy( _L( <span class="stringliteral">&quot;Hello World&quot;</span> ) );
<a name="l00453"></a>00453     RenderVariableString(buf);
<a name="l00454"></a>00454     ExecuteAndRenderVariableFormatted(
<a name="l00455"></a>00455         buf.LowerCase(),
<a name="l00456"></a>00456         buf, output, KRenderDefault);
<a name="l00457"></a>00457 
<a name="l00458"></a>00458     ExecuteAndRenderVariableFormatted(
<a name="l00459"></a>00459         buf.UpperCase(),
<a name="l00460"></a>00460         buf, output, KRenderDefault);
<a name="l00461"></a>00461 
<a name="l00462"></a>00462     ExecuteAndRenderVariableFormatted(
<a name="l00463"></a>00463         buf.Capitalize(),
<a name="l00464"></a>00464         buf, output, KRenderDefault);
<a name="l00465"></a>00465 
<a name="l00466"></a>00466     <span class="comment">// ---------- Swapping ----------</span>
<a name="l00467"></a>00467     output.Append( _L(<span class="stringliteral">&quot;\nSwapping...\n&quot;</span>) );
<a name="l00468"></a>00468     TBuf&lt;20&gt; buf1( _L(<span class="stringliteral">&quot;buf1!&quot;</span>) );
<a name="l00469"></a>00469     TBuf&lt;20&gt; buf2( _L(<span class="stringliteral">&quot;buf2**&quot;</span>) );
<a name="l00470"></a>00470     RenderVariableString( buf1 );
<a name="l00471"></a>00471     RenderVariableString( buf2 );
<a name="l00472"></a>00472     output.Append( _L(<span class="stringliteral">&quot;After buf1.Swap(buf2)\n&quot;</span>) );
<a name="l00473"></a>00473     buf1.Swap(buf2);
<a name="l00474"></a>00474     RenderVariableString( buf1 );
<a name="l00475"></a>00475     RenderVariableString( buf2 );
<a name="l00476"></a>00476 
<a name="l00477"></a>00477     <span class="comment">// ---------- AppendXXX ----------</span>
<a name="l00478"></a>00478     <span class="comment">// AppendXXX() methods are similar like other methods in descriptor API.</span>
<a name="l00479"></a>00479     <span class="comment">// They just append to the end of the descriptor buffer instead of</span>
<a name="l00480"></a>00480     <span class="comment">// replacing the current content. That&#39;s why appending methods are not</span>
<a name="l00481"></a>00481     <span class="comment">// described here.</span>
<a name="l00482"></a>00482 
<a name="l00483"></a>00483     iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a8e10673e2504a4af6382f26794bb8004">UpdateView</a>();
<a name="l00484"></a>00484     }
<a name="l00485"></a>00485 
<a name="l00486"></a>00486 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00487"></a>00487 <span class="comment">// This example method is documented in header file &quot;DescriptorExamples.h&quot;</span>
<a name="l00488"></a>00488 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00489"></a><a class="code" href="class_c_descriptor_examples.html#ae51548be0afb3319e849f7ff8ccf440f">00489</a> <span class="keywordtype">void</span> <a class="code" href="class_c_descriptor_examples.html#ae51548be0afb3319e849f7ff8ccf440f">CDescriptorExamples::CharacterConversionsL</a>()
<a name="l00490"></a>00490     {
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492     <span class="comment">// Create session to the file server</span>
<a name="l00493"></a>00493     RFs fsSession;
<a name="l00494"></a>00494     User::LeaveIfError( fsSession.Connect() );
<a name="l00495"></a>00495     CleanupClosePushL(fsSession);
<a name="l00496"></a>00496 
<a name="l00497"></a>00497     <span class="comment">// Create character converter that can convert between</span>
<a name="l00498"></a>00498     <span class="comment">// SMS encoding and UCS-2</span>
<a name="l00499"></a>00499     CCnvCharacterSetConverter *converter;
<a name="l00500"></a>00500     converter = CCnvCharacterSetConverter::NewLC();
<a name="l00501"></a>00501     converter-&gt;PrepareToConvertToOrFromL(KCharacterSetIdentifierSms7Bit,
<a name="l00502"></a>00502                                          fsSession );
<a name="l00503"></a>00503 
<a name="l00504"></a>00504     <span class="comment">// Declare descriptor containing a string encoded with</span>
<a name="l00505"></a>00505     <span class="comment">// 7-bit SMS encoding.</span>
<a name="l00506"></a>00506     <span class="keyword">const</span> TUint8 SMSSourceBytes[] =
<a name="l00507"></a>00507         {
<a name="l00508"></a>00508         54,      <span class="comment">// character &#39;6&#39;  (takes one byte)</span>
<a name="l00509"></a>00509         2,       <span class="comment">// character &#39;$&#39;  (takes one byte)</span>
<a name="l00510"></a>00510         27, 61,  <span class="comment">// character &#39;~&#39;  (takes two bytes)</span>
<a name="l00511"></a>00511         53,      <span class="comment">// character &#39;5&#39;  (takes one byte)</span>
<a name="l00512"></a>00512         27, 101, <span class="comment">// euro character (takes two bytes)</span>
<a name="l00513"></a>00513         };
<a name="l00514"></a>00514     TPtrC8 SMSEncodedStr(SMSSourceBytes,<span class="keyword">sizeof</span>(SMSSourceBytes));
<a name="l00515"></a>00515 
<a name="l00516"></a>00516     <span class="comment">// Convert the SMS encoded message to the UCS-2 encoding</span>
<a name="l00517"></a>00517     TInt state = CCnvCharacterSetConverter::KStateDefault;
<a name="l00518"></a>00518     TBuf&lt;64&gt; UCS2Buf;
<a name="l00519"></a>00519     converter-&gt;ConvertToUnicode(UCS2Buf, SMSEncodedStr, state);
<a name="l00520"></a>00520 
<a name="l00521"></a>00521     <span class="comment">// remove objects from the cleanup stack</span>
<a name="l00522"></a>00522     CleanupStack::PopAndDestroy(2); <span class="comment">// converter, fsSession</span>
<a name="l00523"></a>00523 }
<a name="l00524"></a>00524     <span class="comment">// this is used to point to correct position in view buffer</span>
<a name="l00525"></a>00525     TPtr output( iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00526"></a>00526     CArrayFix&lt;CCnvCharacterSetConverter::SCharacterSet&gt;* sets;
<a name="l00527"></a>00527     RFs fsSession;
<a name="l00528"></a>00528     CCnvCharacterSetConverter *converter;
<a name="l00529"></a>00529 
<a name="l00530"></a>00530     <span class="comment">// ---------- List available converters ----------</span>
<a name="l00531"></a>00531     <span class="comment">// This example lists all character sets converters available in the</span>
<a name="l00532"></a>00532     <span class="comment">// system.</span>
<a name="l00533"></a>00533     RenderHeader( _L( <span class="stringliteral">&quot;CharacterConversions: List converters&quot;</span> ), output );
<a name="l00534"></a>00534 
<a name="l00535"></a>00535     <span class="comment">// open connection to file server and push the instance to the cleanup</span>
<a name="l00536"></a>00536     <span class="comment">// stack</span>
<a name="l00537"></a>00537     User::LeaveIfError(fsSession.Connect());
<a name="l00538"></a>00538     CleanupClosePushL(fsSession);
<a name="l00539"></a>00539     <span class="comment">// get list of character sets and push it to cleanup stack</span>
<a name="l00540"></a>00540     sets = CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableL(fsSession);
<a name="l00541"></a>00541     CleanupStack::PushL(sets);
<a name="l00542"></a>00542     <span class="comment">// show names</span>
<a name="l00543"></a>00543     output.Append( _L( <span class="stringliteral">&quot;\nList of available character converters:\n&quot;</span> ) );
<a name="l00544"></a>00544     <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i=sets-&gt;Count()-1; i&gt;=0; i-- )
<a name="l00545"></a>00545     {
<a name="l00546"></a>00546         TPtrC name = sets-&gt;At(i).Name();
<a name="l00547"></a>00547         output.AppendFormat( _L(<span class="stringliteral">&quot;  %S\n&quot;</span>), &amp;name );
<a name="l00548"></a>00548     }
<a name="l00549"></a>00549 
<a name="l00550"></a>00550     <span class="comment">// ---------- Convert from 7-bit SMS to Unicode ----------</span>
<a name="l00551"></a>00551     <span class="comment">// This example converts SMS to Unicode string.</span>
<a name="l00552"></a>00552     <span class="comment">//</span>
<a name="l00553"></a>00553     <span class="comment">// SMS character set consist of characters whose value is specified with 7</span>
<a name="l00554"></a>00554     <span class="comment">// bits. So 128 characters are available in 7-bit SMS character set (default</span>
<a name="l00555"></a>00555     <span class="comment">// alphabet). However, character set is extended so that if a character in</span>
<a name="l00556"></a>00556     <span class="comment">// message is ESC (0x1B) the next character is treated as extended character</span>
<a name="l00557"></a>00557     <span class="comment">// outside the default alphabet. So 7-bit SMS encoding can represent 255</span>
<a name="l00558"></a>00558     <span class="comment">// different characters when using extended behaviour.</span>
<a name="l00559"></a>00559     <span class="comment">//</span>
<a name="l00560"></a>00560     <span class="comment">// The default alphabet is specified in ETSI &quot;GSM 03.38&quot;. However, to</span>
<a name="l00561"></a>00561     <span class="comment">// quickly view standard characters and extended ones, refer to</span>
<a name="l00562"></a>00562     <span class="comment">// (http://www.ozeki.hu/index.phtml?ow_page_number=137) or to</span>
<a name="l00563"></a>00563     <span class="comment">// (http://www.csoft.co.uk/character_sets/gsm.htm) or google with search</span>
<a name="l00564"></a>00564     <span class="comment">// string &quot;GSM character set&quot; or &quot;SMS character set&quot;.</span>
<a name="l00565"></a>00565     <span class="comment">//</span>
<a name="l00566"></a>00566     <span class="comment">// GSM 03.38 specification specifies that SMS message can be encoded with</span>
<a name="l00567"></a>00567     <span class="comment">// four character encodings. This example codes the string with default</span>
<a name="l00568"></a>00568     <span class="comment">// 7-bit SMS alphabet. SMS can consist of maximum of 160 characters. Packing</span>
<a name="l00569"></a>00569     <span class="comment">// mechanism specified in GSM 03.38 makes it possible to pack 160 7-bit</span>
<a name="l00570"></a>00570     <span class="comment">// characters to 140 bytes.</span>
<a name="l00571"></a>00571     <span class="comment">//</span>
<a name="l00572"></a>00572     <span class="comment">// Symbian provices character conversion for SMS 7-bit SMS data. However, it</span>
<a name="l00573"></a>00573     <span class="comment">// doesn&#39;t use packed format specified in GSM 03.38. Instead, it treats the</span>
<a name="l00574"></a>00574     <span class="comment">// binary array (of 8 bit numbers) to store 7 bit SMS characters.</span>
<a name="l00575"></a>00575     <span class="comment">//</span>
<a name="l00576"></a>00576     <span class="comment">// Lets assume that we have a SMS that consist of string &quot;6$~5e&quot; (where the</span>
<a name="l00577"></a>00577     <span class="comment">// &#39;e&#39; is meant to be an euro sign). The SMS and Unicode character codes for</span>
<a name="l00578"></a>00578     <span class="comment">// the characters are:</span>
<a name="l00579"></a>00579     <span class="comment">//</span>
<a name="l00580"></a>00580     <span class="comment">// char | SMS value (7bit) | Unicode value (16 bit)</span>
<a name="l00581"></a>00581     <span class="comment">// ------------------------------------------------</span>
<a name="l00582"></a>00582     <span class="comment">// &#39;6&#39;  |  54              |   54</span>
<a name="l00583"></a>00583     <span class="comment">// &#39;$&#39;  |   2              |   36</span>
<a name="l00584"></a>00584     <span class="comment">// &#39;~&#39;  |  27              |  126 // Extended character coded</span>
<a name="l00585"></a>00585     <span class="comment">//      |  61              |      // with two 7 bit values: ESC+code</span>
<a name="l00586"></a>00586     <span class="comment">// &#39;5&#39;  |  53              |   53</span>
<a name="l00587"></a>00587     <span class="comment">// &#39;e&#39;  |  27              | 8364 // &quot;Euro sign&quot;: Extended character</span>
<a name="l00588"></a>00588     <span class="comment">//      | 101              |      // coded with two 7 bit values: ESC+code</span>
<a name="l00589"></a>00589     <span class="comment">//</span>
<a name="l00590"></a>00590     <span class="keyword">const</span> TUint8 SMSSourceBytes[] =
<a name="l00591"></a>00591         {
<a name="l00592"></a>00592         54,2,27,61,53,27,101
<a name="l00593"></a>00593         };
<a name="l00594"></a>00594 
<a name="l00595"></a>00595     <span class="comment">// create converter that converts character data between 7-bit GSM data and</span>
<a name="l00596"></a>00596     <span class="comment">// Unicode</span>
<a name="l00597"></a>00597     converter = CCnvCharacterSetConverter::NewLC();
<a name="l00598"></a>00598     converter-&gt;PrepareToConvertToOrFromL( KCharacterSetIdentifierSms7Bit,
<a name="l00599"></a>00599                                           fsSession );
<a name="l00600"></a>00600 
<a name="l00601"></a>00601     <span class="comment">// declare output buffer and declare a 8 bit descriptor to describe our</span>
<a name="l00602"></a>00602     <span class="comment">// 7-bit SMS data.</span>
<a name="l00603"></a>00603     TInt state = CCnvCharacterSetConverter::KStateDefault;
<a name="l00604"></a>00604     TBuf16&lt;10&gt; unicodeConverted;
<a name="l00605"></a>00605     TPtrC8 SMSSource( SMSSourceBytes, <span class="keyword">sizeof</span>( SMSSourceBytes ) );
<a name="l00606"></a>00606 
<a name="l00607"></a>00607     <span class="comment">// convert the 7-bit SMS data to Unicode characters and store results to</span>
<a name="l00608"></a>00608     <span class="comment">// variable &quot;unicodeConverted&quot;</span>
<a name="l00609"></a>00609     converter-&gt;ConvertToUnicode( unicodeConverted, SMSSource, state );
<a name="l00610"></a>00610 
<a name="l00611"></a>00611     <span class="comment">// show unicode string converted from SMS (&quot;6$~5€&quot;);</span>
<a name="l00612"></a>00612     RenderHeader( _L( <span class="stringliteral">&quot;CharacterConversions: SMS to Unicode&quot;</span> ), output );
<a name="l00613"></a>00613     output.Append( _L(<span class="stringliteral">&quot;SMS data consist of 7 bit character values (where euro and tilde char consist of two numbers):\n&quot;</span>) );
<a name="l00614"></a>00614     RenderVariableBinary( SMSSource );
<a name="l00615"></a>00615     output.Append( _L(<span class="stringliteral">&quot;\nWhile unicode uses 16 bits to store each character:\n&quot;</span>) );
<a name="l00616"></a>00616     RenderVariableBinary( unicodeConverted );
<a name="l00617"></a>00617     RenderVariableString( unicodeConverted );
<a name="l00618"></a>00618 
<a name="l00619"></a>00619     <span class="comment">// ---------- Unicode To SMS ----------</span>
<a name="l00620"></a>00620     <span class="comment">// Declare unicode string that consist &quot;normal&quot; and special characters</span>
<a name="l00621"></a>00621     RenderHeader( _L( <span class="stringliteral">&quot;CharacterConversions: Unicode to SMS&quot;</span> ), output );
<a name="l00622"></a>00622     
<a name="l00623"></a>00623     <span class="comment">//nice characters but can&#39;t be compiled with GCCE ;)</span>
<a name="l00624"></a>00624     <span class="comment">//TBuf&lt;64&gt; unicodeSource(_L(&quot;Some nice chars: ö,ä,Ö,Ä \x20AC&quot;) ); // 0x20AC = euro sign, desicmal 8364;</span>
<a name="l00625"></a>00625     TBuf&lt;64&gt; unicodeSource(_L(<span class="stringliteral">&quot;Some nice chars: \x00F6,\x00E4,\x004F,\x00C4 \x20AC&quot;</span>) );
<a name="l00626"></a>00626     
<a name="l00627"></a>00627     <span class="comment">//ö == 00F6 </span>
<a name="l00628"></a>00628     <span class="comment">//Ö == 004F</span>
<a name="l00629"></a>00629     <span class="comment">//ä == 00E4</span>
<a name="l00630"></a>00630     <span class="comment">//Ä == 00C4</span>
<a name="l00631"></a>00631     
<a name="l00632"></a>00632     RenderVariableString( unicodeSource ); 
<a name="l00633"></a>00633     
<a name="l00634"></a>00634     RenderVariableBinary( unicodeSource );
<a name="l00635"></a>00635 
<a name="l00636"></a>00636     <span class="comment">// lets convert the unicode to 7 bit SMS</span>
<a name="l00637"></a>00637     TBuf8&lt;128&gt; convertedToSMS;
<a name="l00638"></a>00638     converter-&gt;ConvertFromUnicode( convertedToSMS, unicodeSource );
<a name="l00639"></a>00639     RenderVariableBinary( convertedToSMS );
<a name="l00640"></a>00640     RenderVariableString( convertedToSMS );
<a name="l00641"></a>00641 
<a name="l00642"></a>00642     output.Append( _L(<span class="stringliteral">&quot;\nEuro character is espaced in SMS encoding so number of &#39;chars&#39; differ:\n&quot;</span>) );
<a name="l00643"></a>00643     RenderResult( unicodeSource.Length() );
<a name="l00644"></a>00644     RenderResult( convertedToSMS.Length() );
<a name="l00645"></a>00645 
<a name="l00646"></a>00646     output.Append( _L(<span class="stringliteral">&quot;\nUnicode consist of 16 bit chars while SMS consist of 8 bit ones. Number of bytes in encodings:\n&quot;</span>) );
<a name="l00647"></a>00647     RenderResult( unicodeSource.Size() );
<a name="l00648"></a>00648     RenderResult( convertedToSMS.Size() );
<a name="l00649"></a>00649 
<a name="l00650"></a>00650     iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a8e10673e2504a4af6382f26794bb8004">UpdateView</a>();
<a name="l00651"></a>00651     CleanupStack::PopAndDestroy(3); <span class="comment">// fsSession, sets, converter</span>
<a name="l00652"></a>00652     }
<a name="l00653"></a>00653 
<a name="l00654"></a>00654 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00655"></a>00655 <span class="comment">// This example method is documented in header file &quot;DescriptorExamples.h&quot;</span>
<a name="l00656"></a>00656 <span class="comment">// -----------------------------------------------------------------------------</span>
<a name="l00657"></a><a class="code" href="class_c_descriptor_examples.html#ace06425c580f03f1bdd084f079de168f">00657</a> <span class="keywordtype">void</span> <a class="code" href="class_c_descriptor_examples.html#ace06425c580f03f1bdd084f079de168f">CDescriptorExamples::LexicalAnalysis</a>()
<a name="l00658"></a>00658     {
<a name="l00659"></a>00659     TPtr output( iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00660"></a>00660     RenderHeader( _L( <span class="stringliteral">&quot;LexicalAnalysis&quot;</span> ), output );
<a name="l00661"></a>00661 
<a name="l00662"></a>00662     <span class="comment">// TLex provides methods for parsin text. Its usage is quite well</span>
<a name="l00663"></a>00663     <span class="comment">// documented in symbian documentation &quot;Using TLex&quot;. However, converting</span>
<a name="l00664"></a>00664     <span class="comment">// strings to numbers is not explained. So this example explains them.</span>
<a name="l00665"></a>00665     TLex lex;
<a name="l00666"></a>00666 
<a name="l00667"></a>00667     TInt num1;
<a name="l00668"></a>00668     lex.Assign( _L(<span class="stringliteral">&quot;-254 is number&quot;</span>) );
<a name="l00669"></a>00669     RenderVariableString(lex.Remainder());
<a name="l00670"></a>00670     <span class="comment">// parse integer number</span>
<a name="l00671"></a>00671     ExecuteAndRenderVariableFormatted(
<a name="l00672"></a>00672         lex.Val(num1),
<a name="l00673"></a>00673         num1, output, KRenderDefault );
<a name="l00674"></a>00674 
<a name="l00675"></a>00675     TUint32 num2;
<a name="l00676"></a>00676     lex.Assign( _L(<span class="stringliteral">&quot;2ff is hex number&quot;</span>) );
<a name="l00677"></a>00677 
<a name="l00678"></a>00678     RenderVariableString(lex.Remainder());
<a name="l00679"></a>00679     <span class="comment">// parse hex number</span>
<a name="l00680"></a>00680     ExecuteAndRenderVariableFormatted(
<a name="l00681"></a>00681         lex.Val(num2, EHex),
<a name="l00682"></a>00682         num2, output, KRenderDefault );
<a name="l00683"></a>00683 
<a name="l00684"></a>00684     <span class="comment">// parse float</span>
<a name="l00685"></a>00685     TReal32 num3;
<a name="l00686"></a>00686     lex.Assign( _L(<span class="stringliteral">&quot;234.678 is real number&quot;</span>) );
<a name="l00687"></a>00687     RenderVariableString(lex.Remainder());
<a name="l00688"></a>00688     <span class="comment">// parses the value as 234.677993774414!</span>
<a name="l00689"></a>00689     lex.Val(num3, <span class="charliteral">&#39;.&#39;</span>);
<a name="l00690"></a>00690     output.Append( _L( <span class="stringliteral">&quot;lex.Val(num3, &#39;.&#39;) -&gt; num3=&quot;</span> ) );
<a name="l00691"></a>00691     TRealFormat realFormat;
<a name="l00692"></a>00692     output.AppendNum( num3, realFormat );
<a name="l00693"></a>00693 
<a name="l00694"></a>00694     iViewer-&gt;<a class="code" href="class_m_result_viewer.html#a8e10673e2504a4af6382f26794bb8004">UpdateView</a>();
<a name="l00695"></a>00695     }
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
</body>
</html>