X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/27762ebaebfa8b7bc44b30fac206de15fc157041..331a25db7c5afa9a51e7c15b84dd9c5e99960450:/src/cxx/ApplicationHandler.cxx diff --git a/src/cxx/ApplicationHandler.cxx b/src/cxx/ApplicationHandler.cxx deleted file mode 100644 index 2673dbbc29..0000000000 --- a/src/cxx/ApplicationHandler.cxx +++ /dev/null @@ -1,190 +0,0 @@ -/* - * ApplicationHandler.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. - * - */ - - /* ApplicationHandler member functions implementation. - */ - - -#include -#include - -#include -#include - - - - - -#include - -#include -#include - - -namespace SimGrid -{ - namespace Msg - { - - ApplicationHandler::ProcessFactory* ApplicationHandler::processFactory = NULL; - - // Desable the default constructor, the copy constructor , the assignement operator - // and the destructor of this class. Assume that this class is static. - - // Default constructor. - ApplicationHandler::ApplicationHandler() - { - // NOTHING TODO - } - - // Copy constructor. - ApplicationHandler::ApplicationHandler(const ApplicationHandler& rApplicationHandler) - { - // NOTHING TODO - } - - // Destructor - ApplicationHandler::~ApplicationHandler() - { - // NOTHING TODO - } - - // Assignement operator. - const ApplicationHandler& ApplicationHandler::operator = (const ApplicationHandler& rApplicationHandler) - { - return *this; - } - - void ApplicationHandler::onStartDocument(void) - { - // instanciate the factory at the begining of the parsing - processFactory = new ProcessFactory(); - } - - void ApplicationHandler::onEndDocument(void) - { - // release the handler at the end of the parsing. - if(processFactory) - delete processFactory; - } - - void ApplicationHandler::onBeginProcess(void) - { - // set the process identity at the begin of the xml process element. - processFactory->setProcessIdentity(A_surfxml_process_host, A_surfxml_process_function); - } - - void ApplicationHandler::onProcessArg(void) - { - // register the argument of the current xml process element. - processFactory->registerProcessArg(A_surfxml_argument_value); - } - - void ApplicationHandler::OnProperty(void) - { - // set the property of the current xml process element. - processFactory->setProperty(A_surfxml_prop_id, A_surfxml_prop_value); - } - - void ApplicationHandler::onEndProcess(void) - { - // at the end of the xml process element create the wrapper process (of the native Msg process) - processFactory->createProcess(); - } - - ///////////////////////////////////////////////////////////////////////////////////////////////// - // Process factory connected member functions - - ApplicationHandler::ProcessFactory::ProcessFactory() - { - this->args = xbt_dynar_new(sizeof(char*),ApplicationHandler::ProcessFactory::freeCstr); - this->properties = NULL; // TODO instanciate the dictionary - this->hostName = NULL; - this->function = NULL; - } - - ApplicationHandler::ProcessFactory::~ProcessFactory() - { - xbt_dynar_free(&(this->args)); - } - - // create the cxx process wrapper. - void ApplicationHandler::ProcessFactory::createProcess() - throw (ClassNotFoundException, HostNotFoundException) - { - Host host; - Class* c; - Process* process; - - // try to dynamicaly create an instance of the process from its name (which is specified by the element function - // in the xml application file. - // if this static method fails, it throws an exception of the class ClassNotFoundException - c = Class::fromName(this->function); - process = reinterpret_cast(c->createObject()); - - // try to retrieve the host of the process from its name - // if this method fails, it throws an exception of the class HostNotFoundException - host = Host::getByName(this->hostName); - - // build the list of the arguments of the newly created process. - int argc = xbt_dynar_length(this->args); - - char** argv = (char**)calloc(argc, sizeof(char*)); - - for(int i = argc -1; i >= 0; i--) - xbt_dynar_pop(this->args, &(argv[i])); - - // finaly create the process (for more detail on the process creation see Process::create() - process->create(host, this->function , argc, argv); - - // TODO add the properties of the process - /*process->properties = this->properties; - this->properties = new Properties();*/ - } - - void ApplicationHandler::ProcessFactory::setProcessIdentity(const char* hostName, const char* function) - { - this->hostName = hostName; - this->function = function; - - /*if (!this->args->empty()) - this->args->clear(); - - if(!this->properties->empty()) - this->properties->clear();*/ - } - - // callback function used by the dynamic array to cleanup all of its elements. - void ApplicationHandler::ProcessFactory::freeCstr(void* cstr) - { - free(*(void**)cstr); - } - - void ApplicationHandler::ProcessFactory::registerProcessArg(const char* arg) - { - char* cstr = _strdup(arg); - xbt_dynar_push(this->args, &cstr); - } - - void ApplicationHandler::ProcessFactory::setProperty(const char* id, const char* value) - { - // TODO implement this function; - } - - const char* ApplicationHandler::ProcessFactory::getHostName(void) - { - return this->hostName; - } - - } // namespace Msg -} // namespace SimGrid -