00001 #ifndef __CLASS_H__
00002 #define __CLASS_H__
00003
00004
00005 #include "magic/mpararr.h"
00006 #include "magic/mrefarray.h"
00007
00008
00009
00010 template<class K, class V> class Map;
00011
00013
00014 class CClass;
00015 class ClassLib;
00016
00017
00018
00019
00020
00021
00022 class CClass : public Object {
00023
00024 String name;
00025 Array<String> parents_unfound;
00026 CRefArray<CClass> parents;
00027
00028 GetClassInstance* mGetInstance;
00029 friend ClassLib;
00030 public:
00031
00032
00033 CClass () {;}
00034 CClass (const char* nam, const char* bases, GetClassInstance*);
00035 ~CClass ();
00036
00037
00038 void addparent (const char* nam) {;}
00039
00040
00041 const String& getname () const {return name;}
00042
00043
00044 void printclassinfo (FILE* out=stdout) const;
00045
00046
00047 int issameclass (const Object& other) const {
00048 return this == (&other.getclass());
00049 }
00050
00051 Object* getInstance () const {return mGetInstance->getInstance();}
00052 };
00053
00054 class ClassLib : public Object {
00055 static Map<String,CClass>* classes;
00056 public:
00057 static void printclassinfo (const String& classname, FILE* out=stdout);
00058 static Object& getinstance (const String& classname);
00059 static CClass* getclass (const String& classname);
00060 static void insert (CClass& cls);
00061 };
00062
00063 #endif