Main Page   Class Hierarchy   Compound List   File List   Compound Members  

mclass.h

00001 #ifndef __CLASS_H__
00002 #define __CLASS_H__
00003 
00004 // Tämä pitää olla vasta lopussa, koska se tarvitsee CArchivea, perkele
00005 #include "magic/mpararr.h"
00006 #include "magic/mrefarray.h"
00007 //#include "magic/mmap.h"
00008 
00009 // Externals
00010 template<class K, class V> class Map;
00011 
00013 
00014 class CClass;
00015 class ClassLib;
00016 
00017 // CClass on luokkien luokka. Se sisältää joukon staattisia muuttujia, joiden
00018 // avulla se pystyy rakentamaan enemmäin tai vähemmän täydellisen
00019 // ajonaikaisen luokkahierarkian. Päästäkseen tähän hierarkiaan mukaan
00020 // on objektin toteutettava <I>decl_dynamic(luokka)</I> ja
00021 // <I>impl_dynamic(luokka,isä)</I>.
00022 class CClass : public Object {
00023 //  decl_dynamic (CClass)
00024     String              name;
00025     Array<String>       parents_unfound;
00026     CRefArray<CClass>   parents;
00027     //Object&               (Object::*mfpGetInstance) ();   // Instanssin luontihuukki
00028     GetClassInstance*   mGetInstance;
00029     friend ClassLib;
00030   public:
00031 
00032     // Empty constructor shouldn't be called ever....
00033                     CClass      () {;}
00034                     CClass      (const char* nam, const char* bases, GetClassInstance*);
00035                     ~CClass     ();
00036 
00037     // Lisää luokalle isän. Käyttökelpoinen moniperinnässä
00038     void            addparent   (const char* nam) {;}
00039 
00040     // Palauttaa luokan nimen
00041     const String&   getname     () const {return name;}
00042 
00043     // Tulostaa luokan tiedot
00044     void            printclassinfo  (FILE* out=stdout) const;
00045 
00046     // Kertoo onko toinen objekti samaa luokkaa
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

Generated at Tue Dec 4 19:53:24 2001 for MagiC++ by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001