#ifndef ETHERNETNODE_H_
#define ETHERNETNODE_H_

#include "networks/wiredbas/WiredBasPlatformInstance.h"
#include "networks/wiredbas/WiredBasImplementation.h"
#include "quantities/Position.h"
#include "quantities/Bandwidth.h"
#include "quantities/Ports.h"
#include "quantities/RealDelay.h"
#include "libraries/wiredbas/common/Node.h"
#include "models/wiredbas/node/EthernetNodeCost.h"
#include <string>

namespace cosi {

namespace library {

namespace wiredbas {

class EthernetNode : public cosi::library::wiredbas::Node {
protected:
	cosi::models::wiredbas::EthernetNodeCost* mCostModel;
public:
	EthernetNode();
	virtual ~EthernetNode();
	void SetCostModel(cosi::models::wiredbas::EthernetNodeCost* pCostModel);
	virtual cosi::commstruct::wiredbas::PlatformInstance* GetPlatformInstance(
			int V, Position pP) = 0;
	virtual cosi::commstruct::wiredbas::Implementation
			* GetImplementationInstance(int V, Position pP, ThreadSet pThreads,
					TransferTable pT) = 0;
	virtual RealDelay GetDelay(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			std::string Dest) = 0;
	virtual double GetDelayValue(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			std::string Dest) = 0;
	virtual double GetCost() =0 ;

};

}

}

}

#endif /*ETHERNETNODE_H_*/
