Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
last change of cpp wrappers for msg
[simgrid.git] / src / cxx / Object.hpp
index d44ff2b..fc89d91 100644 (file)
-/*\r
- * Object.hpp\r
- *\r
- * This file contains the declaration of the wrapper class of the native MSG task type.\r
- *\r
- * Copyright 2006,2007 Martin Quinson, Malek Cherier           \r
- * All right reserved. \r
- *\r
- * This program is free software; you can redistribute \r
- * it and/or modify it under the terms of the license \r
- *(GNU LGPL) which comes with this package. \r
- *\r
- */  \r
-#ifndef MSG_OBJECT_H\r
-#define MSG_OBJECT_H\r
-\r
-// Compilation C++ recquise\r
-#ifndef __cplusplus\r
-       #error Object.hpp requires C++ compilation (use a .cxx suffix)\r
-#endif\r
-\r
-#include <stdlib.h>\r
-\r
-#include <ClassNotFoundException.hpp>\r
-\r
-namespace SimGrid\r
-{\r
-       namespace Msg\r
-       {\r
-               //////////////////////////////////////////////////////////////////////////////\r
-               // Macros\r
-               \r
-               // Returns the runtime class of the class_name object.\r
-               #define MSG_GET_CLASS(class_name) \\r
-                                       ((Class*)(&class_name::class##class_name))\r
-                       \r
-               // Declare the class class_name as dynamic\r
-               #define MSG_DECLARE_DYNAMIC(class_name) \\r
-               public: \\r
-                       static Class class##class_name; \\r
-                       virtual Class* getClass() const; \\r
-                       static Object*  createObject() \\r
-\r
-               // The runtime class implementation.    \r
-               #define MSG_IMPLEMENT_CLASS(class_name, base_class_name, pfn,class_init) \\r
-                       Class class_name::class##class_name = { \\r
-                               #class_name, sizeof(class class_name),pfn, \\r
-                                       MSG_GET_CLASS(base_class_name), NULL,class_init}; \\r
-                       Class* class_name::getClass() const \\r
-                                { return MSG_GET_CLASS(class_name); } \\r
-               \r
-               // CreateObject implementation. \r
-               #define MSG_IMPLEMENT_DYNAMIC(class_name, base_class_name) \\r
-                       Object* class_name::createObject() \\r
-                               { return (Object*)(new class_name); } \\r
-                       DeclaringClass _declaringClass_##class_name(MSG_GET_CLASS(class_name)); \\r
-                       MSG_IMPLEMENT_CLASS(class_name, base_class_name, \\r
-                               class_name::createObject, &_declaringClass_##class_name) \\r
-\r
-               //////////////////////////////////////////////////////////////////////////////\r
-               // Classes declared in this file.\r
-\r
-               class Object;   // The msg object.\r
-\r
-               //////////////////////////////////////////////////////////////////////////////\r
-               // Structures declared in this files.\r
-\r
-               struct Class;           // used during the rtti operations\r
-               struct DeclaringClass;  // used during the instances registration.\r
-\r
-\r
-        class DeclaringClasses;\r
-\r
-               //////////////////////////////////////////////////////////////////////////////\r
-               // Global functions\r
-\r
-               // Used during the registration.\r
-               void DeclareClass(Class* c);\r
-\r
-               //////////////////////////////////////////////////////////////////////////////\r
-               // DeclaringClass\r
-\r
-               struct SIMGRIDX_EXPORT DeclaringClass\r
-               {\r
-                       // Constructor : add the runtime classe in the list.\r
-                       DeclaringClass(Class* c);\r
-                       \r
-                       // Destructor\r
-                       virtual ~DeclaringClass(void);\r
-\r
-               // Attributes :\r
-                   // the list of runtime classes.\r
-                   static DeclaringClasses* declaringClasses;\r
-               };\r
-\r
-        #define MSG_DELCARING_CLASSES (*(DeclaringClass::declaringClasses))\r
-               \r
-               \r
-               struct SIMGRIDX_EXPORT Class\r
-               {\r
-               \r
-               // Attributes\r
-       \r
-                       const char* name;                                               // class name.\r
-                       size_t typeSize;                                                // type size.                   \r
-                       Object* (*createObjectFn)(void);                // pointer to the create object function. \r
-                       Class* baseClass;                                               // the runtime class of the runtime class.\r
-                       Class* next;                                                    // the next runtime class in the list.\r
-                       const DeclaringClass* declaringClass;   // used during the registration of the class.\r
-               \r
-               // Operations\r
-               \r
-                       // Create the runtime class from its name.\r
-                       static Class* fromName(const char* name)\r
-                       throw (ClassNotFoundException);\r
-                       \r
-                       // Create an object from the name of the its class.\r
-                       static Object* createObject(const char* name);\r
-                       \r
-                       // Create an instance of the class.\r
-                       Object* createObject(void);\r
-                       \r
-                       // Return true is the class is dervived from the base class baseClass.\r
-                       bool isDerivedFrom(const Class* baseClass) const;\r
-\r
-               };\r
-\r
-        // Create an instance of the class.\r
-        inline Object* Class::createObject(void)\r
-        {\r
-            return (*createObjectFn)();\r
-        }\r
-       \r
-            \r
-               class SIMGRIDX_EXPORT Object\r
-               {\r
-               public:\r
-               \r
-                       // Default constructor.\r
-                       Object(){}\r
-                       \r
-                       // Destructor.\r
-                       virtual ~Object(){}\r
-                       \r
-                       // Operations.\r
-               \r
-                       // Get the runtime class.\r
-                       virtual Class* getClass(void) const;\r
-                       \r
-                       // Returns true if the class is derived from the class baseClass. Otherwise\r
-                       // the method returns false.\r
-                       bool isDerivedFrom(const Class* baseClass) const;\r
-                       \r
-                       // Returns true if the object is valid. Otherwise the method returns false.\r
-                       virtual bool isValid(void) const;\r
-\r
-                       // Returns true is the object is an instance of the class specified as parameter.\r
-                       bool isInstanceOf(const char* className);\r
-                       \r
-                       // Operators.\r
-\r
-                       // Attributes.\r
-                       \r
-                       // The runtime class.\r
-                       static const Class classObject;\r
-               };\r
-\r
-               // inline member functions of the class Object.\r
-               \r
-               // Returns the runtime class of the object.\r
-               inline Class* Object::getClass(void) const\r
-               {\r
-                       return MSG_GET_CLASS(Object);\r
-               }\r
-\r
-        // Returns true if the class is derived from the class pBaseClass. Otherwise\r
-               // the method returns false.\r
-        inline bool Object::isDerivedFrom(const Class* baseClass) const\r
-        {\r
-            return (getClass()->isDerivedFrom(baseClass));\r
-        }\r
-               \r
-               // Returns true if the object is valid. Otherwise the method returns false.\r
-               inline bool Object::isValid(void) const\r
-               {\r
-                       // returns always true.\r
-                       return true;    \r
-               }\r
-\r
-       \r
-               class DeclaringClasses \r
-               {\r
-               public:\r
-               \r
-                       // Constructor.\r
-                       DeclaringClasses();\r
-\r
-                       // Destructor.\r
-                       virtual ~DeclaringClasses(){}\r
-               \r
-               // Operations.\r
-               \r
-                       // Add the class at the head of the list.\r
-                       void addHead(Class* c);\r
-                       \r
-                       // Get the runtime class of the head of the list.\r
-                       Class* getHead(void) const ;\r
-                       \r
-                       // Remove the class from the list (don't destroy it).\r
-                       bool remove(Class* c);\r
-            \r
-            // Remove the head of the list.\r
-                       Class* removeHead(void);\r
-                       \r
-                       // Return true if the list is empty.\r
-                       \r
-                       bool isEmpty(void) const;\r
-                       \r
-                       // Remove of the elements of the list.\r
-                       void removeAll(void);\r
-                       \r
-                       // Get the number of classes in the list.\r
-                   unsigned int getCount(void);\r
-                   \r
-                   void lock(void){}\r
-                   \r
-                   void unlock(void){}\r
-               \r
-                       //Attributes\r
-               \r
-                       // The head of the list.\r
-                       Class* head;\r
-\r
-               private:\r
-               \r
-               // Attributes\r
-               \r
-                       // The number of elements of the list.\r
-                       unsigned int count;\r
-               };\r
-\r
-               typedef Object* ObjectPtr;\r
-\r
-\r
-        // Constructor (Add the class in the list).\r
-        inline DeclaringClass::DeclaringClass(Class* c)\r
-        {\r
-                if(!declaringClasses)\r
-                        declaringClasses = new DeclaringClasses();\r
-\r
-                DeclareClass(c);\r
-        }\r
-\r
-        // Destructor.\r
-        inline DeclaringClass::~DeclaringClass()\r
-        {\r
-                /*if(NULL != declaringClasses)\r
-                        delete declaringClasses;\r
-\r
-                declaringClasses=NULL;*/\r
-\r
-        }\r
-\r
-               // Returns the number of elements of the list.\r
-               inline unsigned int DeclaringClasses::getCount()\r
-               {\r
-                       return count;\r
-               }\r
-               \r
-               // Returns the head of the list.\r
-               inline Class* DeclaringClasses::getHead() const\r
-               {\r
-                       return head;\r
-               }\r
-               \r
-               // Returns true if the list is empty. Otherwise this function\r
-               // returns false.\r
-               inline bool DeclaringClasses::isEmpty() const\r
-               {\r
-                       return(!head);\r
-               }\r
-               \r
-               // Removes all the elements of the list.\r
-               inline void DeclaringClasses::removeAll()\r
-               {\r
-                       head = 0;\r
-                   count=0;\r
-               }\r
-                       \r
-       } // namespace Msg     \r
-} // namespace SimGrid\r
-\r
-\r
-using namespace SimGrid::Msg;\r
-\r
-#define instanceOf(class_name) reinterpret_cast<class_name*>(Class::createObject(#class_name))\r
-\r
-#endif // !MSG_OBJECT_H\r
-\r
+/*
+ * Object.hpp
+ *
+ * This file contains the declaration of the wrapper class of the native MSG task type.
+ *
+ * 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. 
+ *
+ */  
+#ifndef MSG_OBJECT_H
+#define MSG_OBJECT_H
+
+// Compilation C++ recquise
+#ifndef __cplusplus
+       #error Object.hpp requires C++ compilation (use a .cxx suffix)
+#endif
+
+#include <stdlib.h>
+
+#include <ClassNotFoundException.hpp>
+
+namespace SimGrid
+{
+       namespace Msg
+       {
+               //////////////////////////////////////////////////////////////////////////////
+               // Macros
+               
+               // Returns the runtime class of the class_name object.
+               #define MSG_GET_CLASS(class_name) \
+                                       ((Class*)(&class_name::class##class_name))
+                       
+               // Declare the class class_name as dynamic
+               #define MSG_DECLARE_DYNAMIC(class_name) \
+               public: \
+                       static Class class##class_name; \
+                       virtual Class* getClass() const; \
+                       static Object*  createObject() \
+
+               // The runtime class implementation.    
+               #define MSG_IMPLEMENT_CLASS(class_name, base_class_name, pfn,class_init) \
+                       Class class_name::class##class_name = { \
+                               #class_name, sizeof(class class_name),pfn, \
+                                       MSG_GET_CLASS(base_class_name), NULL,class_init}; \
+                       Class* class_name::getClass() const \
+                                { return MSG_GET_CLASS(class_name); } \
+               
+               // CreateObject implementation. 
+               #define MSG_IMPLEMENT_DYNAMIC(class_name, base_class_name) \
+                       Object* class_name::createObject() \
+                               { return (Object*)(new class_name); } \
+                       DeclaringClass _declaringClass_##class_name(MSG_GET_CLASS(class_name)); \
+                       MSG_IMPLEMENT_CLASS(class_name, base_class_name, \
+                               class_name::createObject, &_declaringClass_##class_name) \
+
+               //////////////////////////////////////////////////////////////////////////////
+               // Classes declared in this file.
+
+               class Object;   // The msg object.
+
+               //////////////////////////////////////////////////////////////////////////////
+               // Structures declared in this files.
+
+               struct Class;           // used during the rtti operations
+               struct DeclaringClass;  // used during the instances registration.
+
+
+        class DeclaringClasses;
+
+               //////////////////////////////////////////////////////////////////////////////
+               // Global functions
+
+               // Used during the registration.
+               void DeclareClass(Class* c);
+
+               //////////////////////////////////////////////////////////////////////////////
+               // DeclaringClass
+
+               struct SIMGRIDX_EXPORT DeclaringClass
+               {
+                       // Constructor : add the runtime classe in the list.
+                       DeclaringClass(Class* c);
+                       
+                       // Destructor
+                       virtual ~DeclaringClass(void);
+
+               // Attributes :
+                   // the list of runtime classes.
+                   static DeclaringClasses* declaringClasses;
+               };
+
+        #define MSG_DELCARING_CLASSES (*(DeclaringClass::declaringClasses))
+               
+               
+               struct SIMGRIDX_EXPORT Class
+               {
+               
+               // Attributes
+       
+                       const char* name;                                               // class name.
+                       size_t typeSize;                                                // type size.                   
+                       Object* (*createObjectFn)(void);                // pointer to the create object function. 
+                       Class* baseClass;                                               // the runtime class of the runtime class.
+                       Class* next;                                                    // the next runtime class in the list.
+                       const DeclaringClass* declaringClass;   // used during the registration of the class.
+               
+               // Operations
+               
+                       // Create the runtime class from its name.
+                       static Class* fromName(const char* name)
+                       throw (ClassNotFoundException);
+                       
+                       // Create an object from the name of the its class.
+                       static Object* createObject(const char* name);
+                       
+                       // Create an instance of the class.
+                       Object* createObject(void);
+                       
+                       // Return true is the class is dervived from the base class baseClass.
+                       bool isDerivedFrom(const Class* baseClass) const;
+
+               };
+
+        // Create an instance of the class.
+        inline Object* Class::createObject(void)
+        {
+            return (*createObjectFn)();
+        }
+       
+            
+               class SIMGRIDX_EXPORT Object
+               {
+               public:
+               
+                       // Default constructor.
+                       Object(){}
+                       
+                       // Destructor.
+                       virtual ~Object(){}
+                       
+                       // Operations.
+               
+                       // Get the runtime class.
+                       virtual Class* getClass(void) const;
+                       
+                       // Returns true if the class is derived from the class baseClass. Otherwise
+                       // the method returns false.
+                       bool isDerivedFrom(const Class* baseClass) const;
+                       
+                       // Returns true if the object is valid. Otherwise the method returns false.
+                       virtual bool isValid(void) const;
+
+                       // Returns true is the object is an instance of the class specified as parameter.
+                       bool isInstanceOf(const char* className);
+                       
+                       // Operators.
+
+                       // Attributes.
+                       
+                       // The runtime class.
+                       static const Class classObject;
+               };
+
+               // inline member functions of the class Object.
+               
+               // Returns the runtime class of the object.
+               inline Class* Object::getClass(void) const
+               {
+                       return MSG_GET_CLASS(Object);
+               }
+
+        // Returns true if the class is derived from the class pBaseClass. Otherwise
+               // the method returns false.
+        inline bool Object::isDerivedFrom(const Class* baseClass) const
+        {
+            return (getClass()->isDerivedFrom(baseClass));
+        }
+               
+               // Returns true if the object is valid. Otherwise the method returns false.
+               inline bool Object::isValid(void) const
+               {
+                       // returns always true.
+                       return true;    
+               }
+
+       
+               class DeclaringClasses 
+               {
+               public:
+               
+                       // Constructor.
+                       DeclaringClasses();
+
+                       // Destructor.
+                       virtual ~DeclaringClasses(){}
+               
+               // Operations.
+               
+                       // Add the class at the head of the list.
+                       void addHead(Class* c);
+                       
+                       // Get the runtime class of the head of the list.
+                       Class* getHead(void) const ;
+                       
+                       // Remove the class from the list (don't destroy it).
+                       bool remove(Class* c);
+            
+            // Remove the head of the list.
+                       Class* removeHead(void);
+                       
+                       // Return true if the list is empty.
+                       
+                       bool isEmpty(void) const;
+                       
+                       // Remove of the elements of the list.
+                       void removeAll(void);
+                       
+                       // Get the number of classes in the list.
+                   unsigned int getCount(void);
+                   
+                   void lock(void){}
+                   
+                   void unlock(void){}
+               
+                       //Attributes
+               
+                       // The head of the list.
+                       Class* head;
+
+               private:
+               
+               // Attributes
+               
+                       // The number of elements of the list.
+                       unsigned int count;
+               };
+
+               typedef Object* ObjectPtr;
+
+
+        // Constructor (Add the class in the list).
+        inline DeclaringClass::DeclaringClass(Class* c)
+        {
+                if(!declaringClasses)
+                        declaringClasses = new DeclaringClasses();
+
+                DeclareClass(c);
+        }
+
+        // Destructor.
+        inline DeclaringClass::~DeclaringClass()
+        {
+                /*if(NULL != declaringClasses)
+                        delete declaringClasses;
+
+                declaringClasses=NULL;*/
+
+        }
+
+               // Returns the number of elements of the list.
+               inline unsigned int DeclaringClasses::getCount()
+               {
+                       return count;
+               }
+               
+               // Returns the head of the list.
+               inline Class* DeclaringClasses::getHead() const
+               {
+                       return head;
+               }
+               
+               // Returns true if the list is empty. Otherwise this function
+               // returns false.
+               inline bool DeclaringClasses::isEmpty() const
+               {
+                       return(!head);
+               }
+               
+               // Removes all the elements of the list.
+               inline void DeclaringClasses::removeAll()
+               {
+                       head = 0;
+                   count=0;
+               }
+                       
+       } // namespace Msg     
+} // namespace SimGrid
+
+
+using namespace SimGrid::Msg;
+
+#define instanceOf(class_name) reinterpret_cast<class_name*>(Class::createObject(#class_name))
+
+#endif // !MSG_OBJECT_H
+