Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_manipulating_descriptors_8cpp_source.html
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 <e32std.h></span>
<a name="l00006"></a>00006 <span class="preprocessor">#include <e32base.h></span>
<a name="l00007"></a>00007 <span class="preprocessor">#include <charconv.h></span>
<a name="l00008"></a>00008 <span class="preprocessor">#include <collate.h></span>
<a name="l00009"></a>00009 <span class="preprocessor">#include "DescriptorExamples.h"</span>
<a name="l00010"></a>00010 <span class="preprocessor">#include "StringRenderer.h"</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">// 'output' 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 "DescriptorExamples.h"</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-><a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00035"></a>00035 RenderHeader( _L( <span class="stringliteral">"NonModifyingMethods"</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">"abcdefghijklmnopqrstuvwxyz0123456789"</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 &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">"\nCapacity...\n"</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">"\nExtracting portions...\n"</span> ) );
<a name="l00056"></a>00056
<a name="l00057"></a>00057 <span class="comment">// Left(count) returns a string witn "count" 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">// "ab"</span>
<a name="l00060"></a>00060 RenderResult( str.Left(5) ); <span class="comment">// "abcde"</span>
<a name="l00061"></a>00061
<a name="l00062"></a>00062 <span class="comment">// Right(count) returns a string witn "count" 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">// "89"</span>
<a name="l00065"></a>00065 RenderResult( str.Right(12) ); <span class="comment">// "yz0123456789"</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 "index" and having "count" number of characters</span>
<a name="l00069"></a>00069 RenderResult( str.Mid(2,6) ); <span class="comment">// "cdefgh"</span>
<a name="l00070"></a>00070 RenderResult( str.Mid(33,3) ); <span class="comment">// "789"</span>
<a name="l00071"></a>00071
<a name="l00072"></a>00072 <span class="comment">// if "count" is omitted the rest of the string from "index" is returned</span>
<a name="l00073"></a>00073 RenderResult( str.Mid(28) ); <span class="comment">// "23456789"</span>
<a name="l00074"></a>00074 RenderResult( str.Mid(35) ); <span class="comment">// "9"</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">"\nLocating character...\n"</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">'d'</span>) ); <span class="comment">// 3</span>
<a name="l00081"></a>00081 RenderResultFormatted( _L(<span class="stringliteral">"1ABAD"</span>).Locate(<span class="charliteral">'A'</span>),
<a name="l00082"></a>00082 output, KRenderDefault); <span class="comment">// "1"</span>
<a name="l00083"></a>00083 RenderResultFormatted( _L(<span class="stringliteral">"1ABAD"</span>).LocateReverse(<span class="charliteral">'A'</span>),
<a name="l00084"></a>00084 output, KRenderDefault); <span class="comment">// "1"</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">// 'A' has unicode value of 65 and 'a' 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">"\nCompare()\n"</span> ) );
<a name="l00095"></a>00095
<a name="l00096"></a>00096 <span class="comment">// examplerun: str.Compare(_L("aaa"))=1</span>
<a name="l00097"></a>00097 RenderResultFormatted( str.Compare( _L(<span class="stringliteral">"aaa"</span>) ),
<a name="l00098"></a>00098 output, KRenderDefault); <span class="comment">// >0 : str is greater</span>
<a name="l00099"></a>00099
<a name="l00100"></a>00100 <span class="comment">// examplerun: str.Compare(_L("zzz"))=-25</span>
<a name="l00101"></a>00101 RenderResultFormatted( str.Compare( _L(<span class="stringliteral">"zzz"</span>) ),
<a name="l00102"></a>00102 output, KRenderDefault ); <span class="comment">// <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("ab"))=0</span>
<a name="l00108"></a>00108 RenderResultFormatted( str.Left(2).Compare(_L(<span class="stringliteral">"ab"</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("AB"))=32</span>
<a name="l00112"></a>00112 <span class="comment">// 'A' (65) > 'a' (97)</span>
<a name="l00113"></a>00113 RenderResultFormatted( str.Left(2).Compare(_L(<span class="stringliteral">"AB"</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&, 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">"\nCompareC()...\n"</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">"ab"</span>).CompareC(_L(<span class="stringliteral">"AB"</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 "ab" is less than "AB" while using standars Compare()</span>
<a name="l00137"></a>00137 <span class="comment">// the "ab" is greater than "AB"!!!</span>
<a name="l00138"></a>00138 RenderResultFormatted( _L(<span class="stringliteral">"ab"</span>).CompareC(_L(<span class="stringliteral">"AB"</span>),2,NULL),
<a name="l00139"></a>00139 output, KRenderDefault );
<a name="l00140"></a>00140 RenderResultFormatted( _L(<span class="stringliteral">"ab"</span>).Compare(_L(<span class="stringliteral">"AB"</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("a b").CompareC(_L("A B"),1,&stdMethod)=0</span>
<a name="l00157"></a>00157 <span class="comment">// _L("a b").CompareC(_L("A B"),1,&strictMethod)=-2</span>
<a name="l00158"></a>00158 <span class="comment">//</span>
<a name="l00159"></a>00159 RenderResultFormatted( _L(<span class="stringliteral">"a b"</span>).CompareC(_L(<span class="stringliteral">"A B"</span>),1,&stdMethod),
<a name="l00160"></a>00160 output, KRenderDefault );
<a name="l00161"></a>00161 RenderResultFormatted( _L(<span class="stringliteral">"a b"</span>).CompareC(_L(<span class="stringliteral">"A B"</span>),1,&strictMethod),
<a name="l00162"></a>00162 output, KRenderDefault );
<a name="l00163"></a>00163
<a name="l00164"></a>00164 iViewer-><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 "DescriptorExamples.h"</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-><a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00174"></a>00174 RenderHeader( _L( <span class="stringliteral">"ModifyingMethods"</span> ), output );
<a name="l00175"></a>00175 TBuf<10> 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">"\nCharacteristics of buffer after initialization:\n"</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<20> example(_L(<span class="stringliteral">"Hello"</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">"\nLet's fill the buffer\n"</span>) );
<a name="l00189"></a>00189 buf10.Fill( <span class="charliteral">'*'</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">"\nNow manipilate the length:\n"</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">"\nCopying...\n"</span>) );
<a name="l00203"></a>00203 TPtrC8 narrowHello( _L8( <span class="stringliteral">"hello"</span> ) );
<a name="l00204"></a>00204 RenderVariableString( narrowHello );
<a name="l00205"></a>00205 TPtrC16 wideHello( _L16( <span class="stringliteral">"unIc heLLo"</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">"\nRepeating...\n"</span>) );
<a name="l00221"></a>00221 TPtrC abc( _L( <span class="stringliteral">"aBc"</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">"\nJustifying...\n"</span>) );
<a name="l00230"></a>00230 RenderVariableString( abc );
<a name="l00231"></a>00231 <span class="comment">// show aligning of string "abs" to our buffer</span>
<a name="l00232"></a>00232 ExecuteAndRenderVariable( buf10.Justify(abc,8,ELeft,<span class="charliteral">'_'</span>), buf10 );
<a name="l00233"></a>00233 ExecuteAndRenderVariable( buf10.Justify(abc,8,ECenter,<span class="charliteral">'*'</span>), buf10 );
<a name="l00234"></a>00234 ExecuteAndRenderVariable( buf10.Justify(abc,10,ERight,<span class="charliteral">'.'</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">"\nRendering numbers...\n"</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 > 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">"\nFormatting data types\n"</span>) );
<a name="l00271"></a>00271 TBuf<64> 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">"binary=%b"</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">"decimal=%d"</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">"hexadecimal=%x"</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">"real (exp)=%e"</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">"real (fixed)=%f"</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">"hello"</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">"str='%S'"</span> ), &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">"str='%s'"</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">"\nFormatting align and padding\n"</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">"binary=%10b"</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, '0' as pad character, default alignment</span>
<a name="l00320"></a>00320 ExecuteAndRenderVariableFormatted(
<a name="l00321"></a>00321 buf.Format( _L(<span class="stringliteral">"binary=%010b"</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, '0' as pad character, default alignment</span>
<a name="l00325"></a>00325 ExecuteAndRenderVariableFormatted(
<a name="l00326"></a>00326 buf.Format( _L(<span class="stringliteral">"binary=%08d"</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">"str='%20S'"</span> ), &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, '0' as pad character, default alignment</span>
<a name="l00336"></a>00336 ExecuteAndRenderVariableFormatted(
<a name="l00337"></a>00337 buf.Format( _L(<span class="stringliteral">"str='%020S'"</span> ), &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">"str='%=20S'"</span> ), &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">"str='%-20S'"</span> ), &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">"str='%+20S'"</span> ), &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">"str='%=*20S'"</span> ), <span class="charliteral">'.'</span>, &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">"\nOther modifications...\n"</span>) );
<a name="l00362"></a>00362 buf.Copy(_L(<span class="stringliteral">"abcd"</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">"____"</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">"****"</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("AA") );</span>
<a name="l00377"></a>00377 ExecuteAndRenderVariableFormatted(
<a name="l00378"></a>00378 buf.Replace( 1, 0, _L(<span class="stringliteral">"AA"</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">""</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">"Hello!"</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">"\nTrimming. The buf in each case is\n"</span>) );
<a name="l00396"></a>00396 buf.Copy( _L( <span class="stringliteral">" Hello World! "</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">" Hello World! "</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 & right</span>
<a name="l00411"></a>00411 buf.Copy( _L( <span class="stringliteral">" Hello World! "</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 & right & from middle</span>
<a name="l00417"></a>00417 buf.Copy( _L( <span class="stringliteral">" Hello World! "</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">"\nFilling...\n"</span>) );
<a name="l00424"></a>00424 buf.Copy( _L( <span class="stringliteral">"abcd"</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">'*'</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">'.'</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">"Hey!"</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">"\nText conversions...\n"</span>) );
<a name="l00452"></a>00452 buf.Copy( _L( <span class="stringliteral">"Hello World"</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">"\nSwapping...\n"</span>) );
<a name="l00468"></a>00468 TBuf<20> buf1( _L(<span class="stringliteral">"buf1!"</span>) );
<a name="l00469"></a>00469 TBuf<20> buf2( _L(<span class="stringliteral">"buf2**"</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">"After buf1.Swap(buf2)\n"</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'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-><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 "DescriptorExamples.h"</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->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 '6' (takes one byte)</span>
<a name="l00509"></a>00509 2, <span class="comment">// character '$' (takes one byte)</span>
<a name="l00510"></a>00510 27, 61, <span class="comment">// character '~' (takes two bytes)</span>
<a name="l00511"></a>00511 53, <span class="comment">// character '5' (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<64> UCS2Buf;
<a name="l00519"></a>00519 converter->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-><a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00526"></a>00526 CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* 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">"CharacterConversions: List converters"</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">"\nList of available character converters:\n"</span> ) );
<a name="l00544"></a>00544 <span class="keywordflow">for</span>( <span class="keywordtype">int</span> i=sets->Count()-1; i>=0; i-- )
<a name="l00545"></a>00545 {
<a name="l00546"></a>00546 TPtrC name = sets->At(i).Name();
<a name="l00547"></a>00547 output.AppendFormat( _L(<span class="stringliteral">" %S\n"</span>), &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 "GSM 03.38". 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 "GSM character set" or "SMS character set".</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'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 "6$~5e" (where the</span>
<a name="l00577"></a>00577 <span class="comment">// 'e' 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">// '6' | 54 | 54</span>
<a name="l00583"></a>00583 <span class="comment">// '$' | 2 | 36</span>
<a name="l00584"></a>00584 <span class="comment">// '~' | 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">// '5' | 53 | 53</span>
<a name="l00587"></a>00587 <span class="comment">// 'e' | 27 | 8364 // "Euro sign": 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->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<10> 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 "unicodeConverted"</span>
<a name="l00609"></a>00609 converter->ConvertToUnicode( unicodeConverted, SMSSource, state );
<a name="l00610"></a>00610
<a name="l00611"></a>00611 <span class="comment">// show unicode string converted from SMS ("6$~5€");</span>
<a name="l00612"></a>00612 RenderHeader( _L( <span class="stringliteral">"CharacterConversions: SMS to Unicode"</span> ), output );
<a name="l00613"></a>00613 output.Append( _L(<span class="stringliteral">"SMS data consist of 7 bit character values (where euro and tilde char consist of two numbers):\n"</span>) );
<a name="l00614"></a>00614 RenderVariableBinary( SMSSource );
<a name="l00615"></a>00615 output.Append( _L(<span class="stringliteral">"\nWhile unicode uses 16 bits to store each character:\n"</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 "normal" and special characters</span>
<a name="l00621"></a>00621 RenderHeader( _L( <span class="stringliteral">"CharacterConversions: Unicode to SMS"</span> ), output );
<a name="l00622"></a>00622
<a name="l00623"></a>00623 <span class="comment">//nice characters but can't be compiled with GCCE ;)</span>
<a name="l00624"></a>00624 <span class="comment">//TBuf<64> unicodeSource(_L("Some nice chars: ö,ä,Ö,Ä \x20AC") ); // 0x20AC = euro sign, desicmal 8364;</span>
<a name="l00625"></a>00625 TBuf<64> unicodeSource(_L(<span class="stringliteral">"Some nice chars: \x00F6,\x00E4,\x004F,\x00C4 \x20AC"</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<128> convertedToSMS;
<a name="l00638"></a>00638 converter->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">"\nEuro character is espaced in SMS encoding so number of 'chars' differ:\n"</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">"\nUnicode consist of 16 bit chars while SMS consist of 8 bit ones. Number of bytes in encodings:\n"</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-><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 "DescriptorExamples.h"</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-><a class="code" href="class_m_result_viewer.html#a30d7e86bbb78ba769648736a9ee9e62d">GetViewBuffer</a>() );
<a name="l00660"></a>00660 RenderHeader( _L( <span class="stringliteral">"LexicalAnalysis"</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 "Using TLex". 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">"-254 is number"</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">"2ff is hex number"</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">"234.678 is real number"</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">'.'</span>);
<a name="l00690"></a>00690 output.Append( _L( <span class="stringliteral">"lex.Val(num3, '.') -> num3="</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-><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
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
</body>
</html>