diff -r 4816d766a08a -r f345bda72bc4 Symbian3/PDK/Source/GUID-4F5E644B-B2DD-5CD3-B763-E134F1916E62.dita --- a/Symbian3/PDK/Source/GUID-4F5E644B-B2DD-5CD3-B763-E134F1916E62.dita Tue Mar 30 11:42:04 2010 +0100 +++ b/Symbian3/PDK/Source/GUID-4F5E644B-B2DD-5CD3-B763-E134F1916E62.dita Tue Mar 30 11:56:28 2010 +0100 @@ -1,112 +1,112 @@ - - - - - -How -to use array keysThis document describes how to use array keys. -

To access an array by key construct a TKeyArrayFix, TKeyArrayVar or TKeyArrayPak object. -The choice depends on the array type used and the member function accessed.

-

The following code fragments show how this is done. They construct and -manipulate an array of TBankAct objects that contain data -members representing typical bank account details.

-

The TBankAct class is defined as:

-class TBankAct - { -public : - TBuf<32> iActName; - TUint iActNum; - TUint iActValue; - } -

The following code builds a CArrayFixFlat containing three -elements of type TBankAct, as follows:

-CArrayFixFlat<TBankAct> *anArray; -anArray = new CArrayFixFlat<TBankAct>(3); -TBankAct bankact; -... -_LIT(KName1,"A.Bloggs"); -_LIT(KName2,"F.B.Wittering"); -_LIT(KName3,"Z.Makepeace"); -... -bankact.iActName = KName1; -bankact.iActNum = 3; -bankact.iActValue = 300; -anArray->AppendL(bankact); -... -bankact.iActName = KName2; -bankact.iActNum = 1; -bankact.iActValue = 6000; -anArray->AppendL(bankact); -... -bankact.iActName = KName3; -bankact.iActNum = 2; -bankact.iActValue = 32; -anArray->AppendL(bankact); -... -
Sorting the array

To sort the array into account -number order, first construct a TKeyArrayFix object to define -the location and type of key on which to sort the array:

TKeyArrayFix actNumKey(_FOFF(TBankAct,iActNum),ECmpTUint);

In practice, a data member like iActNum may be private, -in which case this statement may not be permitted by the compiler. Two solutions -are:

    -
  1. Make the class in which actNumKey is -declared a friend of TBankAct

  2. -
  3. Declare a public const static TInt data -member iOffset (for example) in the TBankAct class -and include a line of code:

  4. -
    -
  • const TInt TBankAct::iOffset -= _FOFF(TBankAct,iActNum);

  • -

actNumKey can then be constructed:

TKeyArrayFix actNumKey(bankact.iOffset,ECmpTUint);

ECmpTUint is -an enumerator of the TKeyCmpNumeric enumeration; this constructor -defines a numeric key.

Now use the key definition to do the sort:

... -anArray->Sort(actNumKey); -...

See also:

    -
  • _FOFF

  • -
-
Re-sort the array

Re-sort the array into account -name order, ignoring the case of the name, and then insert another element -into the array maintaining the same order.

First, construct another TKeyArrayFix object:

TKeyArrayFix actNameKey(_FOFF(TBankAct,iActName),ECmpFolded);

ECmpFolded is an enumerator of the TKeyCmpText enumeration; this constructor -defines a descriptor key.

Now use the key definition to re-sort the -array and insert a new element into the correct place:

... -anArray->Sort(actNameKey); -... -_LIT(KNewName,"W.B.NewPerson"); -... -bankact.iActName = KNewName; -bankact.iActNum = 69; -bankact.iActValue = 24; -... -anArray->InsertIsqL(bankact,actNameKey); -...

Note that the function InsertIsqL() does -not permit duplicates. If there is already an element with the same account -name in the array, then the call to the function leaves withKErrAlreadyExists.

Use -the key definition to find an array element with a specific name and change -the iActValue data member of that element:

