Adjusted to avoid exports, etc, from a top-level bld.inf
/** 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: Contains MCatalogsBase interface**/#ifndef M_CATALOGS_BASE_H#define M_CATALOGS_BASE_H#include <e32cmn.h>#include "catalogsinterfaceids.h"/** * This interface provides functions for querying the interfaces that * a class implements. Also, functions for reference counter are provided. * The reference counter is used to keep track of the number of users * of the implemented class. * * */class MCatalogsBase {public: /** * KInterfaceUid defines the identifier for this interface. * Child interfaces should define their own unique values for their * KInterfaceUid. * * */ enum { KInterfaceUid = ECatalogsBaseUid }; /** * This function is used to test if this object contains an implementation of * the interface of the given type. * * If the object contains the interface, a pointer to it is returned, and * the reference count is increased by one. Otherwise, NULL is returned. * * @note This interface does not allow the user to delete object directly * (destructor is protected). The destruction of this object should be done * by calling Release-function. * * A template shorthand version is provided here, making the usage easier. * An example of using the template method: * MWantedInterface* object = * someObjectInheritedFromMCatalogBase->QueryInterfaceL< MWantedInterface >(); * * * @return Pointer to the object's interface, if the object implements the given * interface, NULL otherwise. Counted, Release() must be called after use. * @see MCatalogsBase::QueryInterfaceLC */ template< class T > inline T* QueryInterfaceL() { const MCatalogsBase* self = this; const TAny* interface = self->QueryInterfaceL( T::KInterfaceUid ); return const_cast< T* >( static_cast< const T* >( interface ) ); } /** * This is const version of QueryInterfaceL. * */ template< class T > inline const T* QueryInterfaceL() const { return static_cast< const T* >( QueryInterfaceL( T::KInterfaceUid ) ); } /** * Like QueryInterfaceL, tries to retrieve an interface of specified type * from the object. If the interface pointer is returned, it is appended * to the cleanup stack, so that a following CleanupStack::PopAndDestroy() * will call Release() on the interface pointer appropriately. * * @return Pointer to the object's interface, if the object implements * the given interface, or NULL if this object does not implement the * given interface. If NULL is returned then the object is not pushed to * the cleanupstack. * * * @return Pointer to the object's interface, if the object implements the given * interface, NULL otherwise. Returned non-NULL pointer reference is counted, must * be released with a call to CleanupStack::PopAndDestroy(). * @see MCatalogsBase::QueryInterfaceL */ template< class T > inline T* QueryInterfaceLC() { T* interface( QueryInterfaceL< T >() ); if ( interface ) { // Do not push NULL object into the cleanup stack. CleanupReleasePushL( *interface ); } return interface; } /** * This is const version of QueryInterfaceLC. * */ template< class T > inline const T* QueryInterfaceLC() const { const T* interface( QueryInterfaceL< const T >() ); if ( interface ) { // Do not push NULL object into the cleanup stack. CleanupReleasePushL( *const_cast<T*>( interface ) ); } return interface; } /** * Increments the reference counter. * * @note QueryInterfaceL() already increases the value by one * if interface check was successfull. This function may be used * if user knows that the interface is used in multiple places and * Release() is called accordingly. * * * @return New reference count value. For debug purposes only. */ virtual TInt AddRef() const = 0; /** * Releases a reference. Deletes the object if the reference count * reaches 0. * Notice that destructor is defined as protected. So, the object of * this interface can be deleted using this function and only after * reference count is zero. * * * @return Reference count after release. For debug purposes only. */ virtual TInt Release() const = 0;protected: /** * QueryInterfaceL * * This function is used to test if this object contains an implementation of * the interface of the given type. * If the object contains the interface, then the reference count is increased * by one. * * * @param aInterfaceType TInt that specifies the interface that this object should implement. * @return Pointer to this object if the object implements given interface * or NULL if this object does not implement the given interface. Counted, Release() must * be called after use. */ virtual const TAny* QueryInterfaceL( TInt aInterfaceType ) const = 0; /** * The destructor of an interface is set virtual to make sure that * the destructors of derived classes are called appropriately when the * object is destroyed. * * Destructors for MCatalogsBase and all derived interfaces are defined as * protected to prevent direct use of delete on interface pointers (Release() * must be called instead of delete). * * */ virtual ~MCatalogsBase() {} };#endif // M_CATALOGS_BASE_H