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
41 throw (ClassNotFoundException)
\r
45 MSG_DELCARING_CLASSES.lock();
\r
47 for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)
\r
49 if(!strcmp(name,cur->name))
\r
53 MSG_DELCARING_CLASSES.unlock();
\r
54 throw ClassNotFoundException(name);
\r
57 Object* Class::createObject(const char* name)
\r
59 Class* c = fromName(name);
\r
64 return c->createObject();
\r
68 //////////////////////////////////////////////////////////////////////////////
\r
69 // Object members implementation
\r
71 // Special runtime-class structure for Object (no base class)
\r
72 const struct Class Object::classObject =
\r
75 sizeof(Object), // typeSize
\r
78 NULL // declaringClass
\r
82 //////////////////////////////////////////////////////////////////////////////
\r
83 // DeclaringClasses members implementation
\r
86 DeclaringClasses::DeclaringClasses()
\r
93 // Ajoute une nouvelle classe en tête de liste
\r
94 void DeclaringClasses::addHead(Class* c)
\r
103 // Retourne la tête de liste et la retire de la liste
\r
104 Class* DeclaringClasses::removeHead(void)
\r
118 // Retire la classe pClasse de la liste, mais ne la détruit pas
\r
119 bool DeclaringClasses::remove(Class* c)
\r
124 bool success = false;
\r
136 while((NULL != cur) && (cur->next!= c))
\r
141 cur->next = c->next;
\r