Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
merge conflicts
[simgrid.git] / src / cxx / Object.cxx
index 3d649a1..b7ca4b4 100644 (file)
-#include <Object.hpp>\r
-#include <string.h>\r
-\r
-\r
-DeclaringClasses* DeclaringClass::declaringClasses = NULL;\r
-\r
-\r
-namespace SimGrid\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
-\r
-// true if the class is derived from base classe referenced \r
-// by pBaseClass\r
-bool Class::isDerivedFrom(const Class* baseClass) const\r
-{\r
-       const Class* cur = this;\r
-\r
-       while(cur)\r
-       {\r
-               if(cur == baseClass)\r
-                       return true;\r
-\r
-               cur = cur->baseClass;\r
-       }\r
-\r
-       return false;\r
-}\r
-\r
-// Dynamic name lookup and creation\r
-Class* Class::fromName(const char* name)\r
-throw (ClassNotFoundException)\r
-{\r
-       Class* cur;\r
-\r
-       MSG_DELCARING_CLASSES.lock();\r
-       \r
-       for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)\r
-       {\r
-               if(!strcmp(name,cur->name))\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
-       return c->createObject();\r
-}\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////////////\r
-// Object members implementation\r
-\r
-// Special runtime-class structure for Object (no base class)\r
-const struct Class Object::classObject =\r
-{ \r
-       "Object",               // name\r
-       sizeof(Object), // typeSize\r
-       NULL,                   // baseClass\r
-       NULL,                   // next\r
-       NULL                    // declaringClass\r
-};\r
-\r
-\r
-//////////////////////////////////////////////////////////////////////////////\r
-// DeclaringClasses members implementation\r
-//\r
-\r
-DeclaringClasses::DeclaringClasses()\r
-{\r
-        head = NULL;\r
-        count = 0;\r
-}\r
-\r
-\r
-// Ajoute une nouvelle classe en tête de liste\r
-void DeclaringClasses::addHead(Class* c)\r
-{\r
-       if(NULL != head)\r
-               c->next = head;\r
-\r
-       head = c;\r
-    count++;\r
-}\r
-\r
-// Retourne la tête de liste et la retire de la liste\r
-Class* DeclaringClasses::removeHead(void)\r
-{\r
-       Class* c = NULL;\r
-\r
-       if(NULL != head)\r
-       {\r
-               c = head;\r
-               head = head->next;\r
-               count--;\r
-       }\r
-\r
-       return c;\r
-}\r
-\r
-// Retire la classe pClasse de la liste, mais ne la détruit pas \r
-bool DeclaringClasses::remove(Class* c)\r
-{\r
-       if(NULL == head)\r
-               return false;\r
-\r
-       bool success = false;\r
-\r
-       if(head == c)\r
-       {\r
-               head = c->next;\r
-        count--;\r
-               success = true;\r
-       }\r
-       else\r
-       {\r
-               Class* cur = head;\r
-\r
-               while((NULL != cur) && (cur->next!= c))\r
-                       cur = cur->next;\r
-\r
-               if(NULL != cur)\r
-               {\r
-                       cur->next = c->next;\r
-            count--;\r
-                       success = true;\r
-               }\r
-       }\r
-       \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
+/*
+ * Object.cxx
+ *
+ * Copyright 2006,2007 Martin Quinson, Malek Cherier           
+ * All right reserved. 
+ *
+ * This program is free software; you can redistribute 
+ * it and/or modify it under the terms of the license 
+ *(GNU LGPL) which comes with this package. 
+ *
+ */
+ /* SimGrid::Msg RTTI implementation.
+  */  
+
+#include <Object.hpp>
+#include <string.h>
+
+#include <xbt/dynar.h>
+
+
+
+
+DeclaringClasses* DeclaringClass::declaringClasses = NULL;
+
+namespace SimGrid
+{
+       namespace Msg
+       {
+
+               // Generate static object constructor for class registration
+               void DeclareClass(Class* c)
+               {
+                       MSG_DELCARING_CLASSES.lock();
+                       MSG_DELCARING_CLASSES.addHead(c);
+                       MSG_DELCARING_CLASSES.unlock();
+               }
+       } // namespace Msg
+} // namespace SimGrid
+
+//////////////////////////////////////////////////////////////////////////////
+// Implémentation des fonctions membre de la classe Class
+
+// true if the class is derived from base classe referenced 
+// by pBaseClass
+bool Class::isDerivedFrom(const Class* baseClass) const
+{
+       const Class* cur = this;
+
+       while(cur)
+       {
+               if(cur == baseClass)
+                       return true;
+
+               cur = cur->baseClass;
+       }
+
+       return false;
+}
+
+// Dynamic name lookup and creation
+Class* Class::fromName(const char* name)
+throw (ClassNotFoundException)
+{
+       Class* cur;
+
+       MSG_DELCARING_CLASSES.lock();
+       
+       for(cur = MSG_DELCARING_CLASSES.getHead(); cur; cur = cur->next)
+       {
+               if(!strcmp(name,cur->name))
+               {
+                       MSG_DELCARING_CLASSES.unlock();
+                       return cur;
+               }
+       }
+
+       MSG_DELCARING_CLASSES.unlock();
+       throw ClassNotFoundException(name);
+}
+
+
+Object* Class::createObject(const char* name)
+{
+       Class* c = fromName(name);
+       return c->createObject();
+}
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Object members implementation
+
+// Special runtime-class structure for Object (no base class)
+const struct Class Object::classObject =
+{ 
+       "Object",               // name
+       sizeof(Object), // typeSize
+       NULL,                   // baseClass
+       NULL,                   // next
+       NULL                    // declaringClass
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+// DeclaringClasses members implementation
+//
+
+DeclaringClasses::DeclaringClasses()
+{
+        head = NULL;
+        count = 0;
+}
+
+
+// Ajoute une nouvelle classe en tête de liste
+void DeclaringClasses::addHead(Class* c)
+{
+       if(NULL != head)
+               c->next = head;
+
+       head = c;
+    count++;
+}
+
+// Retourne la tête de liste et la retire de la liste
+Class* DeclaringClasses::removeHead(void)
+{
+       Class* c = NULL;
+
+       if(NULL != head)
+       {
+               c = head;
+               head = head->next;
+               count--;
+       }
+
+       return c;
+}
+
+// Retire la classe pClasse de la liste, mais ne la détruit pas 
+bool DeclaringClasses::remove(Class* c)
+{
+       if(NULL == head)
+               return false;
+
+       bool success = false;
+
+       if(head == c)
+       {
+               head = c->next;
+        count--;
+               success = true;
+       }
+       else
+       {
+               Class* cur = head;
+
+               while((NULL != cur) && (cur->next!= c))
+                       cur = cur->next;
+
+               if(NULL != cur)
+               {
+                       cur->next = c->next;
+            count--;
+                       success = true;
+               }
+       }
+       
+       return success;
+}
+
+bool Object::isInstanceOf(const char* className)
+{
+       Class* c = Class::fromName(className);
+
+       return this->getClass()->isDerivedFrom(c);
+}
+               
+