示例#1
0
        public Register NewRegister(IDictionary <ulong, Complex> initStates, int width)
        {
            Quantum.Register reg     = _comp.NewRegister(initStates, width);
            Register         created = Init(reg);

            _modelRefs[created.Model] = created;
            created.Model.Qubits.CollectionChanged += Qubits_CollectionChanged;
            return(created);
        }
示例#2
0
        public Register NewRegister(ulong initval, int width, int?size = null)
        {
            Quantum.Register reg     = _comp.NewRegister(initval, width, size);
            Register         created = Init(reg);

            _modelRefs[created.Model] = created;
            created.Model.Qubits.CollectionChanged += Qubits_CollectionChanged;
            return(created);
        }
示例#3
0
        internal Register NewFromModel(RegisterModel regModel)
        {
            Quantum.Register reg     = _comp.NewRegister(regModel.InitStates, regModel.Qubits.Count);
            Register         created = InitFromModel(reg, regModel);

            if (!_modelRefs.ContainsKey(created.Model))
            {
                regModel.Qubits.CollectionChanged += Qubits_CollectionChanged;
            }
            _modelRefs[created.Model] = created;
            return(created);
        }
示例#4
0
 private Register InitFromModel(Quantum.Register reg, RegisterModel regModel)
 {
     if (_quantumRoot == null)
     {
         _quantumRoot = _comp.GetRootRegister(reg);
     }
     else
     {
         _quantumRoot = _comp.GetRootRegister(_quantumRoot, reg);
     }
     _parserRoot = new Register(_model, _quantumRoot, null, 0);
     return(new Register(_model, reg, regModel));
 }
示例#5
0
 internal Quantum.Register ModelToSource(RegisterPartModel model)
 {
     Quantum.Register toReturn = _parserRoot.SourceRegister;
     if (model.Register != null)
     {
         toReturn = _modelRefs[model.Register].SourceRegister;
     }
     if (model.Width == toReturn.Width)
     {
         return(toReturn);
     }
     else
     {
         return(toReturn[model.Offset, model.Width]);
     }
 }
示例#6
0
        private Register Init(Quantum.Register reg)
        {
            RegisterModel regModel = new RegisterModel(
                _model.Registers.Count, 0, reg.Width, reg.GetAmplitudes());

            if (_quantumRoot == null)
            {
                _quantumRoot = _comp.GetRootRegister(reg);
            }
            else
            {
                _quantumRoot = _comp.GetRootRegister(_quantumRoot, reg);
            }
            _parserRoot = new Register(_model, _quantumRoot, null, 0);

            _listenToModelChanges = false;
            _model.AddRegister(regModel);
            _listenToModelChanges = true;

            return(new Register(_model, reg, regModel));
        }