#ifndef ETHERNETLINK_H_
#define ETHERNETLINK_H_

#include <string>
#include "networks/wiredbas/WiredBasPlatformInstance.h"
#include "networks/wiredbas/WiredBasImplementation.h"
#include "quantities/WiringPath.h"
#include "quantities/RealLatency.h"
#include "quantities/Name.h"
#include "quantities/Ports.h"
#include "libraries/wiredbas/common/Link.h"
#include "models/wiredbas/link/EthernetLinkDelay.h"
#include "models/wiredbas/link/EthernetLinkCost.h"

namespace cosi {

namespace library {

namespace wiredbas {

class EthernetLink : public Link {

	cosi::models::wiredbas::EthernetLinkDelay* mDelayModel;

	cosi::models::wiredbas::EthernetLinkCost* mCostModel;
public:
	
	EthernetLink(double Speed);
	
	virtual ~EthernetLink();
	
	RealDelay GetDelay(int Length , WiringPath pPath);
	
	double GetDelayValue(int Length , WiringPath pPath);

	double GetCost(WiringPath pPath);

	cosi::commstruct::wiredbas::PlatformInstance* GetPlatformInstance(int U,
			std::string pPortU, int V, std::string pPortV);

	cosi::commstruct::wiredbas::Implementation * GetImplementationInstance(
			int U, std::string pPortU, int V, std::string pPortV,
			WiringPath pPath);

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

}

}

}

#endif /*ETHERNETLINK_H_*/
