diff -r 43e37759235e -r 51a74ef9ed63 Symbian3/SDK/Source/GUID-5B2D6FE7-A09A-5DB1-A0B6-D1A1397D845F.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-5B2D6FE7-A09A-5DB1-A0B6-D1A1397D845F.dita Wed Mar 31 11:11:55 2010 +0100 @@ -0,0 +1,70 @@ + + + + + +How +to append and insert elementsElements can be added into an array or added to the end by specifying +the insertion position. +

Elements can be added into an array by inserting them into a specified +position.

+

Adding elements into an array may cause memory to be allocated and this +can fail, causing these functions to leave. User code must always be prepared +to handle this.

+
Appending an element

The following code fragment +appends three TElement objects to a CArrayFixFlat<class T> constructed +with a granularity of four, each successive element containing the characters +“X0”, “X1” etc.

_LIT(KFormatTxt,"X%u"); class TElement + { +public : + TElement(); +public : + TBuf<4> iData; + }; CArrayFixFlat<TElement>* fixflat; +fixflat = new (ELeave) CArrayFixFlat<TElement>(3); TElement theElement; for (TInt value = 0; value < 3; value++) + { + theElement.iData.Format(KFormatTxt,value); + fixflat->AppendL(theElement); + }

Notes

    +
  • Adding the first element +into this array causes an array buffer with a capacity of 3 elements to be +constructed. Attempting to add a 4th element causes the array buffer to be +re-allocated so that it has a capacity of 6 elements.

  • +
  • In general, the granularity +should be carefully chosen to minimise the number of calls to the memory allocator +and to avoid wasted space within the array buffer.

  • +
+
Inserting an element

The following code fragment +uses InsertL() to insert a new element into a definite position +in a CArrayFixFlat<class T> array. For example, to insert +a TElement object at the beginning of the array (position +zero in the array) :

CArrayFixFlat<TElement>* fixflat; +fixflat = new (ELeave) CArrayFixFlat<TElement>(3); TElement theElement; _LIT(KTxtBeg,"BEG"); +theElement.iData = KTxtBeg; +fixflat->InsertL(0,theElement);

To insert a new element at +(what is now) position 2 of the array:

_LIT(KTxtMid,"MID"); +theElement.iData = KTxtMid; +fixflat->InsertL(2,theElement);

To insert a new element at +the back of the array:

_LIT(KTxtEnd,"END"); +theElement.iData = KTxtEnd; +fixflat->InsertL(fixflat->Count(),theElement);

Elements can +also be inserted into the array at a position determined by a key (i.e. inserted +in key sequence) using the InsertIsqL() member function.

+
Adding and inserting a pointer to an array of pointers

The +following code fragment uses the AppendL() and InsertL() functions +to append and insert a pointer into a CArrayPtrFlat array. +The pointer being added is a pointer to a CBase derived objects:

CArrayPtrFlat<TElement>* ptrflat; +ptrflat = new (ELeave) CArrayPtrFlat<TElement>(3); ptr = new (ELeave) CElement; +... +ptrflat->AppendL(ptr); +... +ptr = new (ELeave) CElement; +... +ptrflat->InsertL(0,ptr);
+
\ No newline at end of file