#ifndef LIBRARIES_WIREDBAS_COMMON_NODE_H_
#define LIBRARIES_WIREDBAS_COMMON_NODE_H_

#include "InstantiableNode.h"
#include "quantities/CommoditySet.h"
#include "models/onchipcommunication/common/AreaModel.h"
#include "models/onchipcommunication/common/PowerModel.h"


namespace cosi {

namespace library {

namespace onchipcommunication {

class Node : public cosi::library::onchipcommunication::InstantiableNode {
protected:
	cosi::models::onchipcommunication::NodeAreaModel* mAreaModel;

	cosi::models::onchipcommunication::NodePowerModel* mPowerModel;

public:
	Node();
	virtual ~Node();

	void SetAreaModel(cosi::models::onchipcommunication::NodeAreaModel* pModel);

	void
			SetPowerModel(
					cosi::models::onchipcommunication::NodePowerModel* pModel);

	//COST METRICS
	virtual double GetArea() = 0 ;
	virtual double GetStaticPower() = 0  ;
	virtual double GetDynamicPower(
			std::map< std::string , CommoditySet > pCommodities) = 0 ;

	virtual std::string GetComponentName() = 0 ;
	virtual std::string GetComponentType() = 0 ;


};

}

}

}

#endif /*NODE_H_*/