-... -_LIT(KFindName,"A.Bloggs"); -bankact.iActName = KFindName; -... -TInt position; -if (anArray->FindIsq(bankact,actNameKey,position)) - { - // array element NOT found - ... - } -else - { - (*anArray)[position].iActValue = 40,000,000; - ... - }

Notes

    -
  • Sorting a packed array -is achieved using the SortL() member function.

  • -
  • Although the example -uses an array of fixed length objects and a TKeyArrayFix object, -the same techniques apply to variable length and packed arrays.

  • -
+ + + + + +How +to use array keysThis document describes how to use array keys. +

To access an array by key construct a TKeyArrayFix, TKeyArrayVar or TKeyArrayPak object. +The choice depends on the array type used and the member function accessed.

+

The following code fragments show how this is done. They construct and +manipulate an array of TBankAct objects that contain data +members representing typical bank account details.

+

The TBankAct class is defined as:

+class TBankAct + { +public : + TBuf<32> iActName; + TUint iActNum; + TUint iActValue; + } +

The following code builds a CArrayFixFlat containing three +elements of type TBankAct, as follows:

+CArrayFixFlat<TBankAct> *anArray; +anArray = new CArrayFixFlat<TBankAct>(3); +TBankAct bankact; +... +_LIT(KName1,"A.Bloggs"); +_LIT(KName2,"F.B.Wittering"); +_LIT(KName3,"Z.Makepeace"); +... +bankact.iActName = KName1; +bankact.iActNum = 3; +bankact.iActValue = 300; +anArray->AppendL(bankact); +... +bankact.iActName = KName2; +bankact.iActNum = 1; +bankact.iActValue = 6000; +anArray->AppendL(bankact); +... +bankact.iActName = KName3; +bankact.iActNum = 2; +bankact.iActValue = 32; +anArray->AppendL(bankact); +... +
Sorting the array

To sort the array into account +number order, first construct a TKeyArrayFix object to define +the location and type of key on which to sort the array:

TKeyArrayFix actNumKey(_FOFF(TBankAct,iActNum),ECmpTUint);

In practice, a data member like iActNum may be private, +in which case this statement may not be permitted by the compiler. Two solutions +are:

    +
  1. Make the class in which actNumKey is +declared a friend of TBankAct

  2. +
  3. Declare a public const static TInt data +member iOffset (for example) in the TBankAct class +and include a line of code:

  4. +
    +
  • const TInt TBankAct::iOffset += _FOFF(TBankAct,iActNum);

  • +

actNumKey can then be constructed:

TKeyArrayFix actNumKey(bankact.iOffset,ECmpTUint);

ECmpTUint is +an enumerator of the TKeyCmpNumeric enumeration; this constructor +defines a numeric key.

Now use the key definition to do the sort:

... +anArray->Sort(actNumKey); +...

See also:

    +
  • _FOFF

  • +
+
Re-sort the array

Re-sort the array into account +name order, ignoring the case of the name, and then insert another element +into the array maintaining the same order.

First, construct another TKeyArrayFix object:

TKeyArrayFix actNameKey(_FOFF(TBankAct,iActName),ECmpFolded);

ECmpFolded is an enumerator of the TKeyCmpText enumeration; this constructor +defines a descriptor key.

Now use the key definition to re-sort the +array and insert a new element into the correct place:

... +anArray->Sort(actNameKey); +... +_LIT(KNewName,"W.B.NewPerson"); +... +bankact.iActName = KNewName; +bankact.iActNum = 69; +bankact.iActValue = 24; +... +anArray->InsertIsqL(bankact,actNameKey); +...

Note that the function InsertIsqL() does +not permit duplicates. If there is already an element with the same account +name in the array, then the call to the function leaves withKErrAlreadyExists.

Use +the key definition to find an array element with a specific name and change +the iActValue data member of that element:

+... +_LIT(KFindName,"A.Bloggs"); +bankact.iActName = KFindName; +... +TInt position; +if (anArray->FindIsq(bankact,actNameKey,position)) + { + // array element NOT found + ... + } +else + { + (*anArray)[position].iActValue = 40,000,000; + ... + }

Notes

    +
  • Sorting a packed array +is achieved using the SortL() member function.

  • +
  • Although the example +uses an array of fixed length objects and a TKeyArrayFix object, +the same techniques apply to variable length and packed arrays.

  • +
\ No newline at end of file