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);
        }
Beispiel #2
0
 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>");
         }
     }
 }
Beispiel #3
0
 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>");
         }
     }
 }
Beispiel #4
0
 public static void WriteOrderedBlocks(PageGraphContext context, TextWriter writer)
 {
     writer.WriteLine("OrderedBlocks: ");
     foreach (var block in context.OrderedBlocks)
     {
         writer.WriteLine(block.Name);
     }
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 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);
        }