diff -r 89d6a7a84779 -r 25a17d01db0c Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_dynamic_arrays_8cpp-source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_dynamic_arrays_8cpp-source.html Fri Jan 22 18:26:19 2010 +0000 @@ -0,0 +1,1308 @@ + + +TB10.1 Example Applications: examples/Base/ArraysAndLists/DynamicArrays/DynamicArrays.cpp Source File + + + + +

examples/Base/ArraysAndLists/DynamicArrays/DynamicArrays.cpp

00001 // Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+00002 // All rights reserved.
+00003 // This component and the accompanying materials are made available
+00004 // under the terms of "Eclipse Public License v1.0"
+00005 // which accompanies this distribution, and is available
+00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
+00007 //
+00008 // Initial Contributors:
+00009 // Nokia Corporation - initial contribution.
+00010 //
+00011 // Contributors:
+00012 //
+00013 // Description:
+00014 // Examples to demonstrate arrays
+00015 //
+00016 
+00017 #include "CommonFramework.h"
+00018 #include <e32math.h>
+00019 #include <e32std.h>
+00020 
+00021 _LIT(KMsgNewLine,"\n");
+00022 _LIT(KMsgPressAnyKey," (press any key to continue)\n");
+00023 _LIT(KFormat1,"X%u");
+00024 
+00025 const TText* firstElement =  _S("DynamicArray: first");
+00026 const TText* secondElement = _S("Example Code: second");
+00027 const TText* thirdElement =  _S("ArrayKeys Ex: third");
+00028 
+00029 //
+00030 // A T type class used in the example demonstrating the:
+00031 // CArrayFixFlat class
+00032 //
+00033 class TElement
+00034         {
+00035 public :
+00036         TElement();
+00037 public :
+00038         TBuf<4> iData;
+00039         };
+00040 
+00041 TElement::TElement()
+00042         {
+00043         _LIT(KTextBase,"BASE");
+00044         iData = KTextBase;
+00045         }
+00046 
+00047 class CArrayElement
+00048         {
+00049 public :
+00050         CArrayElement();
+00051         TBool operator==(const CArrayElement& aElement) const;
+00052 public :
+00053         TBuf<4> iData;
+00054         };
+00055 
+00056 CArrayElement::CArrayElement()
+00057         {
+00058         _LIT(KTextBase,"BASE");
+00059         iData = KTextBase;
+00060         }
+00061 
+00062 TBool CArrayElement::operator==(const CArrayElement& aElement) const
+00063         {
+00064         return (iData == aElement.iData);
+00065         }
+00066 
+00067 //
+00068 // A CBase derived class used in the example demonstrating the CArrayPtrFlat
+00069 // array
+00070 //
+00071 class CElement : public CBase
+00072         {
+00073 public :
+00074         CElement();
+00075         ~CElement();
+00076         void SetTextL(const TDesC& aText);
+00077 public :
+00078         HBufC* iBuf;
+00079         };
+00080 
+00081 CElement::CElement()
+00082         {
+00083         }
+00084 
+00085 CElement::~CElement()
+00086         {
+00087         delete iBuf;
+00088         }
+00089 
+00094 void CElement::SetTextL(const TDesC& aText)
+00095         {
+00096         if (!iBuf)
+00097                 {
+00098                 // The buffer is not created.
+00099                 // Hence, create the heap buffer.
+00100                 // Set the length of CElement::iBuf to the length of aText.
+00101                 iBuf  = HBufC::NewL(aText.Length());
+00102                 }
+00103 
+00104         else if(iBuf->Length() != aText.Length() )
+00105                 {
+00106                 // The Buffer exists but is a different size to the input text.
+00107                 iBuf = iBuf->ReAllocL(aText.Length());
+00108                 }
+00109         // Copy the contents of aText to iBuf.
+00110         *iBuf = aText;
+00111         }
+00112 
+00113 TInt Order64Bit(const TInt64& aLeft, const TInt64& aRight)
+00114      {
+00115      if (aLeft<aRight)
+00116          return -1;
+00117     if (aLeft==aRight)
+00118          return 0;
+00119      return 1;
+00120      }
+00121 
+00128 class TIntPtrElement
+00129         {
+00130 public :
+00131         TIntPtrElement();
+00132         void SetIntPtr(TInt* aPtr);
+00133 public :
+00134         TBuf<4> iData;
+00139         TInt* iIntPtr;
+00140         };
+00141 
+00145 TIntPtrElement::TIntPtrElement()
+00146         {
+00147         _LIT(KTextBase,"BASE");
+00148         iData = KTextBase;
+00149         }
+00150 
+00155 void TIntPtrElement::SetIntPtr(TInt* aPtr)
+00156         {
+00157         iIntPtr = aPtr;
+00158         }
+00166 class TKeyTIntPtr : public TKeyArrayFix
+00167         {
+00168 public:
+00169         TKeyTIntPtr(TInt aOffset, TKeyCmpText aType);
+00170         TKeyTIntPtr(TInt aOffset, TKeyCmpNumeric aType);
+00171         TAny* At(TInt aIndex);
+00172         };
+00173 
+00179 TKeyTIntPtr::TKeyTIntPtr(TInt aOffset, TKeyCmpText aType):TKeyArrayFix(aOffset,aType)
+00180         {
+00181         }
+00182 
+00187 TKeyTIntPtr::TKeyTIntPtr(TInt aOffset, TKeyCmpNumeric aType):TKeyArrayFix(aOffset,aType)
+00188         {
+00189         }
+00190 
+00197 TAny* TKeyTIntPtr::At(TInt aIndex)
+00198         {
+00199         if (aIndex==KIndexPtr)
+00200         {
+00201         return((TUint8 *)iPtr+iKeyOffset);
+00202         }
+00203         // Get the address of the array element.
+00204         TIntPtrElement* ptr = (TIntPtrElement *)(iBase->Ptr(aIndex*sizeof(TIntPtrElement)).Ptr()+iKeyOffset);
+00205         // The TIntPtrElement::iIntPtr points to the key.
+00206         // Return the key.
+00207         return(ptr->iIntPtr);
+00208         }
+00209 
+00214 void PrintFixIntPtrArray(CArrayFixFlat<TIntPtrElement>& aFixFlat)
+00215         {
+00216         _LIT(KMsgContentsIntPtr,"Contents of the array of TIntPtrElement objects.\n");
+00217         console->Printf(KMsgContentsIntPtr);
+00218         for (TInt forix = 0; forix < aFixFlat.Count(); forix++)
+00219                 {
+00220                 console->Printf(KMsgNewLine);
+00221                 _LIT(KMsgBuf,"Index: %d\n Descriptor:");
+00222                 console->Printf(KMsgBuf,forix);
+00223                 console->Printf(aFixFlat[forix].iData);
+00224                 _LIT(KMsgInt,"\t\tInteger Value: %d");
+00225                 console->Printf(KMsgInt,*(aFixFlat[forix].iIntPtr));
+00226                 }
+00227         console->Printf(KMsgNewLine);
+00228         }
+00229 
+00234 void PrintFixArray(CArrayFixFlat<TElement>& aFixFlat)
+00235         {
+00236         for (TInt forix = 0; forix < aFixFlat.Count(); forix++)
+00237                 {
+00238                 console->Printf(KMsgNewLine);
+00239                 console->Printf(aFixFlat[forix].iData);
+00240                 }
+00241         console->Printf(KMsgNewLine);
+00242         }
+00243 
+00248 void PrintPtrArray(CArrayPtrFlat<CElement>* aPtrFlat)
+00249         {
+00250         _LIT(KCommonFormat4,"\n%S");
+00251         for (TInt forix = 0; forix < aPtrFlat->Count(); forix++)
+00252                 {
+00253                 console->Printf(KCommonFormat4,((*aPtrFlat)[forix])->iBuf);
+00254                 }
+00255         }
+00256 
+00260 class TMySwap : public TSwap
+00261         {
+00262 public:
+00263         TMySwap(CArrayFixFlat<TElement>* aArray);
+00264         void Swap(TInt aLeft,TInt aRight);
+00265 private:
+00266                                 // The Swap() function is defined for this array.
+00267         CArrayFixFlat<TElement>* iArray;
+00268         };
+00269 
+00273 TMySwap::TMySwap(CArrayFixFlat<TElement>* aArray):iArray(aArray)
+00274         {
+00275         }
+00276 
+00282 void TMySwap::Swap(TInt aLeft,TInt aRight)
+00283         {
+00284         TBuf<4> tbuf(iArray->At(aLeft).iData);
+00285         iArray->At(aLeft).iData.Copy(iArray->At(aRight).iData);
+00286         iArray->At(aRight).iData.Copy(tbuf);
+00287         }
+00288 
+00294 void DemoPakArrayFindL(CArrayPak<TText>& aPakFlat)
+00295         {
+00296         // Append TText strings to the aPakFlat array.
+00297 
+00298         // The length of the string to be appended is increased by one
+00299         // to insert the '\0' character at the end of the TText string.
+00300         // This is needed as the '\0' character is absent in descriptors.
+00301         aPakFlat.AppendL(*firstElement,(User::StringLength(firstElement)+1)*sizeof(TText));
+00302 
+00303         // Insert the second element into the array.
+00304         aPakFlat.AppendL(*secondElement,(User::StringLength(secondElement)+1)*sizeof(TText));
+00305 
+00306         // Insert the third element into the array.
+00307         aPakFlat.AppendL(*thirdElement,(User::StringLength(thirdElement)+1)*sizeof(TText));
+00308 
+00309         // Print the array elements.
+00310         _LIT(KCommonFormat7,"Array Contents");
+00311         console->Printf(KCommonFormat7);
+00312         console->Printf(KMsgPressAnyKey);
+00313         console->Getch();
+00314 
+00315         TInt length = aPakFlat.Count();
+00316         for(TInt ix = 0; ix < length; ix++)
+00317                 {
+00318                 console->Printf(TPtrC(&aPakFlat[ix]));
+00319                 console->Printf(KMsgNewLine);
+00320                 }
+00321 
+00322         // Find an element in the array.
+00323         _LIT(KMsgFind,"\n--->Find");
+00324         console->Printf(KMsgFind);
+00325         _LIT(KMsgFindElement,"\nSearching the array for:");
+00326         console->Printf(KMsgFindElement);
+00327 
+00328         // The descriptor, buf contains the string "Code".
+00329         // The CArrayPak::Find() function will try to find this string in the array.
+00330         console->Printf(TPtrC(thirdElement));
+00331 
+00332         // The key to find the element.
+00333         // The length of the key is set to 12.
+00334         // Thus, first 12 characters of all strings are compared with the key.
+00335         TKeyArrayPak keypak(0,ECmpNormal,12);
+00336 
+00337         // Initialise the index to -1.
+00338         TInt index = -1;
+00339 
+00340         // Perform the search.
+00341         if(aPakFlat.Find(*thirdElement,keypak,index) == 0)
+00342                 {
+00343                 // Successful search.
+00344                 // The index variable holds the index of the element found.
+00345                 _LIT(KElementFound,"\nElement found at %d\n");
+00346                 console->Printf(KElementFound,index);
+00347                 }
+00348         else
+00349                 {
+00350                 // Unsuccessful search.
+00351                 // The element is not found.
+00352                 _LIT(KElementNotFound,"\nElement not found");
+00353                 console->Printf(KElementNotFound);
+00354                 }
+00355         }
+00356 
+00362 void DemoVarArraySortL(CArrayVar<TText>& aVarFlat)
+00363         {
+00364         // Append TText strings to the aVarFlat array.
+00365 
+00366         // The length of the string to be appended is increased by one
+00367         // to insert the '\0' character at the end of the TText string.
+00368         // This is needed as the '\0' character is absent in descriptors.
+00369         aVarFlat.AppendL(*firstElement,(User::StringLength(firstElement)+1)*sizeof(TText));
+00370 
+00371         // Insert the second and third elements into the array.
+00372         aVarFlat.AppendL(*secondElement,(User::StringLength(secondElement)+1)*sizeof(TText));
+00373         aVarFlat.AppendL(*thirdElement,(User::StringLength(thirdElement)+1)*sizeof(TText));
+00374 
+00375         // Print the array elements.
+00376         _LIT(KCommonFormat6,"Array Contents [Before Sort]");
+00377         console->Printf(KCommonFormat6);
+00378 
+00379         console->Printf(KMsgPressAnyKey);
+00380         console->Getch();
+00381 
+00382         TInt length = aVarFlat.Count();
+00383         for(TInt ix = 0; ix < length; ix++)
+00384                 {
+00385                 console->Printf(TPtrC(&aVarFlat[ix]));
+00386                 console->Printf(KMsgNewLine);
+00387                 }
+00388 
+00389         // The key to find the element.
+00390         // The length of the key is set to 12.
+00391         // Thus, first 12 characters of the string are compared with the key.
+00392         TKeyArrayVar keyvar(0,ECmpFolded,12);
+00393 
+00394         // Sort the array using the TKeyArrayVar key.
+00395         aVarFlat.Sort(keyvar);
+00396 
+00397         // Print the sorted array elements.
+00398         _LIT(KMsgSort,"\n--->Sort");
+00399         console->Printf(KMsgSort);
+00400         console->Printf(KMsgPressAnyKey);
+00401         console->Getch();
+00402 
+00403         for(TInt ix = 0; ix < length; ix++)
+00404                 {
+00405                 console->Printf(TPtrC(&aVarFlat[ix]));
+00406                 console->Printf(KMsgNewLine);
+00407                 }
+00408         }
+00413 void DemoFlatArrayL(CArrayFixFlat<TElement>& aFixFlat)
+00414         {
+00415         TElement theElement;
+00416 
+00417         TInt value;
+00418         for (value = 0; value < 3; value++)
+00419                 {
+00420                 theElement.iData.Format(KFormat1,value);
+00421                 aFixFlat.AppendL(theElement);
+00422                 }
+00423 
+00424                                 // Show length of each element.
+00425                                 // The length of each element of the array is the size of the
+00426                                 // TElement class.
+00427         _LIT(KCommonFormat2,"\nLength()=%d");
+00428         console->Printf(KCommonFormat2,aFixFlat.Length());
+00429 
+00430                                 // Show number of elements.
+00431         _LIT(KCommonFormat3,"\nCount()=%d");
+00432         console->Printf(KCommonFormat3,aFixFlat.Count());
+00433 
+00434                                 // Show each element
+00435         PrintFixArray(aFixFlat);
+00436                                 //
+00437                                 // InsertL  * * * * * * * * *
+00438                                 //
+00439         _LIT(KMsgInsert,"\n\n--->InsertL");
+00440         console->Printf(KMsgInsert);
+00441         _LIT(KMsgPressAnyKey," (press any key to continue)\n");
+00442         console->Printf(KMsgPressAnyKey);
+00443         console->Getch();
+00444 
+00445                                 // Insert elements
+00446                                 // ... at the beginning,
+00447         _LIT(KMsgBEG,"BEG");
+00448         theElement.iData = KMsgBEG;
+00449         aFixFlat.InsertL(0,theElement);
+00450 
+00451                                 // ... near the middle,
+00452         _LIT(KMsgMID,"MID");
+00453         theElement.iData = KMsgMID;
+00454         aFixFlat.InsertL(2,theElement);
+00455 
+00456                                 // ... at the end.
+00457                                 // This is the same as using the AppendL() function
+00458         _LIT(KMsgEND,"END");
+00459         theElement.iData = KMsgEND;
+00460         aFixFlat.InsertL(aFixFlat.Count(),theElement);
+00461 
+00462                                 // Show number of elements
+00463         _LIT(KCommonFormat5,"Count()=%d");
+00464         console->Printf(KCommonFormat5,aFixFlat.Count());
+00465 
+00466                                 // Show each element
+00467         PrintFixArray(aFixFlat);
+00468 
+00469                                 // Define the key to sort the array.
+00470                                 // The data member of the TElement class, iData, is the key.
+00471         TKeyArrayFix keyfix(_FOFF(TElement,iData),ECmpFolded);
+00472 
+00473                                 // Sort the array.
+00474         aFixFlat.Sort(keyfix);
+00475 
+00476                                 // Print the sorted array.
+00477         _LIT(KMsgSort,"\n--->Sort");
+00478         console->Printf(KMsgSort);
+00479         console->Printf(KMsgPressAnyKey);
+00480         console->Getch();
+00481 
+00482         PrintFixArray(aFixFlat);
+00483 
+00484                                 //
+00485                                 // Delete  * * * * * * * * *
+00486                                 //
+00487         _LIT(KMsgDelete,"\n\n--->Delete");
+00488         console->Printf(KMsgDelete);
+00489         console->Printf(KMsgPressAnyKey);
+00490         console->Getch();
+00491 
+00492                                 // Delete the 2nd, 4th and 5th elements. Note:
+00493                                 //
+00494                                 //  1. We use position to identify the elements (i.e. offset)
+00495                                 //  2. As elements are deleted, the position of other
+00496                                 //       elements changes.
+00497 
+00498         aFixFlat.Delete(1);             // delete the 2nd
+00499         aFixFlat.Delete(2,2);   // delete what are now the 3rd and 4th
+00500 
+00501         aFixFlat.Compress();    // compress the array
+00502 
+00503                                 // Show number of elements
+00504         console->Printf(KCommonFormat5,aFixFlat.Count());
+00505 
+00506                                 // Show each element
+00507         PrintFixArray(aFixFlat);
+00508                                 //
+00509                                 // Reset  * * * * * * * * *
+00510                                 //
+00511         _LIT(KMsgReset,"\n\n--->Reset");
+00512         console->Printf(KMsgReset);
+00513         console->Printf(KMsgPressAnyKey);
+00514         console->Getch();
+00515 
+00516                                 // reset the array (i.e. empty it)
+00517         aFixFlat.Reset();
+00518 
+00519                                 // Show number of elements
+00520         console->Printf(KCommonFormat5,aFixFlat.Count());
+00521 
+00522                                 // Show each element
+00523         PrintFixArray(aFixFlat);
+00524 
+00525                                 //
+00526                                 // ExpandL & ExtendL  * * * * * * * * *
+00527                                 //
+00528         _LIT(KMsgExpandExtend,"\n\n--->ExpandL & ExtendL");
+00529         console->Printf(KMsgExpandExtend);
+00530         console->Printf(KMsgPressAnyKey);
+00531         console->Getch();
+00532 
+00533                                 // re-build the array
+00534         _LIT(KFormat6,"%u");
+00535         for (value = 0; value < 3; value++)
+00536                 {
+00537                 theElement.iData.Format(KFormat6,value);
+00538                 aFixFlat.AppendL(theElement);
+00539                 }
+00540                                 // Expand by constructing a new element at position 1.
+00541                                 // Extend the array.
+00542                                 //
+00543                                 // Note the use of the TElement default constructor
+00544                                 // in both cases
+00545         aFixFlat.ExpandL(1);
+00546         aFixFlat.ExtendL();
+00547 
+00548                                 // Show number of elements
+00549         console->Printf(KCommonFormat5,aFixFlat.Count());
+00550 
+00551                                 // Show each element
+00552         PrintFixArray(aFixFlat);
+00553 
+00554                                 //
+00555                                 // ResizeL * * * * * * * * * * * *
+00556                                 //
+00557         _LIT(KMsgResize,"\n\n--->ResizeL");
+00558         console->Printf(KMsgResize);
+00559         console->Printf(KMsgPressAnyKey);
+00560         console->Getch();
+00561 
+00562                                 // Resize the array so that it only contains
+00563                                 // one element
+00564         aFixFlat.ResizeL(1);
+00565 
+00566                                 // Resize so that it contains 3 elements.
+00567                                 // The two new elements are bit-wise copies
+00568                                 // of a TElement object constructed using
+00569                                 // its default constructor.
+00570         aFixFlat.ResizeL(3);
+00571 
+00572                                 // Resize so that it contains 5 elements.
+00573                                 // The two new elements are bit-wise copies of
+00574                                 // the TElement object passed through
+00575                                 // the reference.
+00576         _LIT(KMsgXXX,"XXX");
+00577         theElement.iData = KMsgXXX;
+00578         aFixFlat.ResizeL(5,theElement);
+00579 
+00580                                 // Show number of elements
+00581         console->Printf(KCommonFormat5,aFixFlat.Count());
+00582 
+00583                                 // Show each element
+00584         PrintFixArray(aFixFlat);
+00585 
+00586                                 //
+00587                                 // SetReserveL * * * * * * * * * * * *
+00588                                 //
+00589         _LIT(KMsgSetReserve,"\n\n--->SetReserveL");
+00590         console->Printf(KMsgSetReserve);
+00591         console->Printf(KMsgPressAnyKey);
+00592         console->Getch();
+00593 
+00594                                 // Reserve sufficient space to append another
+00595                                 // five elements.
+00596                                 // This function may leave if there is
+00597                                 // insufficient memory.
+00598                                 // NOTE: this does NOT increase the number of
+00599                                 //         elements in the array.
+00600         aFixFlat.SetReserveL(5);
+00601 
+00602                                 // We can now append five elements and be sure that
+00603                                 // no leave will occur.
+00604         _LIT(KMsgDoubleAtoE,"AABBCCDDEE");
+00605         TBufC<10> source(KMsgDoubleAtoE);
+00606         TInt forix;
+00607         for (forix = 0; forix < source.Length(); forix+=2)
+00608                 {
+00609                 theElement.iData = source.Mid(forix,2);
+00610                 aFixFlat.AppendL(theElement);
+00611                 }
+00612 
+00613                                 // Show number of elements
+00614         console->Printf(KCommonFormat5,aFixFlat.Count());
+00615 
+00616                                 // Show each element
+00617         PrintFixArray(aFixFlat);
+00618 
+00619                                 // An object of the TMySwap class.
+00620                                 // It is used to swap two elements of the array.
+00621         TMySwap swap(&aFixFlat);
+00622 
+00623                                 // Swap the first and the last element of the array.
+00624         swap.Swap(0,(aFixFlat.Count() - 1));
+00625 
+00626                                 // Print the array.
+00627         _LIT(KMsgSwap,"\n--->Swap [First and Last element]");
+00628         console->Printf(KMsgSwap);
+00629         console->Printf(KMsgPressAnyKey);
+00630         console->Getch();
+00631 
+00632         PrintFixArray(aFixFlat);
+00633         console->Printf(KMsgPressAnyKey);
+00634         console->Getch();
+00635         }
+00636 
+00641 void DemoPtrArrayL(CArrayPtrFlat<CElement>& aPtrFlat)
+00642         {
+00643         CElement*  ptr;
+00644         ptr = new (ELeave) CElement;
+00645         _LIT(KMsgFirstElement,"First Element");
+00646         ptr->SetTextL(KMsgFirstElement);
+00647         aPtrFlat.AppendL(ptr);
+00648 
+00649 
+00650         ptr = new (ELeave) CElement;
+00651         _LIT(KMsgSecondElement,"Second Element");
+00652         ptr->SetTextL(KMsgSecondElement);
+00653         aPtrFlat.AppendL(ptr);
+00654 
+00655 
+00656         ptr = new (ELeave) CElement;
+00657         _LIT(KMsgThirdElement,"Third Element");
+00658         ptr->SetTextL(KMsgThirdElement);
+00659         aPtrFlat.AppendL(ptr);
+00660 
+00661 
+00662                                 // Show length of each element
+00663         _LIT(KCommonFormat2,"\nLength()=%d");
+00664         console->Printf(KCommonFormat2,aPtrFlat.Length());
+00665 
+00666                                 // Show number of elements
+00667         _LIT(KCommonFormat3,"\nCount()=%d");
+00668         console->Printf(KCommonFormat3,aPtrFlat.Count());
+00669 
+00670                                 // Show each element
+00671         PrintPtrArray(&aPtrFlat);
+00672                                 //
+00673                                 // InsertL  * * * * * * * * *
+00674                                 //
+00675         _LIT(KMsgInsert,"\n\n--->InsertL");
+00676         console->Printf(KMsgInsert);
+00677         console->Printf(KMsgPressAnyKey);
+00678         console->Getch();
+00679 
+00680                                 // Insert an element at the beginning
+00681                                 // of the array.
+00682 
+00683         ptr = new (ELeave) CElement;
+00684         _LIT(KMsgInsertedBeg,"Inserted @ beginning Element");
+00685         ptr->SetTextL(KMsgInsertedBeg);
+00686         aPtrFlat.InsertL(0,ptr);
+00687 
+00688                                 // Show number of elements
+00689         _LIT(KCommonFormat5,"Count()=%d");
+00690         console->Printf(KCommonFormat5,aPtrFlat.Count());
+00691 
+00692                                 // Show each element
+00693         PrintPtrArray(&aPtrFlat);
+00694 
+00695                                 //
+00696                                 // Delete  * * * * * * * * *
+00697                                 //
+00698         _LIT(KMsgDelete,"\n\n--->Delete");
+00699         console->Printf(KMsgDelete);
+00700         console->Printf(KMsgPressAnyKey);
+00701         console->Getch();
+00702 
+00703                                 // Delete the last two elements from the array BUT
+00704                                 // first we must get a reference to those elements
+00705                                 // (pointers to CElement objects) otherwise
+00706                                 // the CElement objects are orphaned.
+00707                                 //
+00708                                 // Here, we destroy those CElement objects.
+00709                                 //
+00710                                 // There are two alternative ways of indexing into
+00711                                 // the array, using either At() or the [] operator
+00712 
+00713                                 // NOTE that the code below could be compressed to:
+00714                                 //
+00715                                 // delete (*ptrflat)[aPtrFlat.Count()-1];
+00716                                 // delete (*ptrflat)[aPtrFlat.Count()-2];
+00717                                 // aPtrFlat.Delete(aPtrFlat.Count()-2,2);
+00718 
+00719         TInt index = -1;
+00720         index = aPtrFlat.Count();
+00721 
+00722         ptr = aPtrFlat[--index];
+00723         aPtrFlat.Delete(index);
+00724         delete ptr;
+00725 
+00726         ptr = aPtrFlat.At(--index);
+00727         aPtrFlat.Delete(index);
+00728         delete ptr;
+00729 
+00730                                 // Show number of elements
+00731         console->Printf(KCommonFormat5,aPtrFlat.Count());
+00732 
+00733                                 // Show each element
+00734         PrintPtrArray(&aPtrFlat);
+00735 
+00736                                 //
+00737                                 // At & the [] operator * * * * * * * * * * * *
+00738                                 //
+00739         _LIT(KMsgAt,"\n\n--->At() and the operator []");
+00740         console->Printf(KMsgAt);
+00741         console->Printf(KMsgPressAnyKey);
+00742         console->Getch();
+00743 
+00744                                 // Make a change to the object pointed to by the first element in the array
+00745         _LIT(KMsgNewTextFirst,"New text for the first CElement");
+00746         _LIT(KMsgNewTextSecond,"New text for the second CElement");
+00747         aPtrFlat[0]->SetTextL(KMsgNewTextFirst);
+00748         aPtrFlat.At(1)->SetTextL(KMsgNewTextSecond);
+00749 
+00750                                 // Show number of elements
+00751         console->Printf(KCommonFormat5,aPtrFlat.Count());
+00752 
+00753                                 // Show each element
+00754         PrintPtrArray(&aPtrFlat);
+00755 
+00756                                 //
+00757                                 // ResetAndDestroy  * * * * * * * * *
+00758                                 //
+00759         _LIT(KMsgResetDestroy,"\n\n--->ResetAndDestroy");
+00760         console->Printf(KMsgResetDestroy);
+00761         console->Printf(KMsgPressAnyKey);
+00762         console->Getch();
+00763 
+00764                                 // destroy all of the CElement objects and reset the
+00765                                 // array.
+00766         aPtrFlat.ResetAndDestroy();
+00767 
+00768                                 // Show number of elements
+00769         console->Printf(KCommonFormat3,aPtrFlat.Count());
+00770 
+00771                                 // Show each element
+00772         PrintPtrArray(&aPtrFlat);
+00773 
+00774         console->Printf(KMsgNewLine);
+00775         }
+00776 
+00782 void DemoTKeyDerivedL(CArrayFixFlat<TIntPtrElement>& aFixFlat)
+00783         {
+00784         TIntPtrElement theIntPtrElement;
+00785 
+00786         // Create pointers to integers.
+00787         TInt* ptrInt1 = new(ELeave)TInt(10);
+00788         CleanupStack::PushL(ptrInt1);
+00789         TInt* ptrInt2 = new(ELeave)TInt(0);
+00790         CleanupStack::PushL(ptrInt2);
+00791         TInt* ptrInt3 = new(ELeave)TInt(5);
+00792         CleanupStack::PushL(ptrInt3);
+00793 
+00794         // Create an array of pointers.
+00795         TInt* ptrInt[3] = {ptrInt1,ptrInt2,ptrInt3};
+00796 
+00797         // Append elements into the ptrElementArray array.
+00798         TInt value;
+00799         for (value = 0; value < 3; value++)
+00800                 {
+00801                 theIntPtrElement.iData.Format(KFormat1,value);
+00802                 theIntPtrElement.SetIntPtr(ptrInt[value]);
+00803                 aFixFlat.AppendL(theIntPtrElement);
+00804                 }
+00805 
+00806         // Print the contents of the array.
+00807         PrintFixIntPtrArray(aFixFlat);
+00808 
+00809                                 // Define the key to find an element in the array.
+00810                                 // Use the TKey derived class, TKeyTIntPtr to do this.
+00811         TKeyTIntPtr keyIntPtr(_FOFF(TIntPtrElement,iIntPtr),ECmpTInt);
+00812 
+00813         _LIT(KMsgFind,"\n--->Find");
+00814         console->Printf(KMsgFind);
+00815         console->Printf(KMsgPressAnyKey);
+00816         console->Getch();
+00817 
+00818         // Initialise to -1.
+00819         // Its value will be set to 0 if the Search is successful.
+00820         TInt index = -1;
+00821 
+00822         // Perform the search.
+00823         TInt res = aFixFlat.Find        (
+00824                                                                 theIntPtrElement, // The object whose
+00825                                                                 // key is used for comparison.
+00826                                                                 keyIntPtr, // The key object that
+00827                                                                 // defines the property of the key.
+00828                                                                 index
+00829                                                                 );
+00830 
+00831         if(res == 0)
+00832                 {
+00833                 // The index variable holds the index of the element found.
+00834                 _LIT(KElementFound,"\nElement found at index: %d\n");
+00835                 console->Printf(KElementFound,index);
+00836                 }
+00837 
+00838         else
+00839                 {
+00840                 // The element is not found.
+00841                 _LIT(KElementNotFound,"\nElement not found");
+00842                 console->Printf(KElementNotFound);
+00843                 }
+00844 
+00845         CleanupStack::PopAndDestroy(3, ptrInt1); // ptrInt3, ptrInt2 and ptrInt1.
+00846         }
+00847 
+00852 void DemoRArrayL(RArray<CArrayElement>& aArray)
+00853         {
+00854         CArrayElement arrayElement;
+00855 
+00856                         //
+00857                         // AppendL  * * * * * * * * *
+00858                         //
+00859         _LIT(KMsgAppend,"\n\n--->AppendL");
+00860         console->Printf(KMsgAppend);
+00861 
+00862         console->Printf(KMsgPressAnyKey);
+00863         console->Getch();
+00864 
+00865         TInt value;
+00866         for (value = 0; value < 3; value++)
+00867                 {
+00868                 // Formats and copies text into this descriptor, replacing any existing data.
+00869                 arrayElement.iData.Format(KFormat1,value);
+00870                 aArray.AppendL(arrayElement); // leaves with one of the system wide error codes, if the operation fails.
+00871                 }
+00872 
+00873                                 // Show number of elements
+00874         _LIT(KCommonFormat3,"\nCount()=%d");
+00875         console->Printf(KCommonFormat3,aArray.Count());
+00876 
+00877                                 // Show each element
+00878         TInt forix;
+00879         _LIT(KCommonFormat4,"\n%S");
+00880         for (forix = 0; forix < aArray.Count(); forix++)
+00881                 {
+00882                 console->Printf(KCommonFormat4,&(aArray)[forix].iData);
+00883                 }
+00884 
+00885                         //
+00886                         // InsertL  * * * * * * * * *
+00887                         //
+00888         _LIT(KMsgInsert,"\n\n--->InsertL");
+00889         console->Printf(KMsgInsert);
+00890         console->Printf(KMsgPressAnyKey);
+00891         console->Getch();
+00892 
+00893                                 // Inserts objects into the array at a specified position.
+00894                                 // It increases the size of the dynamic array.
+00895                                 // This function leaves with one of the system error codes, if the operation fails.
+00896 
+00897                                 // Insert arrayElements
+00898                                 // ... at the beginning,
+00899         _LIT(KMsgBEG,"BEG");
+00900         arrayElement.iData = KMsgBEG;
+00901         aArray.InsertL(arrayElement, 0);
+00902 
+00903                                 // ... near the middle,
+00904         _LIT(KMsgMID,"MID");
+00905         arrayElement.iData = KMsgMID;
+00906         aArray.InsertL(arrayElement, 2);
+00907 
+00908                                 // ... at the end.
+00909                                 // This is the same as using the AppendL() function
+00910         _LIT(KMsgEND,"END");
+00911         arrayElement.iData = KMsgEND;
+00912         aArray.InsertL(arrayElement,aArray.Count());
+00913 
+00914                                 // Show number of elements
+00915         _LIT(KCommonFormat5,"Count()=%d");
+00916         console->Printf(KCommonFormat5,aArray.Count());
+00917 
+00918                         //
+00919                         // Access elements  * * * * * * * * *
+00920                         //
+00921         _LIT(KMsgAccess,"\n\n--->Access");
+00922         console->Printf(KMsgAccess);
+00923         console->Printf(KMsgPressAnyKey);
+00924         console->Getch();
+00925 
+00926                                 // Show each element
+00927         for (forix = 0; forix < aArray.Count(); forix++)
+00928                 console->Printf(KCommonFormat4,&(aArray)[forix].iData);
+00929 
+00930                         //
+00931                         // Delete  * * * * * * * * *
+00932                         //
+00933         _LIT(KMsgDelete,"\n\n--->Delete");
+00934         console->Printf(KMsgDelete);
+00935         console->Printf(KMsgPressAnyKey);
+00936         console->Getch();
+00937 
+00938         TInt index2;
+00939         index2 = aArray.Count();
+00940 
+00941                         // Removes the objects at a specified position from the array.
+00942                         // It shrinks the array.
+00943 
+00944                         // Delete the last element
+00945         arrayElement = (aArray)[--index2];
+00946         aArray.Remove(index2);
+00947 
+00948                     // Show number of elements
+00949         console->Printf(KCommonFormat5,aArray.Count());
+00950 
+00951                         // Show each element
+00952         for (forix = 0; forix < aArray.Count(); forix++)
+00953                 console->Printf(KCommonFormat4,&(aArray)[forix].iData);
+00954 
+00955                         //
+00956                         // Find  * * * * * * * * *
+00957                         //
+00958         _LIT(KMsgFind,"\n\n--->Find in various ways");
+00959         console->Printf(KMsgFind);
+00960         console->Printf(KMsgPressAnyKey);
+00961         console->Getch();
+00962 
+00963         TInt pos =0;
+00964 
+00965                         // Find a particular element in different ways.
+00966         arrayElement = (aArray)[--index2];
+00967 
+00968         _LIT(KCommonFormat6,"\nElement %S is found at position %d");
+00969 
+00970         // Finds the first object in the array which matches the specified object using a sequential search and a matching algorithm.
+00971         pos=aArray.Find(arrayElement, TIdentityRelation<CArrayElement>());
+00972                         console->Printf(KCommonFormat6, &(aArray)[pos].iData, pos);
+00973 
+00974         // Finds the last object in the array which matches the specified object using a sequential search and a matching algorithm.
+00975         pos=aArray.FindReverse(arrayElement, TIdentityRelation<CArrayElement>());
+00976                         console->Printf(KCommonFormat6, &(aArray)[pos].iData, pos);
+00977 
+00978         // Finds the object in the array which matches the specified object using a binary search technique.It assumes that objects are in signed key order
+00979         pos=aArray.FindInSignedKeyOrder(arrayElement);
+00980                                 console->Printf(KCommonFormat6,&(aArray)[pos].iData, pos);
+00981 
+00982         //      Finds the object in the array which matches the specified object using a binary search technique. It assumes that objects are in unsigned key order.
+00983         pos=aArray.FindInUnsignedKeyOrder(arrayElement);
+00984                                 console->Printf(KCommonFormat6,&(aArray)[pos].iData, pos);
+00985 
+00986         // Finds the object in the array which matches the specified object using a binary search technique.In case of more than one matching element, finds last
+00987         // match as specified in the second parameter.It assumes that objects are in signed key order
+00988         pos=aArray.SpecificFindInSignedKeyOrder(arrayElement, EArrayFindMode_Last);
+00989                         console->Printf(KCommonFormat6,&(aArray)[pos].iData, pos);
+00990 
+00991         // Finds the object in the array which matches the specified object using a binary search technique.In case of more than one matching element, finds last
+00992         // match as specified in the second parameter.It assumes that objects are in unsigned key order
+00993         pos=aArray.SpecificFindInUnsignedKeyOrder(arrayElement, EArrayFindMode_Last);
+00994                                 console->Printf(KCommonFormat6,&(aArray)[pos].iData, pos);
+00995 
+00996                         // Closes the array and frees all memory allocated to the array
+00997         aArray.Close();
+00998         }
+00999 
+01000 void DemoRArraySort()
+01001         {
+01002                         //
+01003                         // Sort  * * * * * * * * *
+01004                         //
+01005         _LIT(KSortFind,"\n\n--->Sort");
+01006         console->Printf(KSortFind);
+01007         console->Printf(KMsgPressAnyKey);
+01008         console->Getch();
+01009 
+01010         TLinearOrder<TInt64> Int64Order(Order64Bit);
+01011         TInt count=10;
+01012 
+01013                         // Construct two arrays of 64-bit signed integer type objects.
+01014                         // Append random objects to first array.
+01015                         // Sort all objects of first array in the second array
+01016 
+01017         RArray<TInt64> firstArray(count);
+01018     RArray<TInt64> secondArray(count);
+01019 
+01020     for (TInt j=0; j<count; j++)
+01021                 {
+01022         TInt64 x=(TInt64)(((TUint)Math::Random() %count));
+01023 
+01024         firstArray.Append(x);
+01025         secondArray.InsertInOrderAllowRepeats(x,Int64Order);
+01026                 }
+01027 
+01028         // Show the initial array elements of first array.
+01029         _LIT(KInitialArrayElements,"\nInitial array elements are:");
+01030         console->Printf(KInitialArrayElements);
+01031 
+01032         _LIT(KCommonFormat7," %d");
+01033         TInt forix;
+01034         for (forix = 0; forix < count; forix++)
+01035                 console->Printf(KCommonFormat7,firstArray[forix]);
+01036 
+01037         // Sorts the objects within the array using the specified TLinearOrder
+01038         secondArray.Sort(Int64Order);
+01039 
+01040         // Show sorted array elements of second array
+01041         _LIT(KSortedArrayElements,"\nSorted array elements are:");
+01042         console->Printf(KSortedArrayElements);
+01043         for (forix = 0; forix < count; forix++)
+01044                 console->Printf(KCommonFormat7,secondArray[forix]);
+01045 
+01046         console->Getch();
+01047         console->Printf(KMsgNewLine);
+01048 
+01049                 // Closes both the arrays and frees all the memory allocated to these arrays
+01050     firstArray.Close();
+01051         secondArray.Close();
+01052         }
+01053 
+01054 void DemoRPointerArrayL(RPointerArray<CElement>& aPointerArray)
+01055         {
+01056         CElement*  elementptr;
+01057 
+01058                         //
+01059                         // AppendL  * * * * * * * * *
+01060                         //
+01061         _LIT(KMsgAppend,"\n\n--->AppendL");
+01062         console->Printf(KMsgAppend);
+01063         console->Printf(KMsgPressAnyKey);
+01064         console->Getch();
+01065 
+01066                         // Append the first element.
+01067         elementptr = new (ELeave) CElement;
+01068         _LIT(KMsgFirstElement,"First Element");
+01069         elementptr->SetTextL(KMsgFirstElement);
+01070         aPointerArray.AppendL(elementptr);
+01071 
+01072                         // Append the second element.
+01073         elementptr = new (ELeave) CElement;
+01074         _LIT(KMsgSecondElement,"Second Element");
+01075         elementptr->SetTextL(KMsgSecondElement);
+01076         aPointerArray.AppendL(elementptr);
+01077 
+01078                         // Append the third element.
+01079         elementptr = new (ELeave) CElement;
+01080         _LIT(KMsgThirdElement,"Third Element");
+01081         elementptr->SetTextL(KMsgThirdElement);
+01082         aPointerArray.AppendL(elementptr);
+01083 
+01084                                 // Show number of elements
+01085         _LIT(KCommonFormat3,"\nCount()=%d");
+01086         console->Printf(KCommonFormat3,aPointerArray.Count());
+01087 
+01088                                 // Show each element
+01089         _LIT(KCommonFormat4,"\n%S");
+01090         TInt forix;
+01091         for (forix = 0; forix < aPointerArray.Count(); forix++)
+01092                 {
+01093                 console->Printf(KCommonFormat4,aPointerArray[forix]->iBuf);
+01094                 }
+01095 
+01096                         //
+01097                         // InsertL  * * * * * * * * *
+01098                         //
+01099         _LIT(KMsgInsert,"\n\n--->InsertL");
+01100         console->Printf(KMsgInsert);
+01101         console->Printf(KMsgPressAnyKey);
+01102         console->Getch();
+01103 
+01104                                 // Inserts objects into the array at a specified position.
+01105                                 // It increases the size of the dynamic array.
+01106 
+01107                                 // Insert an element at the beginning
+01108                                 // of the array
+01109         elementptr = new (ELeave) CElement;
+01110         _LIT(KMsgInsertedBeg,"Inserted @ beginning Element");
+01111         elementptr->SetTextL(KMsgInsertedBeg);
+01112         aPointerArray.InsertL(elementptr, 0);
+01113 
+01114                                 // Show number of elements
+01115         _LIT(KCommonFormat5,"Count()=%d");
+01116         console->Printf(KCommonFormat5,aPointerArray.Count());
+01117 
+01118                         //
+01119                         // Access  * * * * * * * * *
+01120                         //
+01121                         // Show each element
+01122         for (forix = 0; forix < aPointerArray.Count(); forix++)
+01123                 {
+01124                 console->Printf(KCommonFormat4,aPointerArray[forix]->iBuf);
+01125                 }
+01126 
+01127                         //
+01128                         // Delete  * * * * * * * * *
+01129                         //
+01130         _LIT(KMsgDelete,"\n\n--->Delete");
+01131         console->Printf(KMsgDelete);
+01132         console->Printf(KMsgPressAnyKey);
+01133         console->Getch();
+01134 
+01135                         // Delete the last elements from the array BUT
+01136                         // first we must get a reference to the element
+01137                         // (pointers to CElement objects) otherwise
+01138                         // the CElement objects are orphaned.
+01139                         //
+01140                         // Here, we destroy the CElement object. It shrinks the array.
+01141                         //
+01142                         // Use [] operator for indexing in to the array.
+01143         TInt index1;
+01144         index1 = aPointerArray.Count();
+01145 
+01146         elementptr = aPointerArray[--index1];
+01147         aPointerArray.Remove(index1);
+01148         delete elementptr;
+01149 
+01150                                 // Show number of elements
+01151         console->Printf(KCommonFormat5,aPointerArray.Count());
+01152 
+01153                                 // Show each element
+01154         for (forix = 0; forix < aPointerArray.Count(); forix++)
+01155                 {
+01156                 console->Printf(KCommonFormat4,aPointerArray[forix]->iBuf);
+01157                 }
+01158 
+01159                         //
+01160                         // Find  * * * * * * * * *
+01161                         //
+01162         _LIT(KMsgFind,"\n--->Find");
+01163         console->Printf(KMsgFind);
+01164         console->Printf(KMsgPressAnyKey);
+01165         console->Getch();
+01166 
+01167         elementptr = aPointerArray[index1-2];
+01168 
+01169         _LIT(KCommonFormat8,"\nElement found at position %d");
+01170 
+01171         // Finds the first object pointer in the array which matches the specified object pointer, using a sequential search.
+01172         TInt result=aPointerArray.Find(elementptr);
+01173                 console->Printf(KCommonFormat8, result);
+01174 
+01175         // Finds the last object pointer in the array which matches the specified object pointer, using a sequential search.
+01176         result=aPointerArray.FindReverse(elementptr);
+01177                 console->Printf(KCommonFormat8, result);
+01178 
+01179         // Finds the object pointer in the array that matches the specified object pointer, using a binary search technique.
+01180         // It assumes that object pointers in the array are in address order.
+01181         result=aPointerArray.FindInAddressOrder(elementptr);
+01182                 console->Printf(KCommonFormat8, result);
+01183 
+01184                         //
+01185                         // Sort  * * * * * * * * *
+01186                         //
+01187         _LIT(KSortFind,"\n\n--->Sort");
+01188         console->Printf(KSortFind);
+01189         console->Printf(KMsgPressAnyKey);
+01190         console->Getch();
+01191 
+01192                         // ResetAndDestroy  * * * * * * * * *
+01193                         //
+01194         _LIT(KMsgResetDestroy,"\n\n--->ResetAndDestroy");
+01195         console->Printf(KMsgResetDestroy);
+01196         console->Printf(KMsgPressAnyKey);
+01197         console->Getch();
+01198 
+01199                                 // Empties the array and deletes the referenced objects.
+01200                                 // It frees all memory allocated to the array and resets the internal state so that it is ready to be reused.
+01201         aPointerArray.ResetAndDestroy();
+01202         }
+01203 
+01204 void DemoSortRPointerArray()
+01205         {
+01206                         // Construct two arrays of TAny pointer objects.
+01207                         // Append random objects to first pointer array.
+01208                         // Sort all objects of first array in the second pointer array.
+01209         RPointerArray<TAny> firstpointerarray;
+01210         RPointerArray<TAny> secondpointerarray;
+01211 
+01212         TInt count = 10;
+01213         for (TInt i=0; i<count; i++)
+01214                 {
+01215                 TAny* x=(TAny*)(((TUint)Math::Random() %count));
+01216                 firstpointerarray.Append(x);
+01217                 secondpointerarray.InsertInAddressOrderAllowRepeats(x);
+01218                 }
+01219 
+01220         // Show initial array elements of first array
+01221         _LIT(KInitialArrayElements,"\nInitial array elements are:");
+01222         console->Printf(KInitialArrayElements);
+01223 
+01224         _LIT(KCommonFormat7,"Array Contents %d \n");
+01225         TInt forix;
+01226         for (forix = 0; forix < count; forix++)
+01227                 {
+01228                 console->Printf(KCommonFormat7,firstpointerarray[forix]);
+01229                 }
+01230 
+01231         // Sorts the object pointers within the array into address order
+01232         secondpointerarray.SortIntoAddressOrder();
+01233 
+01234         // Show sorted array elements of second array
+01235         _LIT(KSortedArrayElements,"\nSorted array elements are:");
+01236         console->Printf(KSortedArrayElements);
+01237         for (forix = 0; forix < count; forix++)
+01238                 {
+01239                 console->Printf(KCommonFormat7,secondpointerarray[forix]);
+01240                 }
+01241 
+01242         // Closes the arrays and frees all memory allocated to it
+01243         firstpointerarray.Close();
+01244         secondpointerarray.Close();
+01245         }
+01246 // Do the example
+01247 LOCAL_C void doExampleL()
+01248         {
+01249         //************************************************************
+01250         // Demonstrate a general fixed length array using
+01251         // a flat buffer
+01252         //************************************************************
+01253 
+01254         CArrayFixFlat<TElement>* fixflat;
+01255                                 // Construct array of TElement objects where the iData
+01256                                 // data member of each element contains "X0", "X1", etc
+01257                                 // Uses the AppendL() function to add the members
+01258                                 // and the [] operator to access elements.
+01259         fixflat = new (ELeave) CArrayFixFlat<TElement>(3);
+01260         CleanupStack::PushL(fixflat);
+01261 
+01262                                 // Demonstrate the CArrayFixFlat array.
+01263         DemoFlatArrayL(*fixflat);
+01264 
+01265                                 // Delete the fixflat array.
+01266         CleanupStack::PopAndDestroy(fixflat); // fixflat
+01267         //************************************************************
+01268         // Demonstrate an array of pointers to CBase
+01269         // derived objects. Uses the specialised array CArrayPtrFlat
+01270         //************************************************************
+01271         _LIT(KMsgArrayOfPointers,"\nARRAYS OF POINTERS (to CBase derived objects)\n");
+01272         console->Printf(KMsgArrayOfPointers);
+01273 
+01274         CArrayPtrFlat<CElement>* ptrflat;
+01275 
+01276                                 // Construct an array of four CElement objects each
+01277                                 // containing the text "First" "second" etc
+01278                                 // Uses the AppendL() function to add the members
+01279                                 // and the [] operator to access elements.
+01280         ptrflat = new (ELeave) CArrayPtrFlat<CElement>(16);
+01281         CleanupStack::PushL(ptrflat);
+01282 
+01283                                 // Demonstrate the CArrayPtrFlat array.
+01284         DemoPtrArrayL(*ptrflat);
+01285 
+01286                                 // Delete the array.
+01287         CleanupStack::PopAndDestroy(ptrflat); // ptrflat
+01288 
+01289         //************************************************************
+01290         // Demonstrate Variable and Packed arrays
+01291         // Use TKey to sort these arrays
+01292         //************************************************************
+01293         _LIT(KMsgVarArray,"\n\nVAR ARRAY\n\n");
+01294         console->Printf(KMsgVarArray);
+01295 
+01296                                 // Create a Var array.
+01297         CArrayVarFlat<TText>* varflat = new (ELeave) CArrayVarFlat<TText>(3);
+01298         CleanupStack::PushL(varflat);
+01299 
+01300                                 // Demonstrate the CArrayVarFlat array.
+01301         DemoVarArraySortL(*varflat);
+01302 
+01303                                 // Delete the array.
+01304         CleanupStack::PopAndDestroy(varflat); // varflat
+01305 
+01306         _LIT(KMsgPakArray,"\n\nPAK ARRAY\n\n");
+01307         console->Printf(KMsgPakArray);
+01308 
+01309                                 // Create a TKeyArrayPak array.
+01310         CArrayPakFlat<TText>* pakflat = new (ELeave) CArrayPakFlat<TText>(3);
+01311         CleanupStack::PushL(pakflat);
+01312 
+01313                                 // Demonstrate the CArrayPakFlat array.
+01314         DemoPakArrayFindL(*pakflat);
+01315 
+01316                                 // Delete the array.
+01317         CleanupStack::PopAndDestroy(pakflat);  // pakflat,
+01318 
+01319         //************************************************************
+01320         // Demonstrate the CArrayFix::Find() function using the
+01321         // TKey derived class TKeyTIntPtr.
+01322         //************************************************************
+01323         _LIT(KMsgTKeyDerived,"\nTKEY DERIVED CLASS\n");
+01324         console->Printf(KMsgPressAnyKey);
+01325         console->Getch();
+01326 
+01327         console->Printf(KMsgTKeyDerived);
+01328         CArrayFixFlat<TIntPtrElement>* ptrElementArray;
+01329                                         // Construct array of TIntPtrElement objects where the iData
+01330                                         // data member of each element contains "X0", "X1", etc
+01331                                         // Uses the AppendL() function to add the members
+01332                                         // and the [] operator to access elements.
+01333         ptrElementArray = new (ELeave) CArrayFixFlat<TIntPtrElement>(3);
+01334         CleanupStack::PushL(ptrElementArray);
+01335 
+01336                                         // Demonstrate the use of TKey derived class.
+01337         DemoTKeyDerivedL(*ptrElementArray);
+01338 
+01339         CleanupStack::PopAndDestroy(ptrElementArray); // ptrElementArray,
+01340 
+01341         //*****************************************************************
+01342         // Demonstrate an array of type RArray for elements of the same size
+01343         //*****************************************************************
+01344 
+01345         _LIT(KMsgForRArray,"\n*******Arrays of fixed length objects******");
+01346         console->Printf(KMsgForRArray);
+01347 
+01348         RArray<CArrayElement>* array;
+01349 
+01350                                 // Construct array of CArrayElement objects where the iData
+01351                                 // data member of each element contains "X0", "X1", etc.
+01352                                 // The elements of the array are instances of a class,
+01353                                 // so this is a template class. Refer to the definition of
+01354                                 // element CArrayElement above.
+01355                                 // Uses the AppendL() function to add the members
+01356                                 // and the [] operator to access elements.
+01357     array = new (ELeave) RArray<CArrayElement>(16);     // Initialise the array granularity to 16
+01358         CleanupStack::PushL(array);
+01359                                 // Demonstrate the use of RArray.
+01360     DemoRArrayL(*array);
+01361 
+01362         CleanupStack::PopAndDestroy(array);
+01363                                 // Demonstrates sorting of the RArray.
+01364         DemoRArraySort();
+01365 
+01366 
+01367         //******************************************************************************
+01368         // Demonstrate a simple and efficient array of pointers to objects RPointerArray
+01369         //******************************************************************************
+01370 
+01371         _LIT(KMsgForRPointerArray,"\n*******Array of pointers to objects******");
+01372         console->Printf(KMsgForRPointerArray);
+01373 
+01374         RPointerArray<CElement>* ptrarray;
+01375 
+01376                                 // Construct an array of four CElement objects each
+01377                                 // containing the text "First", "Second" etc
+01378                                 // Uses the AppendL() function to add the members
+01379                                 // and the [] operator to access elements.
+01380                                 // It leaves with one of the system wide error codes, if the operation fails.
+01381     ptrarray = new (ELeave) RPointerArray<CElement>(16); // Initialise the array granularity to 16
+01382     CleanupStack::PushL(array);
+01383                                 // Demonstrate the use of RPointerArray.
+01384     DemoRPointerArrayL(*ptrarray);
+01385         CleanupStack::PopAndDestroy(ptrarray);
+01386                                 // Demonstrates sorting of the RPointerArray.
+01387         DemoSortRPointerArray();
+01388         }
+01389 
+

Generated on Thu Jan 21 10:32:55 2010 for TB10.1 Example Applications by  + +doxygen 1.5.3
+ +