#ifndef INSTANTIABLELINK_H_
#define INSTANTIABLELINK_H_

#include <list>
#include "libraries/onchipcommunication/common/_Link.h"
#include "networks/onchipcommunication/PlatformInstance.h"
#include "networks/onchipcommunication/Implementation.h"
#include "quantities/WiringPath.h"
#include "quantities/Position.h"
#include "quantities/onchipcommunication/LinkParameter.h"


namespace cosi
{

namespace library
{

namespace onchipcommunication
{

class InstantiableLink : public _Link
{
public:

	InstantiableLink(){};

	virtual ~InstantiableLink(){};

	virtual cosi::commstruct::onchipcommunication::PlatformInstance* GetPlatformInstance(int U,std::string pPortsU, int V, std::string pPortV) =0;

	virtual cosi::commstruct::onchipcommunication::Implementation* GetImplementationInstance( int U,std::string pPortsU, int V,std::string pPortV,WiringPath pPath) =0;

	virtual cosi::commstruct::onchipcommunication::Implementation* GetImplementationInstance( int U,std::string pPortsU, int V,std::string pPortV,WiringPath pPath,CommoditySet pCommodities ) =0;

};

}

}

}

#endif /*INSTANTIABLELINK_H_*/
