Exemplo n.º 1
0
 public override void Evaluate <T>(
     ICircuitEvaluator <T> evaluator,
     EvaluationState <T> evaluationState,
     CircuitContext circuitContext)
 {
     evaluationState.SetGateEvaluationValue(this, evaluationState.GetInput(Context.TypeUniqueId));
 }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CircuitContext"/> class.
 /// </summary>
 /// <param name="contextName">Name of the context.</param>
 /// <param name="parent">Parent of the context.</param>
 /// <param name="evaluator">Circuit evaluator.</param>
 /// <param name="simulationPreparations">Simulation preparations.</param>
 /// <param name="resultService">SpiceModel service for the context.</param>
 /// <param name="nameGenerator">Name generator for the models.</param>
 /// <param name="statementsReader">Statements reader.</param>
 /// <param name="waveformReader">Waveform reader.</param>
 /// <param name="caseSettings">Case settings.</param>
 /// <param name="exporters">Exporters.</param>
 /// <param name="workingDirectory">Working directory.</param>
 /// <param name="instanceData">Instance data.</param>
 public CircuitContext(
     string contextName,
     ICircuitContext parent,
     ICircuitEvaluator evaluator,
     ISimulationPreparations simulationPreparations,
     IResultService resultService,
     INameGenerator nameGenerator,
     ISpiceStatementsReader statementsReader,
     IWaveformReader waveformReader,
     ISpiceNetlistCaseSensitivitySettings caseSettings,
     IMapper <Exporter> exporters,
     string workingDirectory)
 {
     Name      = contextName ?? throw new ArgumentNullException(nameof(contextName));
     Evaluator = evaluator;
     SimulationPreparations = simulationPreparations;
     Result               = resultService ?? throw new ArgumentNullException(nameof(resultService));
     NameGenerator        = nameGenerator ?? throw new ArgumentNullException(nameof(nameGenerator));
     Parent               = parent;
     Children             = new List <ICircuitContext>();
     CaseSensitivity      = caseSettings;
     StatementsReader     = statementsReader;
     WaveformReader       = waveformReader;
     AvailableSubcircuits = CreateAvailableSubcircuitsCollection();
     ModelsRegistry       = CreateModelsRegistry();
     Exporters            = exporters;
     WorkingDirectory     = workingDirectory;
 }
Exemplo n.º 3
0
        public override void Evaluate <T>(
            ICircuitEvaluator <T> evaluator,
            EvaluationState <T> evaluationState)
        {
            T value = evaluator.EvaluateNotGate(
                evaluationState.GetGateEvaluationValue(_inputGate)
                );

            evaluationState.SetGateEvaluationValue(this, value);
        }
Exemplo n.º 4
0
        public override void Evaluate <T>(
            ICircuitEvaluator <T> evaluator,
            EvaluationState <T> evaluationState)
        {
            T value = evaluator.EvaluateXorGate(
                evaluationState.GetGateEvaluationValue(_leftInputGate),
                evaluationState.GetGateEvaluationValue(_rightInputGate)
                );

            evaluationState.SetGateEvaluationValue(this, value);
        }
Exemplo n.º 5
0
        public override void Evaluate <T>(
            ICircuitEvaluator <T> evaluator,
            EvaluationState <T> evaluationState,
            CircuitContext circuitContext)
        {
            T value = evaluator.EvaluateAndGate(
                evaluationState.GetGateEvaluationValue(_leftInputGate),
                evaluationState.GetGateEvaluationValue(_rightInputGate),
                Context,
                circuitContext
                );

            evaluationState.SetGateEvaluationValue(this, value);
        }
Exemplo n.º 6
0
        private void EvaluateSubtree <T>(
            Gate gate,
            ICircuitEvaluator <T> evaluator,
            EvaluationState <T> evaluationState)
        {
            foreach (Gate inputGate in gate.InputGates)
            {
                if (!evaluationState.IsGateEvaluated(inputGate))
                {
                    EvaluateSubtree(inputGate, evaluator, evaluationState);
                }
            }

            gate.Evaluate(evaluator, evaluationState);
        }
Exemplo n.º 7
0
        public T[] Evaluate <T>(ICircuitEvaluator <T> evaluator, T[] input)
        {
            if (input.Length != Context.NumberOfInputGates)
            {
                throw new ArgumentException("Number of provided inputs does not match the number of input gates in the circuit.", nameof(input));
            }

            EvaluationState <T> evaluationState = new EvaluationState <T>(input, Context);

            foreach (OutputGate outputGate in OutputGates)
            {
                EvaluateSubtree(outputGate, evaluator, evaluationState);
            }

            return(evaluationState.Output);
        }
Exemplo n.º 8
0
 public BatchCircuitEvaluator(ICircuitEvaluator <T> innerEvaluator)
 {
     _innerEvaluator = innerEvaluator;
 }
Exemplo n.º 9
0
 public AsyncCircuitEvaluator(ICircuitEvaluator <T> innerEvaluator)
 {
     _innerEvaluator = innerEvaluator;
 }
Exemplo n.º 10
0
 public override void Evaluate <T>(
     ICircuitEvaluator <T> evaluator,
     EvaluationState <T> evaluationState)
 {
     evaluationState.SetOutput(_outputIndex, evaluationState.GetGateEvaluationValue(_inputGate));
 }
Exemplo n.º 11
0
 public T[] Evaluate <T>(ICircuitEvaluator <T> evaluator, T[] input)
 {
     return(Evaluate(new BatchCircuitEvaluator <T>(evaluator), input));
 }
Exemplo n.º 12
0
 public abstract void Evaluate <T>(
     ICircuitEvaluator <T> evaluator,
     EvaluationState <T> evaluationState,
     CircuitContext circuitContext
     );
Exemplo n.º 13
0
 public override void Evaluate <T>(
     ICircuitEvaluator <T> evaluator,
     EvaluationState <T> evaluationState)
 {
     evaluationState.SetGateEvaluationValue(this, evaluationState.GetInput(_inputIndex));
 }
Exemplo n.º 14
0
 public abstract void Evaluate <T>(
     ICircuitEvaluator <T> evaluator,
     EvaluationState <T> evaluationState
     );