18
18
19
19
#include < cstddef>
20
20
#include < spdlog/spdlog.h>
21
+ #include < unordered_set>
21
22
22
23
namespace {
23
24
// / The status of the session.
@@ -160,6 +161,20 @@ struct DecoherenceTimes {
160
161
static DecoherenceTimes decoherenceTimes;
161
162
return decoherenceTimes;
162
163
}
164
+
165
+ /* *
166
+ * @brief Provides access to the list of device sessions.
167
+ * @return a reference to a static vector of unique pointers to
168
+ * MQT_NA_QDMI_Device_Session_impl_d.
169
+ */
170
+ [[nodiscard]] auto sessions ()
171
+ -> std::unordered_map<MQT_NA_QDMI_Device_Session,
172
+ std::unique_ptr<MQT_NA_QDMI_Device_Session_impl_d>>& {
173
+ static std::unordered_map<MQT_NA_QDMI_Device_Session,
174
+ std::unique_ptr<MQT_NA_QDMI_Device_Session_impl_d>>
175
+ sessions;
176
+ return sessions;
177
+ }
163
178
} // namespace
164
179
165
180
// NOLINTBEGIN(bugprone-macro-parentheses)
@@ -228,14 +243,21 @@ int MQT_NA_QDMI_device_initialize() {
228
243
return QDMI_SUCCESS;
229
244
}
230
245
231
- int MQT_NA_QDMI_device_finalize () { return QDMI_SUCCESS; }
246
+ int MQT_NA_QDMI_device_finalize () {
247
+ while (!sessions ().empty ()) {
248
+ MQT_NA_QDMI_device_session_free (sessions ().begin ()->first );
249
+ }
250
+ return QDMI_SUCCESS;
251
+ }
232
252
233
253
int MQT_NA_QDMI_device_session_alloc (MQT_NA_QDMI_Device_Session* session) {
234
254
if (session == nullptr ) {
235
255
return QDMI_ERROR_INVALIDARGUMENT;
236
256
}
237
- // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
238
- *session = new MQT_NA_QDMI_Device_Session_impl_d ();
257
+ auto uniqueSession = std::make_unique<MQT_NA_QDMI_Device_Session_impl_d>();
258
+ *session = sessions ()
259
+ .emplace (uniqueSession.get (), std::move (uniqueSession))
260
+ .first ->first ;
239
261
return QDMI_SUCCESS;
240
262
}
241
263
@@ -251,8 +273,7 @@ int MQT_NA_QDMI_device_session_init(MQT_NA_QDMI_Device_Session session) {
251
273
}
252
274
253
275
void MQT_NA_QDMI_device_session_free (MQT_NA_QDMI_Device_Session session) {
254
- // NOLINTNEXTLINE(cppcoreguidelines-owning-memory)
255
- delete session;
276
+ sessions ().erase (session);
256
277
}
257
278
258
279
int MQT_NA_QDMI_device_session_set_parameter (
0 commit comments