graphicsutils/commongraphicsheaders/inc/extensioncontainer.h
author Faisal Memon <faisal.memon@nokia.com>
Fri, 14 May 2010 15:46:16 +0100
branchNewGraphicsArchitecture
changeset 65 ff5b7046e5c4
parent 0 5d03bc08d59c
permissions -rw-r--r--
Catchup with the tip

// Copyright (c) 1995-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:
//

#ifndef EXTENSIONCONTAINER_H_
#define EXTENSIONCONTAINER_H_

class CExtensionContainer:public CBase
    {
public:
    /** Get Extension Interface.
     *  Implemented using the CBase::Extension_() mechanism 
     *  Note that the pointer returned is only good for the lifetime of the called CBase derived object.
     *  @param  aExtensionId    The GUID/ Well-known ID of the interface
     *  @return pointer to the interface or NULL if not available
     **/
        inline TAny* GetInterface(TUint aExtensionId);
    /** Get Extension Interface - templated helper.
     *  Resolves the ID and returned pointer based on the class name.
     *  Note that the pointer returned is only good for the lifetime of the called CBase derived object.
     *  Class name should support ETypeId intergral value, else use non-template version. 
     *  @param  MClass  The class of the interface with embedded GUID / Well known ID 
     *  @return pointer to the interface or NULL if not available
     **/
        template <class MClass> MClass* GetInterface()
        {
            return static_cast<MClass*>(GetInterface(MClass::ETypeId));
        }
    };

inline TAny* CExtensionContainer::GetInterface(TUint aExtensionId)
    {
    TAny*   retVal=NULL;
    //Note that extension is intentionally not overloaded in CExtensionContainer
    if (this->Extension_(aExtensionId,retVal,NULL)<KErrNone)
        {
        return NULL;
        }
    else
        {
        return retVal;
        }
    }

#endif /* EXTENSIONCONTAINER_H_ */