#ifndef ETHERNETSWITCH_H_
#define ETHERNETSWITCH_H_

#include <sstream>
#include "EthernetNode.h"
#include "models/wiredbas/node/EthernetSwitchDelay.h"

namespace cosi {

namespace library {

namespace wiredbas {

class EthernetSwitch : public EthernetNode {
	cosi::models::wiredbas::EthernetSwitchDelay* mDelayModel;
public:
	EthernetSwitch(int Nin, int Nout, double Speed);
	virtual ~EthernetSwitch();
	cosi::commstruct::wiredbas::PlatformInstance* GetPlatformInstance(int V,
			Position pP);

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

	RealDelay GetDelay(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			std::string Dest);
	double GetDelayValue(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			std::string Dest);
	double GetCost();

	 RealDelay GetDelay(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			Vertex Dest) {return RealDelay(0);};
	 double GetDelayValue(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			Vertex Dest) {return 0;};

	std::string ComponentName;
	std::string ComponentType;
};

}

}

}

#endif /*ETHERNETSWITCH_H_*/
