public void Hook(ResourceHookType type, IResourceAccess access) { if (type == ResourceHookType.AfterDowngrade) { EventHandler <ProjectModifiedArgs> handler = ProjectModifiedEvent; if (handler != null) { ProjectAccess projAccess = access as ProjectAccess; foreach (ProjectModifiedArgs args in projAccess.toIssue) { handler(this, args); } } } }
public void Hook(ResourceHookType hookType, IResourceAccess rawAccess) { ILayoutAccess access = rawAccess as ILayoutAccess; if (hookType == ResourceHookType.AfterWrite) { nodes.LayoutChanged(access); } else if (hookType == ResourceHookType.AfterDowngrade) { IEnumerable <Connection> conns = connections.UpdateConnections(access); OnLayoutModified(access); ProjectModule mod = this.module; if (mod != null && conns != null) { // done after OnLayoutModified since that will add pin instances into simulation substates mod.UpdateConnections(conns); } } }
public void WaitForModify(IResourceAccess access, object stopMonitor, Func <bool> stopTest) { bool modified = false; EventHandler pulse = (obj, args) => { lock (stopMonitor) { modified = true; Monitor.PulseAll(stopMonitor); } }; access.Resource.ResourceHelper.AddAcquireLock(stopMonitor); access.Resource.ResourceHelper.OnModify += pulse; lock (stopMonitor) { while (!stopTest() && !modified) { Dispose(); Monitor.Wait(stopMonitor); } } access.Resource.ResourceHelper.RemoveAcquireLock(stopMonitor); access.Resource.ResourceHelper.OnModify -= pulse; Start(); }
public void SetLocation(IResourceAccess access, Location value) { access.CheckWriteAccess(); this.location = value; }
public Location GetLocation(IResourceAccess access) { access.CheckReadAccess(); return(this.location); }
public void Hook(ResourceHookType hookType, IResourceAccess rawAccess) { Access access = rawAccess as Access; if (hookType == ResourceHookType.AfterWrite) { while (true) { bool netsChanged = access.netsChanged; List <Node> dirtyNodes = access.dirtyNodes; List <Instance> instancesAdded = access.instancesAdded; List <Instance> instancesRemoved = access.instancesRemoved; if (!netsChanged && dirtyNodes == null && instancesAdded == null && instancesRemoved == null) { break; } access.netsChanged = false; access.dirtyNodes = null; access.instancesAdded = null; access.instancesRemoved = null; if (netsChanged) { this.subnets = Subnet.UpdateNets(key, access, subnets); } if (dirtyNodes != null) { foreach (Node n in dirtyNodes) { engine.AddDirtyNet(n.Subnet); } } if (instancesAdded != null) { InstanceEvent evnt = new SimulationInstanceEvent(InstanceEvent.Types.InstanceAdded, this); InstanceEvent evnt2 = new SimulationInstanceEvent(InstanceEvent.Types.InstanceDirty, this); InstanceState state = new InstanceState(access, null); foreach (Instance i in instancesAdded) { state.Instance = i; i.HandleEvent(evnt, state); i.HandleEvent(evnt2, state); } } if (instancesRemoved != null) { InstanceEvent evnt = new SimulationInstanceEvent(InstanceEvent.Types.InstanceRemoved, this); InstanceState state = new InstanceState(access, null); foreach (Instance i in instancesRemoved) { state.Instance = i; i.HandleEvent(evnt, state); } } } } else if (hookType == ResourceHookType.AfterDowngrade) { OnSimulationModelModified(); if (DebugAfterUpdates) { Console.WriteLine("Simulation model update complete"); foreach (Instance i in instances) { Console.WriteLine(" {0} ports {1}", i, ", ".JoinObjectStrings(i.Ports)); } foreach (Node u in nodes) { Port p = u as Port; if (p == null || p.Type == PortType.Passive) { Console.WriteLine(" {0} neighbors {1}", u, ", ".JoinObjectStrings(u.Neighbors)); } } foreach (Subnet n in subnets) { HashSet <Node> nNodes = new HashSet <Node>(n.Nodes); List <string> driverStrs = new List <string>(); foreach (Port u in n.Drivers) { driverStrs.Add(string.Format("{0}/{1}", u, u.GetDrivenValue(key))); nNodes.Remove(u); } foreach (Node u in n.Readers) { nNodes.Remove(u); } Console.WriteLine(" {0} val {1} drivers {2} readers {3} nodes {4}", n, n.GetValue(key), ", ".JoinObjectStrings(driverStrs), ", ".JoinObjectStrings(n.Readers), ", ".JoinObjectStrings(nNodes)); } } } }