コード例 #1
0
ファイル: ComputerModel.cs プロジェクト: Wowand/quantum
        //only for GUI
        public void InsertQubitAbove(int registerIndex, int row)
        {
            if (_currentStep != 0)
            {
                return;
            }

            SelectedItems = null;

            RegisterModel reg = _registers[registerIndex];

            reg.InsertQubit(row + 1);

            int offset = row + 1;
            int i      = 0;

            for (; i < registerIndex; i++)
            {
                _registers[i].IncrementOffset();
            }
            i++;
            for (; i < _registers.Count; i++)
            {
                offset += _registers[i].Qubits.Count;
            }

            foreach (StepModel step in Steps)
            {
                int gatesNum = reg.Qubits.Count - row - 2;
                for (int j = offset; j < gatesNum + offset;)
                {
                    int prevEnd = step.Gates[j].End;
                    step.Gates[j].IncrementRow(reg, row);
                    j = prevEnd + 1;
                }

                if (offset > 0 && step.Gates[offset - 1].End >= offset)
                {
                    //multiqubit gate
                    step.Gates.Insert(offset, step.Gates[offset - 1]);
                }
                else
                {
                    step.Gates.Insert(offset, new EmptyGate(new RegisterRefModel()
                    {
                        Register = reg, Offset = row + 1
                    }));
                }
            }
        }