diff --git a/ConfigFile.cc b/ConfigFile.cc index 9ba7fb4d626e55f3e11112b5c4768a8dd037214f..33c0c24ea97531b4d949d629ec7dbb652dd119a6 100644 --- a/ConfigFile.cc +++ b/ConfigFile.cc @@ -30,16 +30,24 @@ using namespace std; SlaveNode::SlaveNode(string &computerName_arg, int minCpuNbr_arg, int maxCpuNbr_arg, string &userName_arg, string &password_arg, string &remoteDrive_arg, string &remoteDirectory_arg, - string &dynarePath_arg, string &matlabOctavePath_arg, bool singleCompThread_arg) : + string &dynarePath_arg, string &matlabOctavePath_arg, bool singleCompThread_arg, + string &operatingSystem_arg) : computerName(computerName_arg), minCpuNbr(minCpuNbr_arg), maxCpuNbr(maxCpuNbr_arg), userName(userName_arg), password(password_arg), remoteDrive(remoteDrive_arg), remoteDirectory(remoteDirectory_arg), dynarePath(dynarePath_arg), - matlabOctavePath(matlabOctavePath_arg), singleCompThread(singleCompThread_arg) + matlabOctavePath(matlabOctavePath_arg), singleCompThread(singleCompThread_arg), operatingSystem(operatingSystem_arg) { if (computerName.empty()) { cerr << "ERROR: The node must have a ComputerName." << endl; exit(EXIT_FAILURE); } + + if (!operatingSystem.empty()) + if (operatingSystem.compare("windows") != 0 && operatingSystem.compare("unix") != 0) + { + cerr << "ERROR: The OperatingSystem must be either 'unix' or 'windows' (Case Sensitive)." << endl; + exit(EXIT_FAILURE); + } } Cluster::Cluster(vector<string> member_nodes_arg) : member_nodes(member_nodes_arg) @@ -107,7 +115,7 @@ ConfigFile::getConfigFileInfo(const string ¶llel_config_file) } string name, computerName, userName, password, remoteDrive, - remoteDirectory, dynarePath, matlabOctavePath; + remoteDirectory, dynarePath, matlabOctavePath, operatingSystem; int minCpuNbr = 0, maxCpuNbr = 0; bool singleCompThread = true; vector<string> member_nodes; @@ -127,7 +135,8 @@ ConfigFile::getConfigFileInfo(const string ¶llel_config_file) addConfFileElement(inNode, inCluster, member_nodes, name, computerName, minCpuNbr, maxCpuNbr, userName, password, remoteDrive, remoteDirectory, - dynarePath, matlabOctavePath, singleCompThread); + dynarePath, matlabOctavePath, singleCompThread, + operatingSystem); //! Reset communication vars / option defaults if (!line.compare("[node]")) @@ -142,7 +151,8 @@ ConfigFile::getConfigFileInfo(const string ¶llel_config_file) } name = userName = computerName = password = remoteDrive - = remoteDirectory = dynarePath = matlabOctavePath = ""; + = remoteDirectory = dynarePath = matlabOctavePath + = operatingSystem = ""; minCpuNbr = maxCpuNbr = 0; singleCompThread = true; member_nodes.clear(); @@ -230,6 +240,8 @@ ConfigFile::getConfigFileInfo(const string ¶llel_config_file) cerr << "ERROR (in config file): The value passed to SingleCompThread may only be 'true' or 'false'." << endl; exit(EXIT_FAILURE); } + else if (!tokenizedLine.front().compare("OperatingSystem")) + operatingSystem = tokenizedLine.back(); else if (!tokenizedLine.front().compare("Members")) { vector<string> tmp_member_nodes; @@ -253,7 +265,8 @@ ConfigFile::getConfigFileInfo(const string ¶llel_config_file) addConfFileElement(inNode, inCluster, member_nodes, name, computerName, minCpuNbr, maxCpuNbr, userName, password, remoteDrive, remoteDirectory, - dynarePath, matlabOctavePath, singleCompThread); + dynarePath, matlabOctavePath, singleCompThread, + operatingSystem); configFile->close(); delete configFile; } @@ -262,7 +275,8 @@ void ConfigFile::addConfFileElement(bool inNode, bool inCluster, vector<string> member_nodes, string &name, string &computerName, int minCpuNbr, int maxCpuNbr, string &userName, string &password, string &remoteDrive, string &remoteDirectory, - string &dynarePath, string &matlabOctavePath, bool singleCompThread) + string &dynarePath, string &matlabOctavePath, bool singleCompThread, + string &operatingSystem) { //! ADD NODE if (inNode) @@ -280,12 +294,12 @@ ConfigFile::addConfFileElement(bool inNode, bool inCluster, vector<string> membe else slave_nodes[name] = new SlaveNode(computerName, minCpuNbr, maxCpuNbr, userName, password, remoteDrive, remoteDirectory, dynarePath, - matlabOctavePath, singleCompThread); + matlabOctavePath, singleCompThread, operatingSystem); //! ADD CLUSTER else if (inCluster) if (minCpuNbr > 0 || maxCpuNbr > 0 || !userName.empty() || !password.empty() || !remoteDrive.empty() || !remoteDirectory.empty() - || !dynarePath.empty() || !matlabOctavePath.empty()) + || !dynarePath.empty() || !matlabOctavePath.empty() || !operatingSystem.empty()) { cerr << "Invalid option passed to [cluster]." << endl; exit(EXIT_FAILURE); @@ -451,7 +465,8 @@ ConfigFile::writeCluster(ostream &output) const << "'RemoteDrive', '" << it->second->remoteDrive << "', " << "'RemoteDirectory', '" << it->second->remoteDirectory << "', " << "'DynarePath', '" << it->second->dynarePath << "', " - << "'MatlabOctavePath', '" << it->second->matlabOctavePath << "', "; + << "'MatlabOctavePath', '" << it->second->matlabOctavePath << "', " + << "'OperatingSystem', '" << it->second->operatingSystem << "', "; if (it->second->singleCompThread) output << "'SingleCompThread', 'true');" << endl; diff --git a/ConfigFile.hh b/ConfigFile.hh index 1a5eb9974c4f4dec77c8126e1ddb0c9c97ba4f9e..2b3d4f371d4bbb05b5e476f8f6332880707cca98 100644 --- a/ConfigFile.hh +++ b/ConfigFile.hh @@ -30,7 +30,8 @@ class SlaveNode public: SlaveNode(string &computerName_arg, int minCpuNbr_arg, int maxCpuNbr_arg, string &userName_arg, string &password_arg, string &remoteDrive_arg, string &remoteDirectory_arg, - string &dynarePath_arg, string &matlabOctavePath_arg, bool singleCompThread_arg); + string &dynarePath_arg, string &matlabOctavePath_arg, bool singleCompThread_arg, + string &operatingSystem_arg); ~SlaveNode(); protected: @@ -44,6 +45,7 @@ protected: const string dynarePath; const string matlabOctavePath; const bool singleCompThread; + const string operatingSystem; }; class Cluster @@ -78,7 +80,8 @@ private: void addConfFileElement(bool inNode, bool inCluster, vector<string> member_nodes, string &name, string &computerName, int minCpuNbr, int maxCpuNbr, string &userName, string &password, string &remoteDrive, string &remoteDirectory, - string &dynarePath, string &matlabOctavePath, bool singleCompThread); + string &dynarePath, string &matlabOctavePath, bool singleCompThread, + string &operatingSystem); public: //! Parse config file void getConfigFileInfo(const string ¶llel_config_file);