From 0dd3e27e4e74a468edda4de5a17bd4fba1f77ed3 Mon Sep 17 00:00:00 2001 From: jmerelo Date: Tue, 13 Feb 2001 22:35:07 +0000 Subject: [PATCH] Moved out of the 'obsolete' directory a couple of honest classes, which didn't harm anybody; activated also in Makefile.am the program that tested them --- eo/src/utils/eoParser.cpp | 700 ++++++++++++------------- eo/src/utils/eoParser.h | 6 +- eo/src/{obsolete => utils}/eoRnd.h | 4 +- eo/src/{obsolete => utils}/eoUniform.h | 14 +- eo/test/Makefile.am | 8 +- eo/test/t-eoRandom.cpp | 22 +- 6 files changed, 388 insertions(+), 366 deletions(-) rename eo/src/{obsolete => utils}/eoRnd.h (91%) rename eo/src/{obsolete => utils}/eoUniform.h (89%) diff --git a/eo/src/utils/eoParser.cpp b/eo/src/utils/eoParser.cpp index e6378e57..0191d53f 100644 --- a/eo/src/utils/eoParser.cpp +++ b/eo/src/utils/eoParser.cpp @@ -1,350 +1,350 @@ -#ifdef _MSC_VER -#pragma warning(disable:4786) -#endif - -#include -#include -#include -#include - -#include - -#include - -using namespace std; - -void eoWarning(std::string str) -{ - cout << str << '\n'; -} - -std::ostream& printSectionHeader(std::ostream& os, std::string section) -{ - if (section == "") - section = "General"; - - os << '\n' << setw(10) << "###### " << setw(20) << section << setw(10) << " ######\n"; - return os; -} - -eoParameterLoader::~eoParameterLoader() -{ - for (unsigned i = 0; i < ownedParams.size(); ++i) - { - delete ownedParams[i]; - } -} - - -eoParser::eoParser ( int _argc, char **_argv , string _programDescription, string _lFileParamName, char _shortHand) : - programName( _argv[0]), - programDescription( _programDescription), - needHelp(false, "help", "Prints this message", 'h') -{ - // need to process the param file first - // if we want command-line to have highest priority - unsigned i; - for (i = 1; i < _argc; ++i) - { - if (_argv[i][0] == '@') - { // read response file - char *pts = _argv[i]+1; // yes a char*, sorry :-) - - ifstream ifs (pts); - - ifs.peek(); // check if it exists - - if (!ifs) - { - string msg = (string)("Could not open response file: ") + pts; - throw runtime_error(msg); - } - - // read - will be overwritten by command-line - readFrom(ifs); - break; // stop reading command line args for '@' - } - } - - // now read arguments on command-line - strstream stream; - - for (i = 1; i < _argc; ++i) - { - stream << _argv[i] << '\n'; - } - - readFrom(stream); - - processParam(needHelp); -} - -void eoParser::processParam(eoParam& param, std::string section) -{ - doRegisterParam(param); // plainly register it - params.insert(make_pair(section, ¶m)); -} - -void eoParser::doRegisterParam(eoParam& param) const -{ - if (param.required() && !isItThere(param)) - { - string msg = "Required parameter: " + param.longName() + " missing"; - messages.push_back(msg); - } - - pair value = getValue(param); - - if (value.first) - { - param.setValue(value.second); - } -} - -pair eoParser::getValue(eoParam& _param) const -{ - pair result(false, ""); - - if (_param.shortName() != 0) - { - map::const_iterator it = shortNameMap.find(_param.shortName()); - if (it != shortNameMap.end()) - { - result.second = it->second; - result.first = true; - return result; - } - } - - map::const_iterator it = longNameMap.find(_param.longName()); - - if (it != longNameMap.end()) - { - result.second = it->second; - result.first = true; - return result; - } - // else (TODO: check environment, just long names) - - return result; -} - -void eoParser::updateParameters() const -{ - typedef MultiMapType::const_iterator It; - - for (It p = params.begin(); p != params.end(); ++p) - { - doRegisterParam(*p->second); - } -} - -void eoParser::readFrom(istream& is) -{ - string str; - while (is >> str) - { - - if (str[0] == '#') - { // skip the rest of the line - string tempStr; - getline(is, tempStr); - } - if (str[0] == '-') - { - if (str.size() < 2) - { - eoWarning("Missing parameter"); - needHelp.value() = true; - return; - } - - if (str[1] == '-') // two consecutive dashes - { - string::iterator equalLocation = find(str.begin() + 2, str.end(), '='); - string value; - - if (equalLocation == str.end()) - { // TODO: it should be the next string - value = ""; - } - else - { - value = string(equalLocation + 1, str.end()); - } - - string name(str.begin() + 2, equalLocation); - longNameMap[name] = value; - - } - else // it should be a char - { - string value = "1"; // flags do not need a special - - if (str.size() >= 2) - { - if (str[2] == '=') - { - if (str.size() >= 3) - value = string(str.begin() + 3, str.end()); - } - else - { - value = string(str.begin() + 2, str.end()); - } - } - - shortNameMap[str[1]] = value; - } - } - } - - updateParameters(); -} - -void eoParser::printOn(ostream& os) const -{ - typedef MultiMapType::const_iterator It; - - It p = params.begin(); - - std::string section = p->first; - - printSectionHeader(os, section); - //print every param with its value - for (; p != params.end(); ++p) - { - std::string newSection = p->first; - - if (newSection != section) - { - section = newSection; - printSectionHeader(os, section); - } - - eoParam* param = p->second; - - string str = "--" + param->longName() + "=" + param->getValue(); - - os.setf(ios_base::left, ios_base::adjustfield); - os << setw(40) << str; - - os << setw(0) << " # "; - if (param->shortName()) - os << '-' << param->shortName() << " : "; - os << param->description(); - - if (param->required()) - { - os << " REQUIRED "; - } - - os << '\n'; - } -} - -void eoParser::printHelp(ostream& os) -{ - if (needHelp.value() == false && !messages.empty()) - { - std::copy(messages.begin(), messages.end(), ostream_iterator(os, "\n")); - messages.clear(); - return; - } - - // print program name and description - os << this->programName <<": "<< programDescription << "\n\n"; - - // print the usage when calling the program from the command line - os << "Usage: "<< programName<<" [Options]\n"; - // only short usage! - os << "Options of the form \"-f[=Value]\" or \"--Name[=value]\"" << endl; - - os << "Where:"<first; - - printSectionHeader(os, section); - - //print every param with its value - for (; p != params.end(); ++p) - { - std::string newSection = p->first; - - if (newSection != section) - { - section = newSection; - printSectionHeader(os, section); - } - - if (p->second->shortName()) - os << "-" << p->second->shortName() << ", "; - - os << "--" <second->longName() <<":\t" - << p->second->description() ; - - os << "\n" << setw(20) << ( (p->second->required())?"Required":"Optional" ); - os <<". By default: "<second->defValue() << '\n'; - } // for p - - os << "\n@param_file \t defines a file where the parameters are stored\n"; - os << '\n'; - -} - -bool eoParser::userNeedsHelp(void) -{ - /* - check whether there are long or short names entered - without a corresponding parameter - */ - - for (LongNameMapType::const_iterator lIt = longNameMap.begin(); lIt != longNameMap.end(); ++lIt) - { - string entry = lIt->first; - - MultiMapType::const_iterator it; - - for (it = params.begin(); it != params.end(); ++it) - { - if (entry == it->second->longName()) - { - break; - } - } - - if (it == params.end()) - { - string msg = "Unknown parameter: --" + entry + " entered, type -h or --help to see available parameters"; - messages.push_back(msg); - } - } - - for (ShortNameMapType::const_iterator sIt = shortNameMap.begin(); sIt != shortNameMap.end(); ++sIt) - { - char entry = sIt->first; - - MultiMapType::const_iterator it; - - for (it = params.begin(); it != params.end(); ++it) - { - if (entry == it->second->shortName()) - { - break; - } - } - - if (it == params.end()) - { - string entryString(1, entry); - string msg = "Unknown parameter: -" + entryString + " entered, type -h or --help to see available parameters"; - messages.push_back(msg); - } - } - - return needHelp.value() || !messages.empty(); -} +#ifdef _MSC_VER +#pragma warning(disable:4786) +#endif + +#include +#include +#include +#include + +#include + +#include + +using namespace std; + +void eoWarning(std::string str) +{ + cout << str << '\n'; +} + +std::ostream& printSectionHeader(std::ostream& os, std::string section) +{ + if (section == "") + section = "General"; + + os << '\n' << setw(10) << "###### " << setw(20) << section << setw(10) << " ######\n"; + return os; +} + +eoParameterLoader::~eoParameterLoader() +{ + for (unsigned i = 0; i < ownedParams.size(); ++i) + { + delete ownedParams[i]; + } +} + + +eoParser::eoParser ( unsigned _argc, char **_argv , string _programDescription, string _lFileParamName, char _shortHand) : + programName( _argv[0]), + programDescription( _programDescription), + needHelp(false, "help", "Prints this message", 'h') +{ + // need to process the param file first + // if we want command-line to have highest priority + unsigned i; + for (i = 1; i < _argc; ++i) + { + if (_argv[i][0] == '@') + { // read response file + char *pts = _argv[i]+1; // yes a char*, sorry :-) + + ifstream ifs (pts); + + ifs.peek(); // check if it exists + + if (!ifs) + { + string msg = (string)("Could not open response file: ") + pts; + throw runtime_error(msg); + } + + // read - will be overwritten by command-line + readFrom(ifs); + break; // stop reading command line args for '@' + } + } + + // now read arguments on command-line + strstream stream; + + for (i = 1; i < _argc; ++i) + { + stream << _argv[i] << '\n'; + } + + readFrom(stream); + + processParam(needHelp); +} + +void eoParser::processParam(eoParam& param, std::string section) +{ + doRegisterParam(param); // plainly register it + params.insert(make_pair(section, ¶m)); +} + +void eoParser::doRegisterParam(eoParam& param) const +{ + if (param.required() && !isItThere(param)) + { + string msg = "Required parameter: " + param.longName() + " missing"; + messages.push_back(msg); + } + + pair value = getValue(param); + + if (value.first) + { + param.setValue(value.second); + } +} + +pair eoParser::getValue(eoParam& _param) const +{ + pair result(false, ""); + + if (_param.shortName() != 0) + { + map::const_iterator it = shortNameMap.find(_param.shortName()); + if (it != shortNameMap.end()) + { + result.second = it->second; + result.first = true; + return result; + } + } + + map::const_iterator it = longNameMap.find(_param.longName()); + + if (it != longNameMap.end()) + { + result.second = it->second; + result.first = true; + return result; + } + // else (TODO: check environment, just long names) + + return result; +} + +void eoParser::updateParameters() const +{ + typedef MultiMapType::const_iterator It; + + for (It p = params.begin(); p != params.end(); ++p) + { + doRegisterParam(*p->second); + } +} + +void eoParser::readFrom(istream& is) +{ + string str; + while (is >> str) + { + + if (str[0] == '#') + { // skip the rest of the line + string tempStr; + getline(is, tempStr); + } + if (str[0] == '-') + { + if (str.size() < 2) + { + eoWarning("Missing parameter"); + needHelp.value() = true; + return; + } + + if (str[1] == '-') // two consecutive dashes + { + string::iterator equalLocation = find(str.begin() + 2, str.end(), '='); + string value; + + if (equalLocation == str.end()) + { // TODO: it should be the next string + value = ""; + } + else + { + value = string(equalLocation + 1, str.end()); + } + + string name(str.begin() + 2, equalLocation); + longNameMap[name] = value; + + } + else // it should be a char + { + string value = "1"; // flags do not need a special + + if (str.size() >= 2) + { + if (str[2] == '=') + { + if (str.size() >= 3) + value = string(str.begin() + 3, str.end()); + } + else + { + value = string(str.begin() + 2, str.end()); + } + } + + shortNameMap[str[1]] = value; + } + } + } + + updateParameters(); +} + +void eoParser::printOn(ostream& os) const +{ + typedef MultiMapType::const_iterator It; + + It p = params.begin(); + + std::string section = p->first; + + printSectionHeader(os, section); + //print every param with its value + for (; p != params.end(); ++p) + { + std::string newSection = p->first; + + if (newSection != section) + { + section = newSection; + printSectionHeader(os, section); + } + + eoParam* param = p->second; + + string str = "--" + param->longName() + "=" + param->getValue(); + + os.setf(ios_base::left, ios_base::adjustfield); + os << setw(40) << str; + + os << setw(0) << " # "; + if (param->shortName()) + os << '-' << param->shortName() << " : "; + os << param->description(); + + if (param->required()) + { + os << " REQUIRED "; + } + + os << '\n'; + } +} + +void eoParser::printHelp(ostream& os) +{ + if (needHelp.value() == false && !messages.empty()) + { + std::copy(messages.begin(), messages.end(), ostream_iterator(os, "\n")); + messages.clear(); + return; + } + + // print program name and description + os << this->programName <<": "<< programDescription << "\n\n"; + + // print the usage when calling the program from the command line + os << "Usage: "<< programName<<" [Options]\n"; + // only short usage! + os << "Options of the form \"-f[=Value]\" or \"--Name[=value]\"" << endl; + + os << "Where:"<first; + + printSectionHeader(os, section); + + //print every param with its value + for (; p != params.end(); ++p) + { + std::string newSection = p->first; + + if (newSection != section) + { + section = newSection; + printSectionHeader(os, section); + } + + if (p->second->shortName()) + os << "-" << p->second->shortName() << ", "; + + os << "--" <second->longName() <<":\t" + << p->second->description() ; + + os << "\n" << setw(20) << ( (p->second->required())?"Required":"Optional" ); + os <<". By default: "<second->defValue() << '\n'; + } // for p + + os << "\n@param_file \t defines a file where the parameters are stored\n"; + os << '\n'; + +} + +bool eoParser::userNeedsHelp(void) +{ + /* + check whether there are long or short names entered + without a corresponding parameter + */ + + for (LongNameMapType::const_iterator lIt = longNameMap.begin(); lIt != longNameMap.end(); ++lIt) + { + string entry = lIt->first; + + MultiMapType::const_iterator it; + + for (it = params.begin(); it != params.end(); ++it) + { + if (entry == it->second->longName()) + { + break; + } + } + + if (it == params.end()) + { + string msg = "Unknown parameter: --" + entry + " entered, type -h or --help to see available parameters"; + messages.push_back(msg); + } + } + + for (ShortNameMapType::const_iterator sIt = shortNameMap.begin(); sIt != shortNameMap.end(); ++sIt) + { + char entry = sIt->first; + + MultiMapType::const_iterator it; + + for (it = params.begin(); it != params.end(); ++it) + { + if (entry == it->second->shortName()) + { + break; + } + } + + if (it == params.end()) + { + string entryString(1, entry); + string msg = "Unknown parameter: -" + entryString + " entered, type -h or --help to see available parameters"; + messages.push_back(msg); + } + } + + return needHelp.value() || !messages.empty(); +} diff --git a/eo/src/utils/eoParser.h b/eo/src/utils/eoParser.h index 8af3a11b..2127eb6a 100644 --- a/eo/src/utils/eoParser.h +++ b/eo/src/utils/eoParser.h @@ -23,7 +23,9 @@ mkeijzer@dhi.dk */ //----------------------------------------------------------------------------- - +/** +CVS Info: $Date: 2001-02-13 22:35:07 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/utils/eoParser.h,v 1.7 2001-02-13 22:35:07 jmerelo Exp $ $Author: jmerelo $ $Log$ +*/ #ifndef eoParser_h #define eoParser_h @@ -111,7 +113,7 @@ public: * @param _lFileParamName Name of the parameter specifying the configuration file (--param-file) * @param _shortHand Single charachter shorthand for specifying the configuration file */ - eoParser ( int _argc, char **_argv , string _programDescription = "", + eoParser ( unsigned _argc, char **_argv , string _programDescription = "", string _lFileParamName = "param-file", char _shortHand = 'p'); /** diff --git a/eo/src/obsolete/eoRnd.h b/eo/src/utils/eoRnd.h similarity index 91% rename from eo/src/obsolete/eoRnd.h rename to eo/src/utils/eoRnd.h index 71a7095f..eca67ec7 100644 --- a/eo/src/obsolete/eoRnd.h +++ b/eo/src/utils/eoRnd.h @@ -21,7 +21,9 @@ Contact: todos@geneura.ugr.es, http://geneura.ugr.es */ //----------------------------------------------------------------------------- - +/** +CVS Info: $Date: 2001-02-13 22:35:07 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/utils/Attic/eoRnd.h,v 1.1 2001-02-13 22:35:07 jmerelo Exp $ $Author: jmerelo $ $Log$ +*/ #ifndef _EORND_H #define _EORND_H diff --git a/eo/src/obsolete/eoUniform.h b/eo/src/utils/eoUniform.h similarity index 89% rename from eo/src/obsolete/eoUniform.h rename to eo/src/utils/eoUniform.h index f807b6d5..dbeb4046 100644 --- a/eo/src/obsolete/eoUniform.h +++ b/eo/src/utils/eoUniform.h @@ -21,6 +21,11 @@ Contact: todos@geneura.ugr.es, http://geneura.ugr.es */ + +/** +CVS Info: $Date: 2001-02-13 22:35:07 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/utils/Attic/eoUniform.h,v 1.1 2001-02-13 22:35:07 jmerelo Exp $ $Author: jmerelo $ $Log$ +*/ + //----------------------------------------------------------------------------- #ifndef _EOUNIFORM_H @@ -28,14 +33,19 @@ //----------------------------------------------------------------------------- -#include +#include #include //----------------------------------------------------------------------------- // Class eoUniform //----------------------------------------------------------------------------- -/// Generates uniform random number over the interval [min, max) +/** Generates uniform random number over the interval [min, max) +Uses the global variable rng + */ + +using eo::rng; + template class eoUniform: public eoRnd { diff --git a/eo/test/Makefile.am b/eo/test/Makefile.am index 85cea015..7e3c608f 100644 --- a/eo/test/Makefile.am +++ b/eo/test/Makefile.am @@ -13,7 +13,8 @@ LDADDS = $(top_builddir)/src/libeo.a $(top_builddir)/src/utils/libeoutils.a CXXFLAGS = -g ############################################################################### -check_PROGRAMS = t-eofitness t-eobin t-eoStateAndParser t-eoCheckpointing t-eoExternalEO t-eoSymreg t-eo t-eoReplacement t-eoSelect t-eoGenOp t-eoGA +check_PROGRAMS = t-eofitness t-eoRandom t-eobin t-eoStateAndParser t-eoCheckpointing \ + t-eoExternalEO t-eoSymreg t-eo t-eoReplacement t-eoSelect t-eoGenOp t-eoGA TESTS=run_tests # removing temporarily t-eoESFull #noinst_PROGRAMS = t-eofitness t-eobin t-eoStateAndParser t-eoCheckpointing t-eoExternalEO t-eoESFull t-eoSymreg t-eo t-eoReplacement t-eoSelect t-eoGenOp t-eoGA @@ -24,6 +25,11 @@ TESTS=run_tests #t_eoESFull_DEPENDENCIES = $(DEPS) #t_eoESFull_LDFLAGS = -lm #t_eoESFull_LDADD = $(LDADDS) +############################################################################### + +t_eoRandom_SOURCES = t-eoRandom.cpp +t_eoRandom_DEPENDENCIES = $(DEPS) +t_eoRandom_LDADD = $(LDADDS) ############################################################################### diff --git a/eo/test/t-eoRandom.cpp b/eo/test/t-eoRandom.cpp index fefcc6c6..0d737f91 100644 --- a/eo/test/t-eoRandom.cpp +++ b/eo/test/t-eoRandom.cpp @@ -23,27 +23,29 @@ */ +/** +CVS Info: $Date: 2001-02-13 22:35:07 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/test/t-eoRandom.cpp,v 1.5 2001-02-13 22:35:07 jmerelo Exp $ $Author: jmerelo $ $Log$ +*/ //----------------------------------------------------------------------------- #include // cout #include // ostrstream, istrstream -#include // eoBin -#include -#include +#include // eoBin +//#include +//#include //----------------------------------------------------------------------------- main() { - eoNormal n1(-2.5,3.5); - eoNormal n2(0.003, 0.0005 ); - eoNormal n3( 10000000U, 10000U); - eoNegExp e1(3.5); + eoUniform u1(-2.5,3.5); + eoUniform u2(0.003, 0.0005 ); + eoUniform u3( 10000000U, 10000U); + /* eoNegExp e1(3.5); eoNegExp e2(0.003 ); eoNegExp e3( 10000U); - cout << "n1\t\tn2\t\tn3\t\te1\t\te2\t\te3" << endl; + cout << "n1\t\tn2\t\tn3\t\te1\t\te2\t\te3" << endl; */ for ( unsigned i = 0; i < 100; i ++) { - cout << n1() << "\t" << n2() << "\t" << n3() << "\t" << - e1() << "\t" << e2() << "\t" << e3() << endl; + cout << u1() << "\t" << u2() << "\t" << u3() << endl; } return 0; // to avoid VC++ complaints