Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Aug 27, 2010, 7:29:49 PM (14 years ago)
Author:
landauf
Message:

re-implemented parameter evaluation in CommandEvaluation and simplified parse() and evaluateParams() in Executor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/consolecommands3/src/libraries/core/command/CommandEvaluation.cc

    r7228 r7230  
    4949        this->bPossibleArgumentsRetrieved_ = false;
    5050        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');
    5356    }
    5457
     
    7881    }
    7982
    80     int CommandEvaluation::execute() const
     83    int CommandEvaluation::execute()
    8184    {
    8285        int error;
     
    8588    }
    8689
    87     MultiType CommandEvaluation::query(int* error) const
     90    MultiType CommandEvaluation::query(int* error)
    8891    {
    8992        if (error)
     
    103106
    104107        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        }
    106134        else
    107135            return MT_Type::Null;
    108136    }
    109137
    110     std::string CommandEvaluation::complete() const
     138    int CommandEvaluation::evaluateParams(bool bPrintError)
     139    {
     140COUT(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()
    111175    {
    112176        if (!this->hintCommand_ || !this->hintCommand_->isActive())
     
    122186        else
    123187        {
    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) + ' ';
    127191
    128192            output += CommandEvaluation::getCommonBegin(this->possibleArguments_);
     
    131195    }
    132196
    133     std::string CommandEvaluation::hint() const
     197    std::string CommandEvaluation::hint()
    134198    {
    135199        if (!this->hintCommand_ || !this->hintCommand_->isActive())
     
    165229    }
    166230
    167     void CommandEvaluation::retrievePossibleArguments() const
     231    void CommandEvaluation::retrievePossibleArguments()
    168232    {
    169233        this->bPossibleArgumentsRetrieved_ = true;
Note: See TracChangeset for help on using the changeset viewer.