/*************************************************************** Class for parsing inputs Written by k-fleak ***************************************************************/ #include #include #include #include #include #include #include #include #ifndef __PARSEINPUT_CPP #define __PARSEINPUT_CPP class ParseInput{ private: std::ifstream input; std::map > dataArray; void checkName(std::string name); public: ParseInput(char* fileName); ~ParseInput(); template void getData(char* dataName, dataType &dataOut); template void getData(char* dataName, std::vector &dataOut); template void setDefault(char* dataName, dataType &defaults); void printData(); }; ParseInput::ParseInput(char* filename){ input.open(filename); std::string line; while(!input.eof()){ std::getline(input, line); std::stringstream str; str << line; std::istream_iterator iss_iter (str); std::istream_iterator iss_end; std::string dataName(*iss_iter); std::vector dataIn; std::advance( iss_iter, 2 ); while (iss_iter != iss_end){ dataIn.push_back(*iss_iter); ++iss_iter; } dataArray[dataName] = dataIn; dataIn.clear(); } input.close(); } ParseInput::~ParseInput(){} template void ParseInput::getData(char* dataName, dataType &dataOut){ checkName(dataName); dataOut = boost::lexical_cast(dataArray[dataName][0]); } template void ParseInput::getData(char* dataName, std::vector &dataOut){ checkName(dataName); for ( int i = 0; i < (dataArray[dataName]).size(); ++i){ dataOut.push_back(boost::lexical_cast(dataArray[dataName][i])); } } template void ParseInput::setDefault(char* dataName, dataType &defaults){ std::map >::iterator it; it = dataArray.find(dataName); std::vector vtmp; vtmp.push_back(boost::lexical_cast(defaults)); if ( it == dataArray.end()){ dataArray[dataName] = vtmp; } } void ParseInput::checkName(std::string name){ std::map >::iterator it; it = dataArray.find(name); if ( it == dataArray.end()){ std::cout << "Error while reading input files. Please check the name: " << name << std::endl; exit(0); } } #endif