1 #include <Object.hpp>
\r
5 DeclaringClasses* DeclaringClass::declaringClasses = NULL;
\r
13 // Generate static object constructor for class registration
\r
14 void DeclareClass(Class* c)
\r
16 MSG_DELCARING_CLASSES.lock();
\r
17 MSG_DELCARING_CLASSES.addHead(c);
\r
18 MSG_DELCARING_CLASSES.unlock();
\r
21 } // namespace SimGrid
\r
23 //////////////////////////////////////////////////////////////////////////////
\r
24 // Implémentation des fonctions membre de la classe Class
\r
26 // true if the class is derived from base classe referenced
\r
28 bool Class::isDerivedFrom(const Class* baseClass) const
\r
30 const Class* cur = this;
\r
34 if(cur == baseClass)
\r
37 cur = cur->baseClass;
\r
43 // Dynamic name lookup and creation
\r
44 Class* Class::fromName(const char* name)
\r
45 throw (ClassNotFoundException)
\r
49 MSG_DELCARING_CLASSES.lock();
\r
51 for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)
\r
53 if(!strcmp(name,cur->name))
\r
58 MSG_DELCARING_CLASSES.unlock();
\r
59 throw ClassNotFoundException(name);
\r
63 Object* Class::createObject(const char* name)
\r
65 Class* c = fromName(name);
\r
66 return c->createObject();
\r
70 //////////////////////////////////////////////////////////////////////////////
\r
71 // Object members implementation
\r
73 // Special runtime-class structure for Object (no base class)
\r
74 const struct Class Object::classObject =
\r
77 sizeof(Object), // typeSize
\r
80 NULL // declaringClass
\r
84 //////////////////////////////////////////////////////////////////////////////
\r
85 // DeclaringClasses members implementation
\r
88 DeclaringClasses::DeclaringClasses()
\r
95 // Ajoute une nouvelle classe en tête de liste
\r
96 void DeclaringClasses::addHead(Class* c)
\r
105 // Retourne la tête de liste et la retire de la liste
\r
106 Class* DeclaringClasses::removeHead(void)
\r
120 // Retire la classe pClasse de la liste, mais ne la détruit pas
\r
121 bool DeclaringClasses::remove(Class* c)
\r
126 bool success = false;
\r
138 while((NULL != cur) && (cur->next!= c))
\r
143 cur->next = c->next;
\r
152 bool Object::isInstanceOf(const char* className)
\r
154 Class* c = Class::fromName(className);
\r
156 return this->getClass()->isDerivedFrom(c);
\r