public CircuitTestSocket(LogicalCircuit circuit, bool multithreaded)
        {
            Tracer.Assert(CircuitTestSocket.IsTestable(circuit));
            TableChank.Validate(circuit);

            this.chank = new TableChank(circuit);
            if (multithreaded && 1 < Environment.ProcessorCount && 15 < this.chank.InputBitCount)
            {
                this.chankList = new TableChank[Environment.ProcessorCount];
                BigInteger total = this.chank.Count;
                BigInteger count = total / this.chankList.Length;
                for (int i = 0; i < this.chankList.Length; i++)
                {
                    if (i == 0)
                    {
                        this.chankList[i] = this.chank;
                    }
                    else
                    {
                        this.chankList[i] = new TableChank(circuit);
                    }
                    this.chankList[i].Count = count;
                    this.chankList[i].Start = count * i;
                }
                this.chankList[this.chankList.Length - 1].Count += total % this.chankList.Length;
            }
        }
        public static CircuitTester CreateTester(string circuitName)
        {
            if (string.IsNullOrEmpty(circuitName))
            {
                throw new ArgumentNullException(nameof(circuitName));
            }
            Editor editor = App.Editor;

            if (editor == null)
            {
                throw new InvalidOperationException("Editor was not created yet");
            }
            LogicalCircuit circuit = editor.CircuitProject.LogicalCircuitSet.FindByName(circuitName);

            if (circuit == null)
            {
                throw new CircuitException(Cause.UserError, string.Format(CultureInfo.InvariantCulture, "Logical Circuit {0} not found", circuitName));
            }
            if (!CircuitTestSocket.IsTestable(circuit))
            {
                throw new CircuitException(Cause.UserError,
                                           string.Format(CultureInfo.InvariantCulture, "Logical Circuit {0} is not testable. There are no any input or/and output pins on it.", circuitName)
                                           );
            }
            return(new CircuitTester(editor, circuit));
        }
Beispiel #3
0
        internal CircuitTester(Editor editor, LogicalCircuit circuit)
        {
            Tracer.Assert(editor != null);
            Tracer.Assert(circuit != null);
            Tracer.Assert(circuit.CircuitProject == editor.CircuitProject);
            Tracer.Assert(CircuitTestSocket.IsTestable(circuit));

            this.originalEditor     = new WeakReference <Editor>(editor);
            this.originalVersion    = editor.CircuitProject.Version;
            this.logicalCircuitName = circuit.Name;

            this.socket = new CircuitTestSocket(circuit, false);
        }