#ifndef PLATFORMINSTANCE_H_
#define PLATFORMINSTANCE_H_

#include <string>

#include "quantities/Name.h"
#include "quantities/Type.h"
#include "quantities/Position.h"
#include "quantities/WiringPath.h"
#include "quantities/onchipcommunication/Ports.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_8<Name,Type,cosi::quantity::onchipcommunication::Ports,Position,cosi::quantity::onchipcommunication::NodeParameter,cosi::quantity::onchipcommunication::IpGeometry,WiringPath,cosi::quantity::onchipcommunication::LinkParameter>
		PlatformLabel;

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

}

}

}

#endif /*PLATFORMINSTANCE_H_*/
