#ifndef IMPLEMENTATION_H_
#define IMPLEMENTATION_H_

#include <string>
#include "quantities/Name.h"
#include "quantities/Type.h"
#include "quantities/Position.h"
#include "quantities/onchipcommunication/Ports.h"
#include "quantities/TransferTable.h"
#include "quantities/CommoditySet.h"
#include "quantities/WiringPath.h"
#include "quantities/onchipcommunication/IpGeometry.h"
#include "quantities/onchipcommunication/NodeParameter.h"
#include "quantities/onchipcommunication/LinkParameter.h"
#include "label/Label.hpp"
#include "core/CommunicationStructure.hpp"

namespace cosi
{

namespace commstruct
{

namespace onchipcommunication
{

/**	Type is the component type and will be used to select a component from the library
 *  Ports is the set of available ports
 * 	Position is the position
 * 	Ports is the port of each node.
 *
 *
 * */
typedef Label_10<Name,Type,
                cosi::quantity::onchipcommunication::Ports,Position,
                cosi::quantity::onchipcommunication::IpGeometry,
                cosi::quantity::onchipcommunication::NodeParameter,
                TransferTable,CommoditySet,WiringPath,
                cosi::quantity::onchipcommunication::LinkParameter>
		ImplementationLabel;


class Implementation : public CommunicationStructure< ImplementationLabel >
{
public:
	Implementation(std::string pName);
	virtual ~Implementation();
	Implementation operator+(Implementation pC) ;
};

}

}

}

#endif /*IMPLEMENTATION_H_*/
