#include "gate.h"


#ifndef _Mapper_
#define _Mapper_

class Mapper {
private:
	std::list<Gate*>& inputs;			//vstupy
	std::list<Gate*>& outputs;			//vystupy
	std::list<Gate*>& inner_nodes;		//vnitrni uzly

	bool inputs_k_bounded(Gate* g);				//vrati true, jestli vstupy hradla g jsou K-ohranicene
	void dmig (Gate *g, unsigned int K);		//provede dekompozici hradla g na K-vstupove
public:
	Mapper (std::list<Gate*>& _inputs,std::list<Gate*>& _outputs, std::list<Gate*>& _inner_nodes):
	  inputs(_inputs),outputs(_outputs),inner_nodes(_inner_nodes){};	//konstruktor

	void transform_to_K_bounded(const unsigned int K);	//provede dekompozici celoho obvodu na K-ohranicenou sit
	void compute_cuts(const unsigned int K);			//spocita rezy (mnoziny) vsech hradel v siti
	void make_luts(std::list<Lut*>& luts);				//vytvori pravdivostni tabulky LUTu pomoci rezu (mnozin)
};

#endif