#ifndef ROUTER_H_
#define ROUTER_H_

#include <string>
#include <sstream>
#include "libraries/onchipcommunication/common/Node.h"
#include "quantities/onchipcommunication/Interface.h"
#include "quantities/onchipcommunication/NodeParameter.h"
#include "networks/onchipcommunication/PlatformInstance.h"
#include "networks/onchipcommunication/Implementation.h"
#include "models/onchipcommunication/common/AreaModel.h"
#include "models/onchipcommunication/common/PowerModel.h"

namespace cosi {

namespace library {

namespace onchipcommunication {

class Router : public cosi::library::onchipcommunication::Node {

	cosi::quantity::onchipcommunication::NodeParameter* mParam;

public:

	Router(int Nin, int Nout, int Vch, int Length, int Width, double Fclk,
			cosi::library::onchipcommunication::Technology pTech);

	virtual ~Router();

	cosi::commstruct::onchipcommunication::PlatformInstance
			* GetPlatformInstance(int V, Position pP);

	cosi::commstruct::onchipcommunication::Implementation
			* GetImplementationInstance(int V, Position pP, TransferTable pT);

	double GetArea();

	double GetStaticPower();

	double GetDynamicPower(std::map< std::string , CommoditySet > pCommodities);

	std::string ComponentName;
	static std::string ComponentType;

	std::string GetComponentName();
	std::string GetComponentType();

};

}

}

}

#endif /*ROUTER_H_*/
