#include "meanValueCommand.h"

//                                                             1.
MeanValueCommand::MeanValueCommand() : SteereoCommand (false, "meanValueCommand")
{
}

MeanValueCommand::~MeanValueCommand()
{
}

// 2.
ReturnType MeanValueCommand::execute ()
{
  double* data = (double*) ((SimulationData*) this->getData())->getA();
  double sum = 0;
  int valueNumber = endIndex - startIndex + 1;
  for (int i = startIndex; i <= endIndex; i++)
  {
    sum += data[i];
  }
  if (valueNumber > 0)
  {
    sum /= valueNumber;
  }
  this->getCommunicator()->sendDouble(this->getConnection()->getDataConnection(), sum);
  return EXECUTED;
}

void MeanValueCommand::setParameters (std::list<std::string> params)
{
  startIndex = 0;
  endIndex = this->getDataSize() - 1;
  int paramNum = params.size();
  if (paramNum >= 1)
  {
    startIndex = atoi (params.front().c_str());
    params.pop_front();
  }
  if (paramNum >= 2)
  {
    endIndex = atoi (params.front().c_str());
    params.pop_front();
  }
}

// 3.
SteereoCommand* MeanValueCommand::generateNewInstance ()
{
  return new MeanValueCommand;
}