/*****************************************************************//**
 * \file   RmpPspMediator.h
 * \brief  The Mediator interface declares a method used by components (RestrictedMasterProblem and PricingSubProblem) to notify the
 * mediator about various events (When solving the reticted master problem, we have new dual variables to communicate to the pricing sub problem, and in the other way, when the algorithm of pricing solves the pricing problem,
 *  the latter communicates the columns to the restricted master problem that has to insert them to nurture the RMP. The Mediator may react to these events and
 * pass the execution to other components.
 * 
 * \author talmefta
 * \date   June 2022
 *********************************************************************/
#ifndef RMPPSPMEDIATOR_H
#define RMPPSPMEDIATOR_H

#include "Header.h"

class BaseComponent; /**<  The Base Component provides the basic functionality of storing a mediator's instance inside component objects. RMP and PSP will inheret from BaseComponent */

/**
 * \class RmpPspMediator
 *  The Mediator interface design pattern that organizes the interaction between RMP and PSP via the method notify.
 */
class RmpPspMediator {

public:
	/**
	 * The main function that coordinates the behavior of BaseComponent objects. The sender communicates some data that the other components may need as an input to behave
	 * 
	 * \param sender: BaseComponent*
	 * \param event: const string&
	 */
	virtual void notify(BaseComponent* sender, const string& event) const = 0;
};

#endif //RMPPSPMEDIATOR_H