2 * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * 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
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
27 #if (!defined METADATA_H)
32 #include "comms-infras/cftransportmacro.h"
35 Macro used to declare virtual functions from MMetaData interface and the virtual data table
37 #define TYPEID_TABLE \
38 static inline const Meta::STypeId TypeId() { const Meta::SVDataTableEntry* entry = GetVDataTableStatic(); return Meta::STypeId(entry->iOffset,reinterpret_cast<TInt32>(entry->iMetaNewL)); } \
39 static const Meta::SVDataTableEntry* GetVDataTableStatic(); \
40 static const Meta::SVDataTableEntry iVDataTable[];
42 #define EXPORT_TYPEID_TABLE \
43 static inline const Meta::STypeId TypeId() { const Meta::SVDataTableEntry* entry = GetVDataTableStatic(); return Meta::STypeId(entry->iOffset,reinterpret_cast<TInt32>(entry->iMetaNewL)); } \
44 IMPORT_C static const Meta::SVDataTableEntry* GetVDataTableStatic(); \
45 static const Meta::SVDataTableEntry iVDataTable[];
48 static inline const Meta::STypeId TypeId() { const Meta::SVDataTableEntry* entry = GetVDataTableStatic(); return Meta::STypeId(entry->iOffset,reinterpret_cast<TInt32>(entry->iMetaNewL)); } \
49 virtual Meta::SVDataTableEntry const* GetVDataTable() const; \
50 virtual TUint8* GetAttribPtr(const TInt aOffset) const; \
51 static const Meta::SVDataTableEntry* GetVDataTableStatic(); \
52 static const Meta::SVDataTableEntry iVDataTable[];
54 #define EXPORT_DATA_VTABLE \
55 static inline const Meta::STypeId TypeId() { const Meta::SVDataTableEntry* entry = GetVDataTableStatic(); return Meta::STypeId(entry->iOffset,reinterpret_cast<TInt32>(entry->iMetaNewL)); } \
56 virtual Meta::SVDataTableEntry const* GetVDataTable() const; \
57 virtual TUint8* GetAttribPtr(const TInt aOffset) const; \
58 IMPORT_C static const Meta::SVDataTableEntry* GetVDataTableStatic(); \
59 static const Meta::SVDataTableEntry iVDataTable[];
61 #define EXPORT_DATA_VTABLE_AND_FN \
62 static inline const Meta::STypeId TypeId() { const Meta::SVDataTableEntry* entry = GetVDataTableStatic(); return Meta::STypeId(entry->iOffset,reinterpret_cast<TInt32>(entry->iMetaNewL)); } \
63 IMPORT_C virtual Meta::SVDataTableEntry const* GetVDataTable() const; \
64 IMPORT_C virtual TUint8* GetAttribPtr(const TInt aOffset) const; \
65 IMPORT_C static const Meta::SVDataTableEntry* GetVDataTableStatic(); \
66 static const Meta::SVDataTableEntry iVDataTable[];
69 Macros used to implement virtual functions from MMetaData interface and construct the v data table
71 #define START_ATTRIBUTE_TABLE( thisMetaClass, uid, typeId ) \
72 Meta::SVDataTableEntry const* thisMetaClass::GetVDataTable() const { return &iVDataTable[0]; }; \
73 TUint8* thisMetaClass::GetAttribPtr(const TInt aOffset) const { return (TUint8*)this + aOffset; }; \
74 const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
75 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
76 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) },
78 #define EXPORT_START_ATTRIBUTE_TABLE( thisMetaClass, uid, typeId ) \
79 Meta::SVDataTableEntry const* thisMetaClass::GetVDataTable() const { return &iVDataTable[0]; }; \
80 TUint8* thisMetaClass::GetAttribPtr(const TInt aOffset) const { return (TUint8*)this + aOffset; }; \
81 EXPORT_C const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
82 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
83 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) },
85 #define EXPORT_START_ATTRIBUTE_TABLE_AND_FN( thisMetaClass, uid, typeId ) \
86 EXPORT_C Meta::SVDataTableEntry const* thisMetaClass::GetVDataTable() const { return &iVDataTable[0]; }; \
87 EXPORT_C TUint8* thisMetaClass::GetAttribPtr(const TInt aOffset) const { return (TUint8*)this + aOffset; }; \
88 EXPORT_C const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
89 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
90 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) },
92 #define REGISTER_ATTRIBUTE( thisMetaClass, var, metaType ) \
93 { _FOFF( thisMetaClass, var ), Meta::metaType::NewL },
95 #define END_ATTRIBUTE_TABLE() \
98 #define END_ATTRIBUTE_TABLE_BASE( baseMetaClass, baseId ) \
99 { (TInt)((TAny*)(baseMetaClass::GetVDataTableStatic)), NULL }};
101 #define REGISTER_TYPEID( thisMetaClass, uid, typeId ) \
102 const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
103 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
104 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) }, \
107 #define EXPORT_REGISTER_TYPEID( thisMetaClass, uid, typeId ) \
108 EXPORT_C const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
109 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
110 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) }, \
113 #define EXPORT_START_ATTRIBUTE_TABLE_NO_FN( thisMetaClass, uid, typeId ) \
114 EXPORT_C const Meta::SVDataTableEntry* thisMetaClass::GetVDataTableStatic() { return &iVDataTable[0]; }; \
115 const Meta::SVDataTableEntry thisMetaClass::iVDataTable[] = { \
116 { uid, reinterpret_cast<Meta::TMetaTypeNewL>(typeId) },
123 typedef MMetaType* (*TMetaTypeNewL)(const TAny*, const TAny*);
125 struct SVDataTableEntry
128 Single entry of a virtual data table
131 @released since v9.0 */
134 TMetaTypeNewL iMetaNewL;
137 const TInt32 KNetMetaTypeAny = 0;
142 Used to uniquely identify the type of a (meta).object.
145 @released since v9.0 */
149 inline TBool operator==(const STypeId& obj) const { return iUid==obj.iUid && iType==obj.iType; };
151 inline STypeId(TUint32 aUid, TUint32 aTypeId);
152 IMPORT_C STypeId(TPtrC8& aStore);
153 IMPORT_C TInt Check( TPtrC8& aDes ) const;
162 @released since v9.0 */
165 virtual SVDataTableEntry const* GetVDataTable() const = 0;
166 virtual TUint8* GetAttribPtr(const TInt aOffset) const = 0;
169 struct SMetaData : public MMetaData
172 Meta object's base type
174 Partially implements the MMetaData interface's pure virtual functions
177 @released since v9.0 */
180 IMPORT_C virtual ~SMetaData();
182 IMPORT_C TInt CheckTypeOf( TPtrC8& aDes ) const;
183 IMPORT_C STypeId GetTypeId() const;
184 IMPORT_C TInt IsTypeOf( const STypeId& aTypeId ) const;
186 IMPORT_C void Copy(const SMetaData& aSource);
187 IMPORT_C TInt Store(TDes8& aDes) const;
188 IMPORT_C TInt Load(TPtrC8& aDes);
190 IMPORT_C TInt Length() const;
193 IMPORT_C explicit SMetaData();
196 const TInt KUidEComMetaDataFactoryInterface = 0x101F7700;
198 struct SMetaDataECom : public SMetaData
201 Meta object based on ECom factory base type
203 Implements static LoadL(TPtrC8& aDes) required by templated
206 @released since v9.0 */
209 IMPORT_C static SMetaDataECom* LoadL(TPtrC8& aDes);
210 IMPORT_C static SMetaDataECom* NewInstanceL(const STypeId& aTypeId);
211 IMPORT_C virtual ~SMetaDataECom();
214 IMPORT_C explicit SMetaDataECom();
222 #include <comms-infras/metadata.inl>