#include <config.h>
#include <functions/Max.h>
#include <sarray/SArray.h>

#include <algorithm>

using std::vector;
using std::max_element;
using std::max;

Max::Max ()
  : Function ("max", 0)
{
}

void
Max::evaluate (SArray &value, vector < SArray const *>const &args) const
{
  double ans;
  for (unsigned int i = 0; i < args.size(); ++i) {
    double const *argi = args[i]->value ();
    long len = args[i]->length ();
    double maxi = *max_element(argi, argi + len);
    if (i == 0) {
      ans = maxi;
    }
    else {
      ans = max(ans, maxi);
    }
  }
  value.setValue(&ans, 1);
}

bool Max::checkParameterDim (vector <SArray const *> const &args) const
{
  return true;
}

Index Max::dim (vector <SArray const *> const &args) const
{
  return Index(1);
}

bool Max::isDiscreteValued(std::vector<SArray const *> const &args) const
{
  return allDiscrete(args);
}


syntax highlighted by Code2HTML, v. 0.9.1