00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef FXMETACLASS_H
00022 #define FXMETACLASS_H
00023
00024 namespace FX {
00025
00026 class FXObject;
00027
00029 enum {
00030 MINTYPE = 0,
00031 MAXTYPE = 65535
00032 };
00033
00034
00036 enum {
00037 MINKEY = 0,
00038 MAXKEY = 65535
00039 };
00040
00041
00043 typedef FXuint FXSelector;
00044
00045
00047 class FXAPI FXMetaClass {
00048 private:
00049 const FXchar *className;
00050 FXObject* (*manufacture)();
00051 const FXMetaClass *baseClass;
00052 const void *assoc;
00053 FXuint nassocs;
00054 FXuint assocsz;
00055 private:
00056 static const FXMetaClass **metaClassTable;
00057 static FXuint metaClassSlots;
00058 static FXuint metaClassCount;
00059 private:
00060 static void resize(FXuint slots);
00061 public:
00062
00064 FXMetaClass(const FXchar* name,FXObject *(fac)(),const FXMetaClass* base,const void* ass,FXuint nass,FXuint assz);
00065
00067 FXObject* makeInstance() const;
00068
00070 const void* search(FXSelector key) const;
00071
00073 const FXchar* getClassName() const { return className; }
00074
00076 const FXMetaClass* getBaseClass() const { return baseClass; }
00077
00079 FXbool isSubClassOf(const FXMetaClass* metaclass) const;
00080
00082 static const FXMetaClass* getMetaClassFromName(const FXchar* name);
00083
00085 ~FXMetaClass();
00086 };
00087
00088 }
00089
00090 #endif