1 #ifndef _CLASSREGISTER_H_
2 #define _CLASSREGISTER_H_
4 #include <map>
5 #include <string>
13 /**
14 * Register of Oberon/BlackBox types.
15 * Each type has a registered name, which refers to the full BlackBox type name (including any modules).
16 * It also (optionally) has a supertype (also referred to by the full BlackBox type name).
17 */
28 /**
29 * Get an instance of the type register (singleton pattern).
30 */
33 /**
34 * Register a new type.
35 */
38 /**
39 * Get a type's proxy.
40 */
42 };
44 /**
45 * Proxy to represent a BlackBox type. Has a name and optional supertype name.
46 * Can instantiate new instances of the type.
47 */
50 /**
51 * Create a new TypeProxy and register it with the TypeRegister.
52 */
54 /**
55 * @return The full BlackBox type name (including modules).
56 */
58 /**
59 * @return The full BlackBox type name of the supertype (if applicable, otherwise a 0-pointer).
60 */
62 /**
63 * @return A new instance of the type, with the given ID.
64 */
66 };
68 /**
69 * Proxy for a toplevel type (no supertype).
70 * T: the class to proxy for.
71 * Requires T to have a static const std::string TYPENAME.
72 */
78 }
81 }
84 }
85 };
87 /**
88 * Proxy for a derived type (with supertype).
89 * T: the class to proxy for.
90 * S: the supertype.
91 * Requires T, S to have a static const std::string TYPENAME.
92 */
98 }
101 }
104 }
105 };
106 }