#include "meanValueCommand.h"

MeanValueCommand::MeanValueCommand() : SteereoCommand (false, "meanValueCommand")
{
}

MeanValueCommand::~MeanValueCommand()
{
}


ReturnType MeanValueCommand::execute ()
{
  double* data = (double*) (this->getData());
  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();
  }
  std::cout << "** Parameters set are " << startIndex << " and " << endIndex << std::endl;
}

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

COMMAND_AUTOREG(MeanValueCommand)