#ifndef INSTANTIABLESUBNETWORK_H_
#define INSTANTIABLESUBNETWORK_H_

#include <map>
#include <string>
#include "InstantiableLink.h"
#include "InstantiableNode.h"
#include "rules/wiredbas/link/WiringRule.h"
#include "rules/wiredbas/common/NetworkRule.h"

namespace cosi {

namespace library {

namespace wiredbas {

class InstantiableSubNetwork {
protected:
	std::map<std::string , cosi::library::wiredbas::InstantiableNode*> mNodes;
	std::map<std::string, cosi::library::wiredbas::InstantiableLink*> mLinks;
	cosi::commstruct::wiredbas::Implementation* mI ;
public:
	InstantiableSubNetwork(std::map<std::string , cosi::library::wiredbas::InstantiableNode*> N,
			std::map<std::string, cosi::library::wiredbas::InstantiableLink*> L);
	virtual ~InstantiableSubNetwork();
	virtual cosi::commstruct::wiredbas::Implementation* StartNew();
	virtual void AddNode(string Name , Vertex V, Position pP, ThreadSet pThreads,
			TransferTable pT) = 0 ;
	virtual void AddLink(string Name ,Vertex U, Vertex V, WiringPath pPath) = 0 ;

};

}

}

}

#endif /*INSTANTIABLESUBNETWORK_H_*/
