Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Some new files of the cxx version of the MSG API
[simgrid.git] / src / cxx / Environment.cxx
diff --git a/src/cxx/Environment.cxx b/src/cxx/Environment.cxx
new file mode 100644 (file)
index 0000000..5b0ea8d
--- /dev/null
@@ -0,0 +1,139 @@
+#include <Environment.hpp>\r
+\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+\r
+#ifndef S_ISREG\r
+       #define S_ISREG(__mode) (((__mode) & S_IFMT) == S_IFREG)\r
+#endif\r
+\r
+namespace SimGrid\r
+{\r
+       namespace Msg\r
+       {\r
+               Environment::Environment()\r
+               {\r
+                       this->file = NULL;\r
+                       this->loaded = false;\r
+               }\r
+                               \r
+               Environment::Environment(const Environment& rEnvironment);\r
+               {\r
+                       this->file = rEnvironment.getFile();\r
+                       this->loaded = rEnvironment.isLoaded();\r
+               }\r
+               \r
+               Environment::Environment(const char* file)\r
+               throw(InvalidArgumentException);\r
+               {\r
+                       // check parameters\r
+                       \r
+                       if(!file)\r
+                               throw InvalidParameterException("file (must not be NULL");\r
+                       \r
+                       struct stat statBuf = {0};\r
+                               \r
+                       if(stat(statBuff, &info) < 0 || !S_ISREG(statBuff.st_mode))\r
+                               throw InvalidParameterException("file (file not found)");\r
+                               \r
+                       this->file = file;\r
+                       this->loaded = false;\r
+               }\r
+               \r
+               Environment::~Environment()\r
+               {\r
+                       // NOTHING TODO\r
+               }\r
+               \r
+               // Operations.\r
+               \r
+               void Environment::load(void)\r
+               throw(LogicException)\r
+               {\r
+                       // check logic\r
+                       \r
+                       if(this->loaded)\r
+                               throw LogicException("environement already loaded");\r
+                       \r
+                       // check the parameters\r
+                       if(!this->file)\r
+                               throw LogicException("you must specify the xml file which describe the environment to load\nuse Environment::setFile()"); \r
+                       \r
+                       MSG_create_environment(file);\r
+                       \r
+                       this->loaded = true;            \r
+               }\r
+               \r
+               void Environment::load(const char* file)\r
+               throw(InvalidArgumentException, LogicException)\r
+               {\r
+                       // check logic\r
+                       \r
+                       if(this->loaded)\r
+                               throw LogicException("environment already loaded");\r
+                       \r
+                       // check the parameters\r
+                               \r
+                       if(!file)\r
+                               throw InvalidParameterException("file (must not be NULL");\r
+                       \r
+                       struct stat statBuf = {0};\r
+                               \r
+                       if(stat(statBuff, &info) < 0 || !S_ISREG(statBuff.st_mode))\r
+                               throw InvalidParameterException("file (file not found)");\r
+                                       \r
+                       MSG_create_environment(file);\r
+                       \r
+                       this->file = file;\r
+                       this->loaded = true;    \r
+               }\r
+               \r
+               bool Environment::isLoaded(void) const\r
+               {\r
+                       return this->loaded;\r
+               }\r
+               \r
+               // Getters/setters\r
+               void Environment::setFile(const char* file)\r
+               throw(InvalidArgumentException, LogicException)\r
+               {\r
+                       // check logic\r
+                       \r
+                       if(this->loaded)\r
+                               throw LogicException("your are trying to change the file of an already loaded environment");\r
+                               \r
+                       // check parameters\r
+                       \r
+                       if(!file)\r
+                               throw InvalidParameterException("file (must not be NULL");\r
+                       \r
+                       struct stat statBuf = {0};\r
+                               \r
+                       if(stat(statBuff, &info) < 0 || !S_ISREG(statBuff.st_mode))\r
+                               throw InvalidParameterException("file (file not found)");\r
+                               \r
+                       this->file = file;\r
+               }\r
+               \r
+               const char* Environment::getFile(void) const\r
+               {\r
+                       return this->file;\r
+               }\r
+       \r
+               \r
+               const Environment& Environment::operator = (const Environment& rEnvironment)\r
+               throw(LogicException)\r
+               {\r
+                       // check logic\r
+                       \r
+                       if(this->loaded)\r
+                               throw LogicException("environment already loaded");\r
+                       \r
+                       this->file = rEnvironment.getFile();\r
+                       this->loaded = rEnvironment.isLoaded();\r
+                       \r
+                       return *this;\r
+               }\r
+                               \r
+       } // namespace Msg\r
+} // namespace SimGrid
\ No newline at end of file