/*
* Copyright (c) 2002-2008 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:     
*
*/






// INCLUDE FILES
#include <e32std.h>
#include "SortUtil.h"

#ifdef __WINS__     
#include <featmgr.h>    
#endif

// LOCAL CONSTANTS AND MACROS
typedef MSortUtil* (*TSortUtilFactoryFunctionL)();
_LIT( KSortUtilImpl, "SortUtilImpl.dll" );
#ifdef __WINS__
_LIT( KSortUtilImplJapan, "SortUtilImplJapan.dll" );
_LIT( KSortUtilImplKorean, "SortUtilImplKorean.dll" );
#endif // __WINS__

// -----------------------------------------------------------------------------
// CSortUtil::NewL()
// -----------------------------------------------------------------------------
//
EXPORT_C CSortUtil* CSortUtil::NewL()
    {
    CSortUtil* self = new( ELeave ) CSortUtil;
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop();
    return self;
    }

// -----------------------------------------------------------------------------
// CSortUtil::~CSortUtil()
// -----------------------------------------------------------------------------
//
CSortUtil::~CSortUtil()
    {
    delete iInterface;
    iLib.Close();
    }

// -----------------------------------------------------------------------------
// CSortUtil::CSortUtil()
// -----------------------------------------------------------------------------
//
CSortUtil::CSortUtil()
    {
    }

// -----------------------------------------------------------------------------
// CSortUtil::ConstructL()
// -----------------------------------------------------------------------------
//
void CSortUtil::ConstructL()
    {
#ifdef __WINS__     
    FeatureManager::InitializeLibL();
    if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) )
        {
        // load polymorphic implementation DLL
        User::LeaveIfError( iLib.Load( KSortUtilImplJapan ) );
        }
#ifdef __KOREAN_SORT__
	else
        {
        // load polymorphic implementation DLL
        User::LeaveIfError( iLib.Load( KSortUtilImplKorean ) );
        }
#else
    else
        {
        // load polymorphic implementation DLL
        User::LeaveIfError( iLib.Load( KSortUtilImpl ) );
        }
#endif
    FeatureManager::UnInitializeLib();
#else    

    // load polymorphic implementation DLL
    User::LeaveIfError( iLib.Load( KSortUtilImpl ) );

#endif  // __WINS__
    
    iInterface = ( *(TSortUtilFactoryFunctionL)iLib.Lookup( 1 ) )();
    User::LeaveIfNull( iInterface );
    }

// End of File
