#ifndef METACLASS_H
#define METACLASS_H
#define NULL 0
#define APPLE_KEXT_OVERRIDE
#define OSDeclareCommonStructors(className, dispatch) \
private: \
static const OSMetaClass * const superClass; \
public: \
static const OSMetaClass * const metaClass; \
static class MetaClass : public OSMetaClass { \
public: \
MetaClass(); \
virtual OSObject *alloc() const APPLE_KEXT_OVERRIDE;\
} gMetaClass; \
friend class className ::MetaClass; \
protected: \
className (const OSMetaClass *); \
virtual ~ className () APPLE_KEXT_OVERRIDE;
#define _OSDeclareAbstractStructors(className, dispatch) \
OSDeclareCommonStructors(className, dispatch); \
private: \
className (void); \
protected:
#define OSDeclareAbstractStructorsWithDispatch(className) \
_OSDeclareAbstractStructors(className, dispatch)
#define OSMetaClassDefineReservedUsed(className, index)
#define OSMetaClassDefineReservedUnused(className, index) \
void className ::_RESERVED ## className ## index () { }
#define OSMetaClassDeclareReservedUsed(className, index)
#define OSMetaClassDeclareReservedUnused(className, index) \
private: \
virtual void _RESERVED ## className ## index ()
#define _OSDeclareDefaultStructors(className, dispatch) \
OSDeclareCommonStructors(className, dispatch); \
public: \
className (void); \
protected:
#define OSDeclareDefaultStructors(className) \
_OSDeclareDefaultStructors(className, )
#define OSDefineMetaClassWithInit(className, superclassName, init) \
\
className ::MetaClass className ::gMetaClass; \
const OSMetaClass * const className ::metaClass = \
& className ::gMetaClass; \
const OSMetaClass * const className ::superClass = \
& superclassName ::gMetaClass; \
\
className :: className(const OSMetaClass *meta) \
: superclassName (meta) { } \
className ::~ className() { } \
\
className ::MetaClass::MetaClass() { init; }
#define OSDefineDefaultStructors(className, superclassName) \
OSObject * className ::MetaClass::alloc() const { return new className; } \
className :: className () : superclassName (&gMetaClass) { }
#define OSDefineMetaClassAndStructorsWithInit(className, superclassName, init) \
OSDefineMetaClassWithInit(className, superclassName, init) \
OSDefineDefaultStructors(className, superclassName)
#define OSDefineMetaClassAndStructors(className, superclassName) \
OSDefineMetaClassAndStructorsWithInit(className, superclassName, )
class OSMetaClassBase
{
public:
virtual ~OSMetaClassBase();
virtual void placeholder();
#ifdef METACLASS_BASE_USED
OSMetaClassDeclareReservedUsed(OSMetaClassBase, 4);
virtual int metaclassBaseUsed4();
OSMetaClassDeclareReservedUsed(OSMetaClassBase, 5);
virtual int metaclassBaseUsed5();
OSMetaClassDeclareReservedUsed(OSMetaClassBase, 6);
virtual int metaclassBaseUsed6();
OSMetaClassDeclareReservedUsed(OSMetaClassBase, 7);
virtual int metaclassBaseUsed7();
#else
virtual void _RESERVEDOSMetaClassBase4();
virtual void _RESERVEDOSMetaClassBase5();
virtual void _RESERVEDOSMetaClassBase6();
virtual void _RESERVEDOSMetaClassBase7();
#endif
};
class OSMetaClass : public OSMetaClassBase {
public:
virtual ~OSMetaClass();
OSMetaClassDeclareReservedUnused(OSMetaClass, 0);
OSMetaClassDeclareReservedUnused(OSMetaClass, 1);
OSMetaClassDeclareReservedUnused(OSMetaClass, 2);
OSMetaClassDeclareReservedUnused(OSMetaClass, 3);
OSMetaClassDeclareReservedUnused(OSMetaClass, 4);
OSMetaClassDeclareReservedUnused(OSMetaClass, 5);
OSMetaClassDeclareReservedUnused(OSMetaClass, 6);
OSMetaClassDeclareReservedUnused(OSMetaClass, 7);
};
#endif // METACLASS_H