- Timestamp:
- Aug 27, 2010, 7:29:49 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/consolecommands3/src/libraries/core/command/CommandEvaluation.cc
r7228 r7230 49 49 this->bPossibleArgumentsRetrieved_ = false; 50 50 this->possibleArguments_.clear(); 51 52 this->tokens_.split(command, " ", SubString::WhiteSpaces, false, '\\', false, '"', false, '(', ')', false, '\0'); 51 this->bEvaluatedParams_ = false; 52 this->bTriedToEvaluatedParams_ = false; 53 this->numberOfEvaluatedParams_ = 0; 54 55 this->tokens_.split(command, " ", SubString::WhiteSpaces, false, '\\', true, '"', true, '(', ')', true, '\0'); 53 56 } 54 57 … … 78 81 } 79 82 80 int CommandEvaluation::execute() const83 int CommandEvaluation::execute() 81 84 { 82 85 int error; … … 85 88 } 86 89 87 MultiType CommandEvaluation::query(int* error) const90 MultiType CommandEvaluation::query(int* error) 88 91 { 89 92 if (error) … … 103 106 104 107 if (this->execCommand_ && this->execCommand_->isActive() && this->execCommand_->hasAccess()) 105 return this->execCommand_->getExecutor()->parse(this->tokens_.subSet(this->execArgumentsOffset_).join(), error, " ", false); 108 { 109 if (!this->bTriedToEvaluatedParams_) 110 this->evaluateParams(false); 111 112 if (this->bEvaluatedParams_) 113 { 114 COUT(0) << "call evaluated" << std::endl; 115 COUT(6) << "CE_execute (evaluation): " << this->execCommand_->getName() << " with " << this->numberOfEvaluatedParams_ << " params: " << this->param_[0] << ' ' << this->param_[1] << ' ' << this->param_[2] << ' ' << this->param_[3] << ' ' << this->param_[4] << std::endl; 116 switch (this->numberOfEvaluatedParams_) 117 { 118 case 0: return (*this->execCommand_->getExecutor())(); 119 case 1: return (*this->execCommand_->getExecutor())(this->param_[0]); 120 case 2: return (*this->execCommand_->getExecutor())(this->param_[0], this->param_[1]); 121 case 3: return (*this->execCommand_->getExecutor())(this->param_[0], this->param_[1], this->param_[2]); 122 case 4: return (*this->execCommand_->getExecutor())(this->param_[0], this->param_[1], this->param_[2], this->param_[3]); 123 case 5: 124 default: return (*this->execCommand_->getExecutor())(this->param_[0], this->param_[1], this->param_[2], this->param_[3], this->param_[4]); 125 } 126 } 127 else 128 { 129 COUT(0) << "call parsed" << std::endl; 130 COUT(5) << "CE_execute: " << this->string_ << "\n"; 131 return this->execCommand_->getExecutor()->parse(this->tokens_.subSet(this->execArgumentsOffset_), error, " "); 132 } 133 } 106 134 else 107 135 return MT_Type::Null; 108 136 } 109 137 110 std::string CommandEvaluation::complete() const 138 int CommandEvaluation::evaluateParams(bool bPrintError) 139 { 140 COUT(0) << "evaluate params" << std::endl; 141 this->bTriedToEvaluatedParams_ = true; 142 143 if (!this->execCommand_) 144 { 145 if (bPrintError) 146 COUT(1) << "Error: Can't evaluate params, no console command assigned." << std::endl; 147 return CommandExecutor::Error; 148 } 149 150 int error; 151 this->numberOfEvaluatedParams_ = this->execCommand_->getExecutor()->evaluateParams(this->tokens_.subSet(this->execArgumentsOffset_), this->param_, &error, " "); 152 if (!error) 153 this->bEvaluatedParams_ = true; 154 else if (bPrintError) 155 COUT(1) << "Error: Can't evaluate params, not enough arguments given." << std::endl; 156 157 return error; 158 } 159 160 void CommandEvaluation::setEvaluatedParameter(unsigned int index, const MultiType& param) 161 { 162 if (index < MAX_FUNCTOR_ARGUMENTS) 163 this->param_[index] = param; 164 } 165 166 MultiType CommandEvaluation::getEvaluatedParameter(unsigned int index) const 167 { 168 if (index < MAX_FUNCTOR_ARGUMENTS) 169 return this->param_[index]; 170 171 return MT_Type::Null; 172 } 173 174 std::string CommandEvaluation::complete() 111 175 { 112 176 if (!this->hintCommand_ || !this->hintCommand_->isActive()) … … 122 186 else 123 187 { 124 std::string output ;125 for (unsigned int i = 0; i < this->getNumberOfArguments() - 1; ++i)126 output += this->getToken(i) + ' ';188 std::string output = this->string_.substr(0, this->string_.find_last_of(' ') + 1); 189 // for (unsigned int i = 0; i < this->getNumberOfArguments() - 1; ++i) 190 // output += this->getToken(i) + ' '; 127 191 128 192 output += CommandEvaluation::getCommonBegin(this->possibleArguments_); … … 131 195 } 132 196 133 std::string CommandEvaluation::hint() const197 std::string CommandEvaluation::hint() 134 198 { 135 199 if (!this->hintCommand_ || !this->hintCommand_->isActive()) … … 165 229 } 166 230 167 void CommandEvaluation::retrievePossibleArguments() const231 void CommandEvaluation::retrievePossibleArguments() 168 232 { 169 233 this->bPossibleArgumentsRetrieved_ = true;
Note: See TracChangeset
for help on using the changeset viewer.