@@ -149,31 +149,29 @@ void Mapper::finalizeMappedCircuit() {
149149 // circuit
150150 if (architecture.getNqubits () > qcMapped.getNqubits ()) {
151151 for (auto logicalQubit = qcMapped.getNqubits ();
152- logicalQubit < static_cast <dd::QubitCount>(architecture.getNqubits ());
153- ++logicalQubit) {
154- dd::Qubit physicalQubit = -1 ;
152+ logicalQubit < architecture.getNqubits (); ++logicalQubit) {
153+ std::optional<qc::Qubit> physicalQubit = std::nullopt ;
155154
156155 // check if the corresponding physical qubit is already in use
157- if (qcMapped.initialLayout .find (static_cast <dd ::Qubit>(logicalQubit)) !=
156+ if (qcMapped.initialLayout .find (static_cast <qc ::Qubit>(logicalQubit)) !=
158157 qcMapped.initialLayout .end ()) {
159158 // get the next unused physical qubit
160- for (physicalQubit = 0 ;
161- physicalQubit < static_cast <dd::Qubit>(architecture.getNqubits ());
162- ++physicalQubit) {
163- if (qcMapped.initialLayout .find (physicalQubit) ==
159+ for (physicalQubit = 0 ; *physicalQubit < architecture.getNqubits ();
160+ ++(*physicalQubit)) {
161+ if (qcMapped.initialLayout .find (*physicalQubit) ==
164162 qcMapped.initialLayout .end ()) {
165163 break ;
166164 }
167165 }
168166 } else {
169- physicalQubit = static_cast <dd ::Qubit>(logicalQubit);
167+ physicalQubit = static_cast <qc ::Qubit>(logicalQubit);
170168 }
171169
172- assert (physicalQubit != - 1 );
170+ assert (physicalQubit. has_value () );
173171
174172 // the added logical qubits are not used in the circuit itself, so they
175173 // are regarded garbage
176- qcMapped.addAncillaryQubit (physicalQubit, - 1 );
174+ qcMapped.addAncillaryQubit (* physicalQubit, std:: nullopt );
177175 }
178176 }
179177 // unify quantum registers
@@ -187,31 +185,30 @@ void Mapper::finalizeMappedCircuit() {
187185
188186void Mapper::placeRemainingArchitectureQubits () {
189187 if (qc.getNqubits () < architecture.getNqubits ()) {
190- for (auto logical = qc.getNqubits ();
191- logical < static_cast <decltype (logical)>(architecture.getNqubits ());
188+ for (auto logical = qc.getNqubits (); logical < architecture.getNqubits ();
192189 ++logical) {
193- dd:: Qubit physical = - 1 ;
190+ std::optional<qc:: Qubit> physical = std:: nullopt ;
194191
195192 // check if the corresponding physical qubit is already in use
196- if (qcMapped.initialLayout .find (static_cast <dd ::Qubit>(logical)) !=
193+ if (qcMapped.initialLayout .find (static_cast <qc ::Qubit>(logical)) !=
197194 qcMapped.initialLayout .end ()) {
198195 // get the next unused physical qubit
199- for (physical = 0 ;
200- physical < static_cast <dd::Qubit>(architecture.getNqubits ());
201- ++physical) {
202- if (qcMapped.initialLayout .find (physical) ==
196+ for (physical = 0 ; *physical < architecture.getNqubits ();
197+ ++(*physical)) {
198+ if (qcMapped.initialLayout .find (*physical) ==
203199 qcMapped.initialLayout .end ()) {
204200 break ;
205201 }
206202 }
207203 } else {
208- physical = static_cast <dd ::Qubit>(logical);
204+ physical = static_cast <qc ::Qubit>(logical);
209205 }
210206
211- qubits.at (physical) = logical;
207+ assert (physical.has_value ());
208+ qubits.at (*physical) = static_cast <short >(logical);
212209
213210 // mark architecture qubit as ancillary and garbage
214- qcMapped.initialLayout [physical] = static_cast <dd ::Qubit>(logical);
211+ qcMapped.initialLayout [* physical] = static_cast <qc ::Qubit>(logical);
215212 qcMapped.setLogicalQubitAncillary (logical);
216213 qcMapped.setLogicalQubitGarbage (logical);
217214 }
0 commit comments