diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_dynamic_arrays_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_dynamic_arrays_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1308 +0,0 @@ - - -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
- -