⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shaperesolver.cpp

📁 symbian操作系统应用程序开发 作者周忠良
💻 CPP
字号:
/**
*
* @brief Definition of CShapeResolver
*
* Copyright (c) EMCC Software Ltd 2003
* @version 1.0
*/

// Class Includes
#include "shapeResolver.h"

// System Includes
#include <ecom.h>
#include <ecomerrorcodes.h>
#include <ecomresolverparams.h>
#include <implementationinformation.h>
#include <publicregistry.h>


CShapeResolver* CShapeResolver::NewL (MPublicRegistry& aRegistry)
{
    return new(ELeave) CShapeResolver (aRegistry);
}




CShapeResolver::~CShapeResolver()
{
}




CShapeResolver::CShapeResolver (MPublicRegistry& aRegistry) :
    CResolver (aRegistry)
{
}




TUid CShapeResolver::IdentifyImplementationL (TUid aInterfaceUid,
    const TEComResolverParams& aAdditionalParameters) const
{
    RImplInfoArray& implementationsInfo = iRegistry.ListImplementationsL (aInterfaceUid);
    TUid found = KNullUid;

    if (implementationsInfo.Count())
    {
        found = Resolve (implementationsInfo, aAdditionalParameters);
    }
    return found;
}




TUid CShapeResolver::Resolve (const RImplInfoArray& aImplementationsInfo,
    const TEComResolverParams& aAdditionalParameters) const
{
    const TInt count = aImplementationsInfo.Count();
    for (TInt i = 0; i < count; ++i)
    {
        const CImplementationInformation& impData = *aImplementationsInfo[i];

        if (Match (impData.DataType(), aAdditionalParameters.DataType(),
            aAdditionalParameters.IsWildcardMatch()))
        {
            return impData.ImplementationUid();
        }
    }

    return KNullUid;
}




RImplInfoArray* CShapeResolver::ListAllL (TUid aInterfaceUid,
    const TEComResolverParams& aAdditionalParameters) const
{
    RImplInfoArray* retList = new(ELeave) RImplInfoArray;
    CleanupStack::PushL (retList);

    RImplInfoArray& fullList = iRegistry.ListImplementationsL (aInterfaceUid);

    const TBool useWildcards = aAdditionalParameters.IsWildcardMatch();
    const TDesC8& matchType = aAdditionalParameters.DataType();
    const TInt numImps = fullList.Count();

    for (TInt i = 0; i < numImps; ++i)
    {
        if (Match (fullList[i]->DataType(), matchType, useWildcards))
        {
            User::LeaveIfError (retList->Append (fullList[i]));
        }
    }

    CleanupStack::Pop (retList);

    return retList;
}




TBool CShapeResolver::Match (const TDesC8& aImplementationType,
    const TDesC8& aMatchType, TBool aUseWildcards) const
{
    TInt matchPos = KErrNotFound;

    if (aUseWildcards)
            matchPos = aImplementationType.MatchF (aMatchType);
    else
            matchPos = aImplementationType.CompareF (aMatchType);

    return matchPos != KErrNotFound;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -