/// <summary> /// Once the algorithm has finished use the information it has stored to update the routing table. /// </summary> private void UpdateRoutingTable() { IKeyTable <IMLink> oldTable = ForwardingTable; foreach (DijkstraNode target in _confirmed) { if (target.ID != ID) { //Work backwards along the route, starting at the target, until the first hop is found DijkstraNode prev = target; while (prev != null && !Equals(prev.GetPrev(ID))) { prev = prev.GetPrev(ID); } if (prev != null && Links.ContainsKey(prev.ID)) { IMLink l = Links[prev.ID]; SetRoute(Algorithm, target.ID, l, target.GetDistanceFromRoot(ID)); oldTable.Remove(target.ID); } } } //Trigger events for any nodes that can no longer be routed to foreach (IMNodeInternal n in KnownNodes) { if (oldTable.ContainsKey(n.ID)) { RemoveRoute(Algorithm, n.ID); } } }
protected virtual void RemoveLink(TLink link, Parameters parameters) { lock (this) { link.Parameters.Append(parameters); link.Destroy(); _links.Remove(link.ID); _neighbours[link.FromID].Remove(link.ID); _connections[link.FromID].Remove(link.ToID); if (link.IsBidirectional) { _neighbours[link.ToID].Remove(link.ID); _connections[link.ToID].Remove(link.FromID); } Logger.Info("Removed '" + link.Name + "'."); } }
public virtual void RemoveNode(UUID n, Parameters parameters) { if (!IsNode(n)) { return; } //throw new Exception("Unable to remove entity. Given ID is not a known node."); lock (this) { INode node = GetNode(n); node.Parameters.Append(parameters); node.Destroy(); _neighbours.Remove(n); _connections.Remove(n); _nodes.Remove(n); Logger.Debug("Removed node '" + node.Name + "'."); } }
public override void RemoveNode(UUID node, Parameters parameters) { base.RemoveNode(node, parameters); _view.RemoveNode(node, parameters); if (_knownNodes.ContainsKey(node)) { _knownNodes.Remove(node); } }
public void UnMap(UUID id, string name) { if (_readerMap.ContainsKey(name)) { _readerMap.Remove(name); } if (_recordingEnabled && _writers.ContainsKey(id)) { _writers[id].StopRecording(); _writers.Remove(id); _writerMap.Remove(id); } }
protected void RemoveRoute(string alg, UUID target) { if (_table.ContainsKey(target)) { IMLink oldLink = _table[target]; float oldDist = _distances[target]; _table.Remove(target); _distances.Remove(target); if (OnRouteChange != null && IsCurrentAlgorithm) { OnRouteChange(alg, KnownNodes[target], oldLink, null, oldDist, -1f); } } }
/// <inhertidoc /> public void RemoveLink(UUID l, Parameters parameters) { if (!Neighbours.ContainsKey(l)) { throw new Exception("The link to be remove is not a known link."); } IMNodeInternal neighbour = _neighbours[l]; IMLink link = _links[neighbour.ID]; link.OnWeightChanged -= _weightDelegate; lock (_links) { _links.Remove(neighbour.ID); _links.Remove(l); } lock (_neighbours) _neighbours.Remove(link.ID); if (OnLinkRemoved != null && !parameters.Get <bool>("Clearing")) { OnLinkRemoved(ID, link, parameters); Logger.Debug(Name + " triggered OnLinkRemoved for '" + link.Name + "'."); } }
public bool RemovePrim(UUID id) { if (!_prims.ContainsKey(id)) { return(false); } IPrim prim = _prims[id]; if (prim is MRMPrim) { ((MRMPrim)prim).RemoveListeners(); } prim.Editable = true; IObject obj = GetIObject(id); if (obj != null && obj.Exists) { obj.Scale = Vector3.Zero; } _logger.Debug("Queued " + prim.Name + " to be removed."); _factoryQ.QWork("Remove Primitive", () => { if (!_prims.ContainsKey(id)) { return; } lock (_prims) _prims.Remove(id); if (_recycle && _freeObjects.Count < MAX_RECYCLED_PRIMS) { _freeObjects.Add(id, GetIObject(id)); _logger.Info("Recycled " + prim.Name + "."); } else { WorldRemove(id); } }); return(true); }
protected override void LinkRemoved(IMLink link, Parameters parameters, bool visualise) { lock (neighbourVectors) neighbourVectors.Remove(link.OtherEnd(ID)); findShortestPaths(TTL, "'" + link.Name + "' removed", visualise); }