network_id MultipleNetwork::addNetwork(std::string network_name, Network& net) {
	if (containsNetwork(network_name)) throw DuplicateElementException("network " + network_name);
	network_id new_network_id = addNetwork(net);
	network_name_to_id[network_name] = new_network_id;
	network_id_to_name.push_back(network_name);
	return new_network_id;
}
void MultipleNetwork::map(global_vertex_id gvid, vertex_id lvid, int nid) {
	if (!containsVertex(gvid)) throw ElementNotFoundException("global vertex " + std::to_string(gvid));
	if (!containsNetwork(nid)) throw ElementNotFoundException("network " + std::to_string(nid));
	if (!getNetwork(nid)->containsVertex(lvid)) throw ElementNotFoundException("local vertex " + std::to_string(lvid));
	if (global_to_local_id[gvid].count(nid)>0) throw DuplicateElementException("global vertex " + std::to_string(gvid) + " in network " + std::to_string(nid));
	// We update the references between global and local identifiers
	global_to_local_id[gvid][nid] = lvid;
	local_to_global_id[nid][lvid] = gvid;
}
Network* MultipleNetwork::getNetwork(network_id nid) {
	if (!containsNetwork(nid)) throw ElementNotFoundException("network " + std::to_string(nid));
	return &(networks[nid]);
}
Network* MultipleNetwork::getNetwork(std::string network_name) {
	if (!containsNetwork(network_name)) throw ElementNotFoundException("network " + network_name);
	return &(networks[network_name_to_id[network_name]]);
}
std::string MultipleNetwork::getNetworkName(network_id nid) {
	if (!containsNetwork(nid)) throw ElementNotFoundException("network " + std::to_string(nid));
	return network_id_to_name[nid];
}
void MultipleNetwork::map(std::string global_vertex_name, std::string local_vertex_name, std::string network_name) {
	if (!containsVertex(global_vertex_name)) throw ElementNotFoundException("global vertex name " + global_vertex_name);
	if (!getNetwork(network_name)->containsVertex(local_vertex_name)) throw ElementNotFoundException("local vertex name " + local_vertex_name);
	if (!containsNetwork(network_name)) throw ElementNotFoundException("network " + network_name);
	map(getVertexId(global_vertex_name),getNetwork(network_name)->getVertexId(local_vertex_name),getNetworkId(network_name));
}
示例#7
0
void MultiplexNetwork::mapIdentity(const std::string& global_identity_name, const std::string& local_vertex_name, const std::string& network_name) {
	if (!containsGlobalName(global_identity_name)) throw ElementNotFoundException("global identity " + global_identity_name);
	if (!getNetwork(network_name).containsVertex(local_vertex_name)) throw ElementNotFoundException("local vertex name " + local_vertex_name);
	if (!containsNetwork(network_name)) throw ElementNotFoundException("network " + network_name);
	mapIdentity(getGlobalIdentity(global_identity_name),getNetwork(network_name).getVertexId(local_vertex_name),getNetworkId(network_name));
}