TUint32 TCmdUNSAFTimers::CreateNewKeyL( CRepository& aRepository, TUint32 aKey, TUint32 aTable ) const { const TUint32 KInitialKey = 1; TUint32 newKey = KInitialKey; RArray<TUint32> keys; CleanupClosePushL( keys ); TInt err = aRepository.FindL( aKey, KUNSAFProtocolsFieldTypeMask, keys ); if ( err != KErrNotFound ) { User::LeaveIfError( err ); TInt keyCount = keys.Count(); if ( keyCount != 0 ) { // Find the biggest key and increment it by one keys.SortUnsigned(); TUint32 maxKey = aKey ^ keys[ keyCount - 1 ]; newKey = maxKey + 1; } } newKey |= aTable; CleanupStack::PopAndDestroy( &keys ); return newKey; }
TUint32 CDataDepository::CreateNewTableKeyL( TUint aTableMask, TUint32 aFieldMask ) const { const TInt KReserved = 1; TUint32 newKey = 0; RArray< TUint32 > keys; CleanupClosePushL( keys ); TInt err = iRepository->FindL( aTableMask, aFieldMask, keys ); TInt keyCount = keys.Count( ); if ( err == KErrNotFound ) { newKey = aFieldMask + 1; } else { User::LeaveIfError( err ); if ( keyCount == 0 ) { newKey = aFieldMask + 1; } else { // Find the biggest key and increment it by one keys.SortUnsigned( ); TUint32 maxKey = aTableMask ^ keys[ keyCount - 1 ]; newKey = aFieldMask + 1 + maxKey; } } newKey |= aFieldMask; newKey ^= aFieldMask; TUint32 key = aTableMask | newKey;//test User::LeaveIfError( iRepository->Create( aTableMask | newKey, KReserved ) ); CleanupStack::PopAndDestroy( &keys ); return newKey; }