/*Header file of the PStep_CG1PreprocessedPricingInfo class

Implementation can be found in PStep_CG1PreprocessedPricingInfo.cpp

This class represents preprocessing information on a pricing problem for ColumnGenerator1.

*/
/*
#ifndef _PSTEP_CG1PREPROCESSEDPRICINGINFO_H
#define _PSTEP_CG1PREPROCESSEDPRICINGINFO_H

#include <iostream>
#include <forward_list>
#include <vector>
#include "PStep_Arc.h"

//Class used to represent preprocessing information on a pricing problem for ColumnGenerator1 and derived classes.
class PStep_CG1PreprocessedPricingInfo{
public:
	//The locations that act as source and sink.
	//The remaining info is valid both when LocationOne is source or LocationTwo is source.
	int LocationOne;
	int LocationTwo;

	//Capacity
	double Capacity;

	//Maximum number of arcs on a p-step
	//This is usually p but for depot-customer p-steps this could be less.
	int MaxNumberOfArcs;

	//Number of customers
	int NumberOfCustomers;

	//Array indicating whether a location can be reached.
	//Reachable[i]=true indicates customer i can be reached, i=0 is the first customer.
	//Note that reachability of LocationOne and LocationTwo should be set to true,
	//unless LocationTwo is the depot, in which case Reachability of LocationOne is set to false.
	bool *Reachable;

	//Array indicating whether an arc is relevant
	bool **ArcIsRelevant;

	//The available arcs in the pricing problem.
	//It is intended to contain only the relevant and feasible arcs.
	//Arcs[i][j] is the j'th out arc of location i, i=0 is the depot.
	std::forward_list<std::forward_list<PStep_Arc>> CurrentArcs;

	///////////////////////////////////////////////////////////////////
	//UGLY HACK: BE CAREFUL, SELECTEDARCS DOES NOT COPY
	///////////////////////////////////////////////////////////////////
	//A pointer to the selected arcs for the pricing problem,
	//it might for instance point to CurrentArcs or SelectedArcs
	std::forward_list<std::forward_list<PStep_Arc>>* SelectedArcs;

	//A limited selection of the available arcs in the pricing problem.
	//It can be used by column generator 3.
	//It is intended to contain only the relevant and feasible arcs.
	//Arcs[i][j] is the j'th out arc of location i, i=0 is the depot.
	std::forward_list<std::forward_list<PStep_Arc>> CurrentLimitedArcs;
	///////////////////////////////////////////////////////////////////

	//Current neighborhood information used for decremental state space relaxation:
	//Neighbourhoods.at(i).at(j) represents neighbour j of customer i (0 is the first customer).
	std::vector<std::vector<int>> CurrentDSSRNeighbourhoods;
	//Not in neighborhood indicates whether a customer is not in the neighborhoud.
	//CurrentDSSRNotInNeighbourhood.at(i).at(j)=true if customer j is not a neighbor of customer i (0 is the first customer).
	std::vector<std::vector<bool>> CurrentDSSRNotInNeighbourhood;

	//Constructor functions:
	//------------------------------------------------------------------------------------

	//Default Constructor
	PStep_CG1PreprocessedPricingInfo()
		:LocationOne(0), LocationTwo(0), Capacity(0), MaxNumberOfArcs(0), NumberOfCustomers(0), Reachable(0), ArcIsRelevant(0), SelectedArcs(0)
	{};

	//Copy Constructor
	PStep_CG1PreprocessedPricingInfo(const PStep_CG1PreprocessedPricingInfo &OriginalPStep_CG1PreprocessedPricingInfo);

	//Operator functions:
	//------------------------------------------------------------------------------------

	//Assignment operator
	PStep_CG1PreprocessedPricingInfo& operator=(const PStep_CG1PreprocessedPricingInfo& OriginaPStep_CG1PreprocessedPricingInfo);

	//Print functions
	//------------------------------------------------------------------------------------

	//Print info
	void PrintInfo();

	//Arc setting functions:
	//------------------------------------------------------------------------------------

	//Filter all relevant arcs from the input Arcs, that is, filter out the 
	//irrelevant arcs. The resulting relevant arcs are copied and stored in RelevantArcs.
	void FilterRelevantArcs(std::forward_list<std::forward_list<PStep_Arc>>& Arcs, std::forward_list<std::forward_list<PStep_Arc>>& RelevantArcs);

	//Neighborhood functions:
	//------------------------------------------------------------------------------------

	//Reset DSSR neighbourhoods
	void ResetDSSRNeighbourhoods();

	//Destructor functions
	//------------------------------------------------------------------------------------

	//Default destructor
	~PStep_CG1PreprocessedPricingInfo();

};

#endif*/