1 #include <object.hpp>
\r
5 DeclaringClasses* DeclaringClass::declaringClasses = NULL;
\r
10 // Generate static object constructor for class registration
\r
11 void DeclareClass(Class* c)
\r
13 MSG_DELCARING_CLASSES.lock();
\r
14 MSG_DELCARING_CLASSES.addHead(c);
\r
15 MSG_DELCARING_CLASSES.unlock();
\r
19 //////////////////////////////////////////////////////////////////////////////
\r
20 // Implémentation des fonctions membre de la classe Class
\r
22 // true if the class is derived from base classe referenced
\r
24 bool Class::isDerivedFrom(const Class* baseClass) const
\r
26 const Class* cur = this;
\r
30 if(cur == baseClass)
\r
33 cur = cur->baseClass;
\r
39 // Dynamic name lookup and creation
\r
40 Class* Class::fromName(const char* name)
\r
44 MSG_DELCARING_CLASSES.lock();
\r
46 for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)
\r
48 if(!strcmp(name,cur->name))
\r
52 MSG_DELCARING_CLASSES.unlock();
\r
56 Object* Class::createObject(const char* name)
\r
58 Class* c = fromName(name);
\r
63 return c->createObject();
\r
67 //////////////////////////////////////////////////////////////////////////////
\r
68 // Object members implementation
\r
70 // Special runtime-class structure for Object (no base class)
\r
71 const struct Class Object::classObject =
\r
74 sizeof(Object), // typeSize
\r
77 NULL // declaringClass
\r
81 //////////////////////////////////////////////////////////////////////////////
\r
82 // DeclaringClasses members implementation
\r
85 DeclaringClasses::DeclaringClasses()
\r
92 // Ajoute une nouvelle classe en tête de liste
\r
93 void DeclaringClasses::addHead(Class* c)
\r
102 // Retourne la tête de liste et la retire de la liste
\r
103 Class* DeclaringClasses::removeHead(void)
\r
117 // Retire la classe pClasse de la liste, mais ne la détruit pas
\r
118 bool DeclaringClasses::remove(Class* c)
\r
123 bool success = false;
\r
135 while((NULL != cur) && (cur->next!= c))
\r
140 cur->next = c->next;
\r