Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Last Changes of CPP version of Msg
[simgrid.git] / src / cxx / Object.cxx
index b8159d0..3d649a1 100644 (file)
@@ -1,20 +1,24 @@
-#include <object.hpp>\r
+#include <Object.hpp>\r
 #include <string.h>\r
 \r
 \r
 DeclaringClasses* DeclaringClass::declaringClasses = NULL;\r
 \r
 \r
-namespace msg\r
+namespace SimGrid\r
 {\r
-    // Generate static object constructor for class registration\r
-    void DeclareClass(Class* c)\r
-    {\r
-        MSG_DELCARING_CLASSES.lock();\r
-        MSG_DELCARING_CLASSES.addHead(c);\r
-        MSG_DELCARING_CLASSES.unlock();\r
-    }\r
-} \r
+       namespace Msg\r
+       {\r
+\r
+               // Generate static object constructor for class registration\r
+               void DeclareClass(Class* c)\r
+               {\r
+                       MSG_DELCARING_CLASSES.lock();\r
+                       MSG_DELCARING_CLASSES.addHead(c);\r
+                       MSG_DELCARING_CLASSES.unlock();\r
+               }\r
+       } // namespace Msg\r
+} // namespace SimGrid\r
 \r
 //////////////////////////////////////////////////////////////////////////////\r
 // Implémentation des fonctions membre de la classe Class\r
@@ -38,6 +42,7 @@ bool Class::isDerivedFrom(const Class* baseClass) const
 \r
 // Dynamic name lookup and creation\r
 Class* Class::fromName(const char* name)\r
+throw (ClassNotFoundException)\r
 {\r
        Class* cur;\r
 \r
@@ -46,20 +51,18 @@ Class* Class::fromName(const char* name)
        for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)\r
        {\r
                if(!strcmp(name,cur->name))\r
-                       break;\r
+                       return cur;\r
+\r
        }\r
 \r
        MSG_DELCARING_CLASSES.unlock();\r
        throw ClassNotFoundException(name);\r
 }\r
 \r
+\r
 Object* Class::createObject(const char* name)\r
 {\r
        Class* c = fromName(name);\r
-       \r
-       if(NULL == c)\r
-               return NULL;\r
-               \r
        return c->createObject();\r
 }\r
 \r
@@ -145,5 +148,12 @@ bool DeclaringClasses::remove(Class* c)
        \r
        return success;\r
 }\r
+\r
+bool Object::isInstanceOf(const char* className)\r
+{\r
+       Class* c = Class::fromName(className);\r
+\r
+       return this->getClass()->isDerivedFrom(c);\r
+}\r
                \r
 \r