/* $Id$ */
// Copyright (C) 2007, International Business Machines
// Corporation and others.  All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).

#include "CoinPragma.hpp"
#include "ClpSimplex.hpp"
#include "ClpConstraint.hpp"

//#############################################################################
// Constructors / Destructor / Assignment
//#############################################################################

//-------------------------------------------------------------------
// Default Constructor
//-------------------------------------------------------------------
ClpConstraint::ClpConstraint()
  : lastGradient_(NULL)
  , functionValue_(0.0)
  , offset_(0.0)
  , type_(-1)
  , rowNumber_(-1)
{
}

//-------------------------------------------------------------------
// Copy constructor
//-------------------------------------------------------------------
ClpConstraint::ClpConstraint(const ClpConstraint &source)
  : lastGradient_(NULL)
  , functionValue_(source.functionValue_)
  , offset_(source.offset_)
  , type_(source.type_)
  , rowNumber_(source.rowNumber_)
{
}

//-------------------------------------------------------------------
// Destructor
//-------------------------------------------------------------------
ClpConstraint::~ClpConstraint()
{
  delete[] lastGradient_;
}

//----------------------------------------------------------------
// Assignment operator
//-------------------------------------------------------------------
ClpConstraint &
ClpConstraint::operator=(const ClpConstraint &rhs)
{
  if (this != &rhs) {
    functionValue_ = rhs.functionValue_;
    offset_ = rhs.offset_;
    type_ = rhs.type_;
    rowNumber_ = rhs.rowNumber_;
    delete[] lastGradient_;
    lastGradient_ = NULL;
  }
  return *this;
}
// Constraint function value
double
ClpConstraint::functionValue(const ClpSimplex *model,
  const double *solution,
  bool useScaling,
  bool refresh) const
{
  double offset;
  double value;
  int n = model->numberColumns();
  double *grad = new double[n];
  gradient(model, solution, grad, value, offset, useScaling, refresh);
  delete[] grad;
  return value;
}

/* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
*/
