#ifndef AREAMODEL_H_
#define AREAMODEL_H_

#include "quantities/WiringPath.h"
#include "quantities/Name.h"
#include "quantities/onchipcommunication/LinkParameter.h"
#include "quantities/onchipcommunication/Interface.h"
#include "quantities/onchipcommunication/NodeParameter.h"
#include "quantities/onchipcommunication/Ports.h"


namespace cosi
{

namespace models
{

namespace onchipcommunication
{

class LinkAreaModel
{
public:
	LinkAreaModel();
	virtual ~LinkAreaModel();

	//LINKS

	virtual double GetDeviceArea(Name pName , cosi::quantity::onchipcommunication::Interface pSource ,
			               cosi::quantity::onchipcommunication::Interface pDest ,
			               WiringPath pPath ,
			               cosi::quantity::onchipcommunication::LinkParameter pParam) = 0 ;
	virtual double GetWiringArea(Name pName , cosi::quantity::onchipcommunication::Interface pSource ,
				               cosi::quantity::onchipcommunication::Interface pDest ,
				               WiringPath pPath ,
				               cosi::quantity::onchipcommunication::LinkParameter pParam) = 0 ;
};

class NodeAreaModel
{
public:
	NodeAreaModel();
	virtual ~NodeAreaModel();

	//NODES
	virtual double GetArea(Name pName , cosi::quantity::onchipcommunication::Ports pPorts ,
			               cosi::quantity::onchipcommunication::NodeParameter pParam) = 0 ;

};



}

}

}

#endif /*AREAMODEL_H_*/
