Main Page Class Hierarchy Compound List File List Compound Members File Members

Register.h

Go to the documentation of this file.
00001 /*
00002 File: Register.h
00003 
00004 Function: Class registry
00005 
00006 Author: Andrew Willmott
00007 */
00008 
00009 #ifndef __Register__
00010 #define __Register__
00011 
00012 #include "cl/Basics.h"
00013 #include "cl/Array.h"
00014 
00015  typedef UInt32 ClassID;
00016  typedef Void *(*ObjectCreator)();
00017 
00018  struct RegistryEntry
00019 {
00020  ClassID baseID;
00021  ClassID id;
00022  ObjectCreator creator;
00023  const Char *name;
00024  const Char *description;
00025 };
00026 
00027  typedef Array<RegistryEntry> ClassTable;
00028 
00029  struct BaseEntry
00030 {
00031  ClassID baseID;
00032  ClassTable table;
00033 };
00034 
00035  typedef Array<BaseEntry> BaseTable;
00036 
00037  class Register
00038 {
00039 public:
00040  Register(
00041 ClassID id, 
00042 ObjectCreator creator, 
00043 const Char *name = "untitled", 
00044 const Char *description = 0
00045 ) { RegisterClass('none', id, creator, name, description); };
00046 
00047  Register(
00048 ClassID baseID, 
00049 ClassID id, 
00050 ObjectCreator creator, 
00051 const Char *name = "untitled", 
00052 const Char *description = 0
00053 ) { RegisterClass(baseID, id, creator, name, description); };
00054 
00055 
00056 static Void RegisterClass(
00057 ClassID baseID, 
00058 ClassID id, 
00059 ObjectCreator creator, 
00060 const Char *name = "untitled", 
00061 const Char *description = 0
00062 );
00063 
00064 static Void *MakeObject(ClassID id);
00065 static Void *MakeObject(const Char *name);
00066 static Void *MakeObject(ClassID baseID, ClassID id);
00067 static Void *MakeObject(ClassID baseID, const Char *name);
00068 static Void ListObjects();
00069 static Void ListObjects(ClassID baseID);
00070 
00071 protected:
00072 static ClassTable *FindClassTable(ClassID baseID);
00073  static BaseTable *table;
00074 };
00075 
00076  #define MAKE_REGISTRAR(REGISTRAR, BASE_ID) \
00077 class REGISTRAR : public Register \
00078 { \
00079 public: \
00080 REGISTRAR( \
00081 ClassID id, \
00082 ObjectCreator creator, \
00083 const Char *name = "untitled", \
00084 const Char *description = 0 \
00085 ) : Register(BASE_ID, id, creator, name, description) {}; \
00086 }
00087 
00088 #endif
00089 

Generated at Sat Aug 5 00:16:33 2000 for Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000

AltStyle によって変換されたページ (->オリジナル) /