00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "CommandLineOptions.h"
00020
00021
00022 using std::ostringstream;
00023 using std::cout;
00024 using std::endl;
00025 using std::istream;
00026 using std::ostream;
00027 using std::vector;
00028
00029 using namespace Marsyas;
00030
00031 CommandLineOptions::CommandLineOptions()
00032 {
00033 }
00034
00035 void
00036 CommandLineOptions::addBoolOption(mrs_string lname, mrs_string sname, bool value)
00037 {
00038 mrs_string dlname;
00039 dlname += "--";
00040 dlname += lname;
00041
00042 mrs_string dsname;
00043 dsname += "-";
00044 dsname += sname;
00045
00046 boolOptions_[dsname] = value;
00047 boolOptions_[dlname] = value;
00048 longNames_[dsname] = dlname;
00049 }
00050
00051 void
00052 CommandLineOptions::addNaturalOption(mrs_string lname, mrs_string sname, mrs_natural value)
00053 {
00054 mrs_string dlname;
00055 dlname += "--";
00056 dlname += lname;
00057
00058 mrs_string dsname;
00059 dsname += "-";
00060 dsname += sname;
00061
00062 naturalOptions_[dsname] = value;
00063 naturalOptions_[dlname] = value;
00064 longNames_[dsname] = dlname;
00065 }
00066
00067 void
00068 CommandLineOptions::addRealOption(mrs_string lname,mrs_string sname,mrs_real value)
00069 {
00070 mrs_string dlname;
00071 dlname += "--";
00072 dlname += lname;
00073
00074 mrs_string dsname;
00075 dsname += "-";
00076 dsname += sname;
00077
00078 realOptions_[dsname] = value;
00079 realOptions_[dlname] = value;
00080 longNames_[dsname] = dlname;
00081 }
00082
00083 void
00084 CommandLineOptions::addStringOption(mrs_string lname,mrs_string sname,mrs_string value)
00085 {
00086 mrs_string dlname;
00087 dlname += "--";
00088 dlname += lname;
00089
00090 mrs_string dsname;
00091 dsname += "-";
00092 dsname += sname;
00093
00094 stringOptions_[dsname] = value;
00095 stringOptions_[dlname] = value;
00096 longNames_[dsname] = dlname;
00097 }
00098
00099 void
00100 CommandLineOptions::readOptions(int argc, const char **argv)
00101 {
00102 for (int i=0; i < argc; ++i)
00103 {
00104 arguments_.push_back(argv[i]);
00105 }
00106
00107 mrs_string key;
00108 mrs_string argument;
00109 bool notFound = true;
00110
00111 for (int i=1; i < argc; ++i)
00112 {
00113 argument = arguments_[i];
00114 if (argument.substr(0,1) == "-")
00115 {
00116 notFound = true;
00117
00118 nameIter_ = longNames_.find(arguments_[i]);
00119 if (nameIter_ != longNames_.end())
00120 key = nameIter_->second;
00121 else
00122 key = arguments_[i];
00123
00124
00125 biter_ = boolOptions_.find(key);
00126 if (biter_ != boolOptions_.end())
00127 {
00128 boolOptions_[key] = true;
00129 notFound = false;
00130 }
00131
00132 niter_ = naturalOptions_.find(key);
00133 if (niter_ != naturalOptions_.end())
00134 {
00135 if (i < argc -1)
00136 naturalOptions_[key] = atoi((arguments_[i+1]).c_str());
00137 ++i;
00138 notFound = false;
00139 }
00140
00141 riter_ = realOptions_.find(key);
00142 if (riter_ != realOptions_.end())
00143 {
00144 if (i < argc -1)
00145 realOptions_[key] = (mrs_real)atof((arguments_[i+1]).c_str());
00146 ++i;
00147 notFound = false;
00148 }
00149
00150 siter_ = stringOptions_.find(key);
00151 if (siter_ != stringOptions_.end())
00152 {
00153 if (i < argc -1)
00154 stringOptions_[key] = (arguments_[i+1]).c_str();
00155 ++i;
00156 notFound = false;
00157 }
00158
00159 if (notFound)
00160 cout << "Option " << key << " was not found. It is ignored " << endl;
00161 }
00162 else
00163 remaining_.push_back(argument);
00164 }
00165 }
00166
00167 bool
00168 CommandLineOptions::getBoolOption(mrs_string lname)
00169 {
00170 return boolOptions_["--" + lname];
00171 }
00172
00173 mrs_natural
00174 CommandLineOptions::getNaturalOption(mrs_string lname)
00175 {
00176 return naturalOptions_["--" + lname];
00177 }
00178
00179 mrs_real
00180 CommandLineOptions::getRealOption(mrs_string lname)
00181 {
00182 return realOptions_["--" + lname];
00183 }
00184
00185 mrs_string
00186 CommandLineOptions::getStringOption(mrs_string lname)
00187 {
00188 return stringOptions_["--" + lname];
00189 }
00190
00191 vector<mrs_string>
00192 CommandLineOptions::getRemaining()
00193 {
00194 return remaining_;
00195 }