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

#include <algorithm>
#include <stdexcept>

using std::vector;
using std::sort;
using std::logic_error;

Sort::Sort ()
  : Function ("sort", 1)
{
}

void Sort::evaluate (SArray & value, vector <SArray const *> const &args) const
{
  double const *arg1 = args[0]->value ();
  long len = args[0]->length ();

  double *copy = new double[len];
  for (long i = 0; i < len; ++i) {
    copy[i] = arg1[i];
  }
  sort(copy, copy + len);

  value.setValue(copy, len);
  delete [] copy;
}

Index Sort::dim (vector <SArray const *> const &args) const
{
  return args[0]->dim(true);
}

bool Sort::checkParameterDim (vector<SArray const *> const &args) const
{
  return args[0]->ndim(true) == 1;
}

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


syntax highlighted by Code2HTML, v. 0.9.1