public IDictionary <XBlock, BoolSimulation> Create(PageGraphContext context) { var simulations = GetSimulations(context); // find ordered block Inputs foreach (var block in context.OrderedBlocks) { var inputs = block.Pins .Where(pin => context.PinTypes[pin] == PinType.Input) .SelectMany(pin => { return(context.Dependencies[pin] .Where(dep => context.PinTypes[dep.Item1] == PinType.Output)); }) .Select(pin => pin); // convert inputs to BoolInput var simulation = simulations[block]; simulation.Inputs = inputs.Select(input => { return(new BoolInput() { Simulation = simulations[input.Item1.Owner], IsInverted = input.Item2 }); }).ToArray(); } return(simulations); }
public static void WriteDependencies(PageGraphContext context, TextWriter writer) { writer.WriteLine("Dependencies: "); foreach (var kvp in context.Dependencies) { var pin = kvp.Key; var dependencies = kvp.Value; if (dependencies != null && dependencies.Count > 0) { writer.WriteLine( "{0}:{1}", pin.Owner == null ? "<>" : pin.Owner.Name, pin.Name); foreach (var dependency in dependencies) { writer.WriteLine( "\t[{0}] {1}:{2}, inverted: {3}", dependency.Item1.PinType, dependency.Item1.Owner == null ? "<>" : dependency.Item1.Owner.Name, dependency.Item1.Name, dependency.Item2); } } else { writer.WriteLine( "{0}:{1}", pin.Owner == null ? "<>" : pin.Owner.Name, pin.Name); writer.WriteLine("\t<none>"); } } }
public static void WriteConnections(PageGraphContext context, TextWriter writer) { writer.WriteLine("Connections: "); foreach (var kvp in context.Connections) { var pin = kvp.Key; var connections = kvp.Value; writer.WriteLine( "{0}:{1}", pin.Owner == null ? "<>" : pin.Owner.Name, pin.Name); if (connections != null && connections.Count > 0) { foreach (var connection in connections) { writer.WriteLine( "\t{0}:{1}, inverted: {2}", connection.Item1.Owner == null ? "<>" : connection.Item1.Owner.Name, connection.Item1.Name, connection.Item2); } } else { writer.WriteLine("\t<none>"); } } }
public static void WriteOrderedBlocks(PageGraphContext context, TextWriter writer) { writer.WriteLine("OrderedBlocks: "); foreach (var block in context.OrderedBlocks) { writer.WriteLine(block.Name); } }
public static PageGraphContext Create( IEnumerable <XBlock> blocks, IEnumerable <XPin> pins, IEnumerable <XWire> wires) { var context = new PageGraphContext(); context.Connections = FindConnections(blocks, pins, wires); context.Dependencies = FindDependencies(blocks, context.Connections); context.PinTypes = FindPinTypes(blocks, pins, context.Dependencies); context.OrderedBlocks = SortDependencies(blocks, context.Dependencies, context.PinTypes); return(context); }
public static void WritePinTypes(PageGraphContext context, TextWriter writer) { writer.WriteLine("PinTypes: "); foreach (var kvp in context.PinTypes) { var pin = kvp.Key; var type = kvp.Value; writer.WriteLine( "\t[{0}] {1}:{2}", type, pin.Owner == null ? "<>" : pin.Owner.Name, pin.Name); } }
private IDictionary <XBlock, BoolSimulation> GetSimulations(PageGraphContext context) { var simulations = new Dictionary <XBlock, BoolSimulation>(); foreach (var block in context.OrderedBlocks) { if (Registry.ContainsKey(block.Name)) { simulations.Add(block, Registry[block.Name](block)); } else { throw new Exception("Not supported block simulation."); } } return(simulations); }