#ifndef SPECIFICATION_H_
#define SPECIFICATION_H_

#include <string>

#include "quantities/Name.h"
#include "quantities/Position.h"
#include "quantities/onchipcommunication/Ports.h"
#include "quantities/RealLatency.h"
#include "quantities/CommoditySet.h"
#include "quantities/onchipcommunication/IpGeometry.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_5<Name,cosi::quantity::onchipcommunication::Ports,Position,cosi::quantity::onchipcommunication::IpGeometry,CommoditySet> SpecificationLabel;

class Specification : public CommunicationStructure< SpecificationLabel > {
public:
	Specification(std::string pName);
	virtual ~Specification();
	Specification operator+(Specification pC);

};

}

}

}

#endif /*SPECIFICATION_H_*/
