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)); }
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)); }