00001 #include "argumentshelper.h"
00002
00003 namespace n2nc {
00004 namespace utils {
00005 namespace args {
00007 ArgumentsHelper::ArgumentsHelper(char** argv, int argc ){
00008
00009
00010 this->m_argv = argv ;
00011
00012 if (argc < 2) return ;
00013
00014
00015 for (int i=1; i < argc ; i++){
00016 if ( argv[i][0] == '-' ){
00017 if (i+1 < argc && !( argv[i+1][0] == '-') ){
00018
00019 m_arguments.push_back( Argument(argv[i],argv[i+1]) );
00020 i++;
00021 }else{
00022
00023 m_arguments.push_back(Argument(argv[i], "" ));
00024 }
00025 }else{
00026 this->m_freeargs.push_back(argv[i]);
00027 }
00028
00029 }
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057 }
00058
00059 ArgumentsHelper::~ArgumentsHelper(){}
00060
00061 bool ArgumentsHelper::validate() {
00062 bool isallok = true ;
00063
00064 for (int i=0; i < m_arguments.size(); ){
00065 if (! m_arguments[i].validate(m_validargs)){
00066 vector<Argument>::iterator it = m_arguments.begin() ;
00067 m_arguments.erase(it + i);
00068 isallok = isallok && false ;
00069 }
00070 else{
00071 i++ ;
00072 }
00073 }
00074
00075 for (int i=0; i < m_arguments.size(); i++){
00076 isallok = isallok && m_arguments[i].checkForDependecies(m_arguments);
00077 }
00078
00079 for (int i=0; i < m_arguments.size(); i++){
00080 isallok = isallok && m_arguments[i].checkForConflicts(m_arguments);
00081 }
00082
00083 return isallok;
00084 }
00085
00086 int ArgumentsHelper::size(){
00087 return m_arguments.size();
00088 }
00089
00090 Argument* ArgumentsHelper::getArgumentByName(string name) throw( ){
00091 for (int i=0; i < m_arguments.size(); i++){
00092 if ( name == m_arguments[i].m_name ){
00093 return &m_arguments[i];
00094 }
00095 }
00096 return NULL ;
00097
00098 }
00099
00100 Argument* ArgumentsHelper::operator[](string name) throw( ){
00101 return this->getArgumentByName(name);
00102 }
00103
00104 string ArgumentsHelper::toString(){
00105 string retval = "" ;
00106 for (int i=0; i < m_arguments.size(); i++){
00107 retval += m_arguments[i].toString() + "\n" ;
00108 }
00109 return retval ;
00110 }
00111
00112 string ArgumentsHelper::dumpAllValid(){
00113 string retval = "" ;
00114 for (int i=0; i < m_validargs.size() ; i++){
00115 retval += m_validargs[i].toString() + "\n" ;
00116 }
00117 return retval ;
00118 }
00119
00120 ValidArgument* ArgumentsHelper::addValid(string name){
00121 this->m_validargs.push_back(ValidArgument(name));
00122 return &this->m_validargs.back();
00123 }
00124
00125 string ArgumentsHelper::getFreeArg(int pos){
00126 if (pos < m_freeargs.size())
00127 return this->m_freeargs[pos] ;
00128 else
00129 return "" ;
00130 }
00131
00132
00133
00134
00135 }
00136 }
00137 }
00138
00139
00140
00141
00142
00143
00144
00145