/*****************************************************************//**
 * \file   CutStrategy.h
 * \brief  Reperesents the interface of cut strategy with a virtual pure algorithm to override by inherent classes depending on the choosed cut strategy.
 *
 * \author talmefta
 * \date   May 2022
 *********************************************************************/
#ifndef CUTSTRATEGY_H
#define CUTSTRATEGY_H

#include "Header.h"
#include "Node.h"

 /**
  * \class CutStrategy
  * \brief Interface of Strategy design pattern dealing with the cut strategy.
  */

template<class RestrictedMasterProblem, class PricingSubProblem, class ColumnGeneration, class ConstraintType>
class CutStrategy {

public:
    /**
     * Virtual destructor.
     *
     */
    virtual ~CutStrategy() {}

    /**
     * Tries to find cuts to add to the node. Stores the new cuts if any in the node's cut_constraints. 
     * \details This method has to be implemented by inherent classes to define how to cut the node.
     *
     * \param node: Node<class RestrictedMasterProblem, class PricingSubProblem, class ColumnGeneration>&
     */
    virtual bool cut(Node<RestrictedMasterProblem, PricingSubProblem, ColumnGeneration, ConstraintType>& node) = 0;
};

#endif //CUTSTRATEGY_H


