#ifndef ETHERNETNETWORKDELAY_H_
#define ETHERNETNETWORKDELAY_H_

#include "networks/wiredbas/WiredBasImplementation.h"
#include "quantities/RealDelay.h"
#include "models/wiredbas/common/NetworkDelay.h"
#include "models/wiredbas/common/LinkDelayModel.h"
#include "models/wiredbas/common/NodeDelay.h"
#include "models/wiredbas/link/EthernetLinkDelay.h"
#include "models/wiredbas/node/EthernetSwitchDelay.h"
#include "float.h"

namespace cosi {

namespace models {

namespace wiredbas {

class EthernetNetworkDelay : public NetworkDelay {

	cosi::models::wiredbas::LinkDelayModel* mLinkDelay;
	cosi::models::wiredbas::NodeDelay* mNodeDelay;

	double mSpeed;

public:

	EthernetNetworkDelay(double pSpeed);

	virtual ~EthernetNetworkDelay();

	RealDelay Get(cosi::commstruct::wiredbas::Implementation pC, Vertex Src,
			std::string  Dest,Vertex SrcId,Vertex DestId);

	RealDelay Get(cosi::commstruct::wiredbas::Implementation* pC, Vertex Src,
			std::string  Dest,Vertex SrcId,Vertex DestId);

	double GetValue(cosi::commstruct::wiredbas::Implementation pC, Vertex Src,
			std::string Dest,Vertex SrcId,Vertex DestId);

	double GetValue(cosi::commstruct::wiredbas::Implementation* pC, Vertex Src,
			std::string Dest,Vertex SrcId,Vertex DestId);

};

}

}

}

#endif /*ETHERNETNETWORKDELAY_H_*/
