// Copyright (C) 2004, International Business Machines
// Corporation and others.  All Rights Reserved. 

#if defined(_MSC_VER) 
#pragma warning(disable:4786)
#pragma warning(disable:4503)
#endif

#include "MyEventHandler.hpp"


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

//-------------------------------------------------------------------
// Default Constructor 
//-------------------------------------------------------------------
MyEventHandler::MyEventHandler () 
  : ClpEventHandler()
{
}

//-------------------------------------------------------------------
// Copy constructor 
//-------------------------------------------------------------------
MyEventHandler::MyEventHandler (const MyEventHandler & rhs) 
: ClpEventHandler(rhs)
{  
}

// Constructor with pointer to model
MyEventHandler::MyEventHandler(ClpSimplex * model)
  : ClpEventHandler(model)
{
}

//-------------------------------------------------------------------
// Destructor 
//-------------------------------------------------------------------
MyEventHandler::~MyEventHandler ()
{
}

//----------------------------------------------------------------
// Assignment operator 
//-------------------------------------------------------------------
MyEventHandler &
MyEventHandler::operator=(const MyEventHandler& rhs)
{
  if (this != &rhs) {
    ClpEventHandler::operator=(rhs);
  }
  return *this;
}
//-------------------------------------------------------------------
// Clone
//-------------------------------------------------------------------
ClpEventHandler * MyEventHandler::clone() const
{
  return new MyEventHandler(*this);
}

int 
MyEventHandler::event(Event whichEvent)
{
  if (whichEvent==endOfValuesPass)
    return 0; // say optimal
  else
    return -1; // carry on

#if 0
  // This is how one can get some progress information at the end of each iteration.
  if (whichEvent==endOfIteration) {
    int numIter = model_->getIterationCount();
    double sumDualInfeas = model_->sumDualInfeasibilities();
    double sumPrimalInfeas = model_->sumPrimalInfeasibilities();
    double obj = model_->getObjValue();
  }

  // This is how one can tell CLP to stop now.
  // The value of cancelAsap needs to come from the application using CLP.
  if ( cancelAsap ) return 5;
  else return -1;
#endif

  
}


syntax highlighted by Code2HTML, v. 0.9.1