diff -r 4526337fb576 -r 3eca7e70b1b8 widgetmodel/alfwidgetmodel/src/alfsort.cpp --- a/widgetmodel/alfwidgetmodel/src/alfsort.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -/* -* Copyright (c) 2006 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: sorting routine. uses Symbian services: User::QuickSort -* -*/ - - -//INCLUDES -#include -#include -#include -#include -//#include "alf/alfperf.h" -#include "alfsort.h" - -using namespace Alf; - -/** -* Defines the characteristics of a key used -* to access the elements of an array. Used for sort. -* @since S60 ?S60_version -*/ -NONSHARABLE_CLASS(AlfSortKey) : public TKey - { -public: - - /** - * constructor - * - * @since S60 ?S60_version - * @param aSortFunction callback interface for sort. - * @param aArr array to sort. - * @param aCount. count of items in the array. - */ - AlfSortKey( const IAlfSortFunction& aSortFunction, - IAlfVariantType** aArr, uint aCount ); - - /** - * returns data from array - * - * @since S60 ?S60_version - * @param anIndex index to element to return - * @return element at index anIndex. - */ - TAny *At(TInt anIndex) const; - - /** - * compares two items. - * - * @since S60 ?S60_version - * @param aLeft index to the array for left parameter. - * @return the value returned from sort function: - * < 0, if aFirst is less than aSecond, - * > 0 if aFirst is more than aSecond, - * 0, if aFirst equals aSecond. - */ - TInt Compare(TInt aLeft, TInt aRight) const; -private: - - //sort function not owned. - const IAlfSortFunction& iSortFunction; - - //array to sort. not owned - IAlfVariantType** iArr; - - //count of items in array. - uint iCount; - }; - -/** -* Defines the basic behaviour for swapping two elements of an array. -* Used for sort -* @since S60 ?S60_version -*/ -NONSHARABLE_CLASS(AlfSortSwap) : public TSwap - { -public: - - /** - * constructor - * - * @since S60 ?S60_version - * @param aArr array, which elements are to be swapped. - * @param aCount. count of items in the array. - */ - AlfSortSwap( IAlfVariantType** aArr, uint aCount ); - - /** - * swaps two items in the array. - * - * @since S60 ?S60_version - * @param aLeft left index - * @param aRight right index. - */ - void Swap(TInt aLeft, TInt aRight) const; -private: - - //array, which elements are to be swapped. Not owned. - IAlfVariantType** iArr; - - //count of items in the array. - uint iCount; - }; - -// --------------------------------------------------------------------------- -// Description : constructor -// --------------------------------------------------------------------------- -// -AlfSortKey::AlfSortKey( const IAlfSortFunction& aSortFunction, - IAlfVariantType** aArr, uint aCount ) : - iSortFunction(aSortFunction), iArr(aArr), iCount(aCount) - { - } - -// --------------------------------------------------------------------------- -// Description : return element from index anIndex. -// --------------------------------------------------------------------------- -// -TAny *AlfSortKey::At(TInt anIndex) const - { - return iArr[anIndex]; - } - -// --------------------------------------------------------------------------- -// Description : compares two items. -// --------------------------------------------------------------------------- -// -TInt AlfSortKey::Compare(TInt aLeft, TInt aRight) const - { - const IAlfMap* leftMap = iArr[aLeft]->map(); - const IAlfMap* rightMap = iArr[aRight]->map(); - return iSortFunction.compareLeafs( leftMap, rightMap ); - } - -// --------------------------------------------------------------------------- -// Description : constructor -// --------------------------------------------------------------------------- -// -AlfSortSwap::AlfSortSwap( IAlfVariantType** aArr, uint aCount ) : - iArr(aArr), iCount(aCount) - { - } - -// --------------------------------------------------------------------------- -// Description : swaps two items -// --------------------------------------------------------------------------- -// -void AlfSortSwap::Swap(TInt aLeft, TInt aRight) const - { - IAlfVariantType* tmp = iArr[aLeft]; - iArr[aLeft] = iArr[aRight]; - iArr[aRight] = tmp; - } - -// --------------------------------------------------------------------------- -// Description : The sorting routine. -// --------------------------------------------------------------------------- -// -void AlfSort::sort(IAlfVariantType** aArr, uint aCount, - const IAlfSortFunction& aSortFunction ) - { - //ALF_PERF_START( perfdata, "AlfSort-Sort-Sorting") - AlfSortKey key(aSortFunction, aArr, aCount); - AlfSortSwap swap(aArr, aCount); - User::QuickSort( aCount, key, swap ); - //ALF_PERF_STOP( perfdata, "AlfSort-Sort-Sorting") - } -