#ifndef ARCNETNODE_H_
#define ARCNETNODE_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/ArcnetNodeCost.h"
#include <string>

namespace cosi {

namespace library {

namespace wiredbas {

class ArcnetNode : public cosi::library::wiredbas::Node {

protected:
	cosi::models::wiredbas::ArcnetNodeCost* mCostModel;

public:
	ArcnetNode();
	virtual ~ArcnetNode();

	void SetCostModel(cosi::models::wiredbas::ArcnetNodeCost* pCostModel);

	virtual RealDelay GetDelay(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			Vertex Dest) = 0 ;

	virtual double GetDelayValue(Vertex NodeId,
			cosi::commstruct::wiredbas::Implementation* pI, Vertex Src,
			Vertex Dest)= 0;

	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 double GetCost() = 0 ;

};

}
}
}

#endif /*ARCNETNODE_H_*/
