diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/ViewDefBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/ViewDefBase.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,185 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +/** + @file + @publishedAll + @released +*/ + +#include +#include +#include +#include "ViewDefBase.h" + + +//Number of contacts +CViewDefBase::CViewDefBase(const TInt aContacts):CCntBaseStep(aContacts) + { + } + +/**More items to be initilized within the uheap macro pair*/ +void CViewDefBase::InitializeL() + { + + CCntBaseStep::InitializeL(); + + iViewII = CContactItemViewDef::NewL(CContactItemViewDef::EIncludeFields, + CContactItemViewDef::EIncludeHiddenFields); + + iViewIM = CContactItemViewDef::NewL(CContactItemViewDef::EIncludeFields, + CContactItemViewDef::EMaskHiddenFields); + + iViewMI = CContactItemViewDef::NewL(CContactItemViewDef::EMaskFields, + CContactItemViewDef::EIncludeHiddenFields); + + iViewMM = CContactItemViewDef::NewL(CContactItemViewDef::EMaskFields, + CContactItemViewDef::EMaskHiddenFields); + + iDefView=CContactItemViewDef::NewL(CContactItemViewDef::EIncludeFields, + CContactItemViewDef::EMaskHiddenFields); + iDefView->AddL(KUidContactFieldMatchAll); + + } + +/**More items to be cleaned up within the uheap macro pair*/ +void CViewDefBase::Cleanup() + { + CCntBaseStep::Cleanup(); + + delete iViewII; + iViewII = NULL; + delete iViewIM; + iViewIM = NULL; + delete iViewMI; + iViewMI = NULL; + delete iViewMM; + iViewMM = NULL; + delete iDefView; + iDefView = NULL; + } + +/**returns the number of nonhidden, hidden and empty fields, +that match aView for the current contact item*/ +void CViewDefBase::FieldsInView(const CContactItemViewDef &aView, TInt &aRetNormal, + TInt &aRetHidden, const TBool aHasEmpty) + { + TInt length = 0; + length = iFields->Count(); + + for(TInt i = 0; i < length; ) + { + if( !( (*iFields)[i].Storage()->IsFull() ) ) + { + if(aHasEmpty) + { + ++i; + continue; + } + else + { + _LIT(KUnfullView,"FieldsInView field is not full"); + User::Panic(KUnfullView, EInvariantFalse); + } + } + if( ( i = FindInFieldSet(aView, i) ) != KErrNotFound ) + { + if( (*iFields)[i].IsHidden() ) + { + ++aRetHidden; + } + else + { + ++aRetNormal; + } + ++i; + } + else + { + break; + } + } + + } + +/**returns the position of the next field that matches aView for the current contact item, +returns KErrNotFound when it reaches end of fieldset or if it doesnt find a match*/ +TInt CViewDefBase::FindInFieldSet(const CContactItemViewDef &aView, const TInt &aFrom) + { + const TInt length = iFields->Count(); + const TInt viewLength = aView.Count(); + CContentType * ctype = NULL; + TUid tuidback = KUidContactFieldNone; + TBool allUids = EFalse; + + for(TInt i = aFrom; i < length; i++ ) + { + ctype = CONST_CAST( CContentType *, &((*iFields)[i].ContentType()) ); + tuidback = ctype->Mapping(); + ctype->SetMapping(KUidContactFieldNone);//contain now should ignore mapping + allUids = EFalse; + + for(TInt k = 0; k < viewLength; ++k) + { + if( ctype->ContainsFieldType( aView[k] ) ) + { + allUids = ETrue; + break; + } + } + ctype->SetMapping(tuidback); + if(allUids) + { + return i; + } + } + return KErrNotFound; + } + +/**adds a pair of existing uids, in every possible combination, to aView, +aView is reset before the pair are added to aview.if aMany is greater than one, more than a pair +of uids are added but not in every possible combination*/ +void CViewDefBase::AddMultipleUidsL( CContactItemViewDef &aView, TInt &aPos, const TInt &aMany ) + { + + static TInt lastPlace = 0; + const static TInt count = iExistingUidsArray->Count(); + aView.Reset(); + aView.AddL( TUid::Uid( (*iExistingUidsArray)[aPos] ) ); + + for(TInt i = 0; (lastPlace < count) && (i < aMany); ++lastPlace, ++i) + { + if(lastPlace == aPos || ((*iExistingUidsArray)[lastPlace] == 0) ) + { + --i; + continue; + } + aView.AddL( TUid::Uid( (*iExistingUidsArray)[lastPlace] ) ); + } + if( lastPlace == count ) + { + lastPlace = 0; + ++aPos;//this should never equal count + _LIT(KNext,"next %d"); + INFO_PRINTF2(KNext, aPos); + if( (aPos < count) && ((*iExistingUidsArray)[aPos] == 0) ) + { + ++aPos; + } + } + + } + +