williamr@2: /**
williamr@2: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2: * All rights reserved.
williamr@2: * This component and the accompanying materials are made available
williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2: * which accompanies this distribution, and is available
williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2: *
williamr@2: * Initial Contributors:
williamr@2: * Nokia Corporation - initial contribution.
williamr@2: *
williamr@2: * Contributors:
williamr@2: *
williamr@2: * Description:
williamr@2: *
williamr@2: */
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: /**
williamr@2:  @file MetaContainer.h
williamr@2:  @internalTechnology
williamr@2: */
williamr@2: 
williamr@2: #if (!defined METACONTAINER_H)
williamr@2: #define METACONTAINER_H
williamr@2: 
williamr@2: #include <e32base.h>
williamr@2: #include <e32std.h>
williamr@2: #include <comms-infras/metadata.h>
williamr@2: 
williamr@2: 
williamr@2: namespace Meta
williamr@2: {
williamr@2: 
williamr@2: class RMetaDataContainerBase : public RPointerArray<SMetaData>
williamr@2: /**
williamr@2: 
williamr@2: Container of meta objects.
williamr@2: Base class.
williamr@2: Derived containers need to implement static LoadL.
williamr@2: 
williamr@2: @internalComponent
williamr@2: @released since v9.0 */
williamr@2:     {
williamr@2: public:
williamr@2: 	IMPORT_C explicit RMetaDataContainerBase();
williamr@2: 
williamr@2:     IMPORT_C void Copy(const RMetaDataContainerBase& aMetaContainer);
williamr@2:     IMPORT_C TInt Store(TDes8& aDes) const;
williamr@2: 
williamr@2:     IMPORT_C TInt Load(TPtrC8& aDes);
williamr@2: 	IMPORT_C TInt Length() const;
williamr@2: 
williamr@2: 	IMPORT_C STypeId GetTypeId() const;
williamr@2: 
williamr@2: protected:
williamr@2: 	virtual SMetaData* LoadElementL(TPtrC8& aDes) = 0;
williamr@2:     };
williamr@2: 
williamr@2: template<class ELEMENT>
williamr@2: class RMetaDataContainer : public RMetaDataContainerBase
williamr@2: /**
williamr@2: 
williamr@2: Templated container of meta objects that implements static LoadL.
williamr@2: Meta object type (template parameter) needs to implement its own static LoadL.
williamr@2: 
williamr@2: @internalComponent
williamr@2: @released since v9.0 */
williamr@2: 	{
williamr@2: public:
williamr@2: 	static RMetaDataContainer<ELEMENT>* LoadL(TPtrC8& aDes);
williamr@2: 
williamr@2: 	explicit inline RMetaDataContainer();
williamr@2: 
williamr@2: protected:
williamr@2: 	virtual SMetaData* LoadElementL(TPtrC8& aDes);
williamr@2: 	};
williamr@2: 
williamr@2: typedef RMetaDataContainer<SMetaDataECom> RMetaDataEComContainer;
williamr@2: 
williamr@2: } //namespace Meta
williamr@2: 
williamr@2: #include <comms-infras/metacontainer.inl>
williamr@2: 
williamr@2: #endif //METACONTAINER_H