From 11cd00b7c7b11e5d0ceb90394af3c5d863f75b26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erc=C3=BCment=20Kaya?= Date: Thu, 29 Oct 2026 16:07:47 +0100 Subject: [PATCH 1/2] Minor improvements on C-API --- include/mqss-c/client.h | 6 +++++- include/mqss-c/job.h | 4 ++++ src/c_bindings/client.cpp | 6 +++++- src/c_bindings/job.cpp | 8 ++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/include/mqss-c/client.h b/include/mqss-c/client.h index e7c589d..5f92cce 100644 --- a/include/mqss-c/client.h +++ b/include/mqss-c/client.h @@ -29,7 +29,8 @@ extern "C" { typedef struct MQSSOpaqueClient* MQSSClientRef; -MQSSClientRef MQSSClientCreateClient(char* token, char* urlOrQueue, bool isHpc); +MQSSClientRef MQSSClientCreateClient(const char* token, + const char* urlOrQueue, bool isHpc); MQSSResourceRef* MQSSClientGetAllResources(MQSSClientRef client, int* size); @@ -44,6 +45,9 @@ MQSSJobResultRef MQSSClientGetJobResult(MQSSClientRef client, MQSSJobRef job, bool wait, unsigned int timeout); int MQSSClientGetNumberPendingJobs(MQSSClientRef client, char* resourceName); + +void MQSSClientFreeClient(MQSSClientRef client); + #ifdef __cplusplus } #endif diff --git a/include/mqss-c/job.h b/include/mqss-c/job.h index 6b51f34..1ab2f4f 100644 --- a/include/mqss-c/job.h +++ b/include/mqss-c/job.h @@ -48,6 +48,10 @@ int MQSSClientGetJobResultSubmittedTimestamp(MQSSJobResultRef jobResult, int MQSSClientGetJobResultScheduledTimestamp(MQSSJobResultRef jobResult, uint64_t* scheduledTimestamp); +void MQSSClientFreeJob(MQSSJobRef job); + +void MQSSClientFreeJobResult(MQSSJobResultRef result); + #ifdef __cplusplus } #endif diff --git a/src/c_bindings/client.cpp b/src/c_bindings/client.cpp index d1ac2fd..0dee333 100644 --- a/src/c_bindings/client.cpp +++ b/src/c_bindings/client.cpp @@ -24,7 +24,7 @@ using namespace mqss::client; -MQSSClientRef MQSSClientCreateClient(char* token, char* urlOrQueue, +MQSSClientRef MQSSClientCreateClient(const char* token, const char* urlOrQueue, bool isHpc) { if (!token || !urlOrQueue) return nullptr; @@ -100,3 +100,7 @@ int MQSSClientGetNumberPendingJobs(MQSSClientRef client, char* resourceName) { return unwrap(client)->getNumberPendingJobs(resourceName); } + +void MQSSClientFreeClient(MQSSClientRef client) { + delete unwrap(client); +} diff --git a/src/c_bindings/job.cpp b/src/c_bindings/job.cpp index 1e3f08e..f239651 100644 --- a/src/c_bindings/job.cpp +++ b/src/c_bindings/job.cpp @@ -162,3 +162,11 @@ int MQSSClientGetJobResultScheduledTimestamp(MQSSJobResultRef jobResult, } return 0; } + +void MQSSClientFreeJob(MQSSJobRef job) { + delete unwrap(job); +} + +void MQSSClientFreeJobResult(MQSSJobResultRef result) { + delete unwrap(result); +} \ No newline at end of file From bd607155084f285308d7b79fdfc54b95282132fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erc=C3=BCment=20Kaya?= Date: Fri, 30 Oct 2026 12:45:47 +0100 Subject: [PATCH 2/2] Minor bug fix and improvements on C-API --- include/mqss-c/client.h | 7 ++++--- include/mqss-c/job.h | 16 +++++++++------- src/c_bindings/client.cpp | 3 ++- src/c_bindings/job.cpp | 20 ++++++++++---------- src/client.cpp | 4 ++-- 5 files changed, 27 insertions(+), 23 deletions(-) diff --git a/include/mqss-c/client.h b/include/mqss-c/client.h index 5f92cce..a31e697 100644 --- a/include/mqss-c/client.h +++ b/include/mqss-c/client.h @@ -29,8 +29,8 @@ extern "C" { typedef struct MQSSOpaqueClient* MQSSClientRef; -MQSSClientRef MQSSClientCreateClient(const char* token, - const char* urlOrQueue, bool isHpc); +MQSSClientRef MQSSClientCreateClient(const char* token, const char* urlOrQueue, + bool isHpc); MQSSResourceRef* MQSSClientGetAllResources(MQSSClientRef client, int* size); @@ -44,7 +44,8 @@ void MQSSClientCancelJob(MQSSClientRef client, MQSSJobRef job); MQSSJobResultRef MQSSClientGetJobResult(MQSSClientRef client, MQSSJobRef job, bool wait, unsigned int timeout); -int MQSSClientGetNumberPendingJobs(MQSSClientRef client, char* resourceName); +int MQSSClientGetNumberPendingJobs(MQSSClientRef client, + const char* resourceName); void MQSSClientFreeClient(MQSSClientRef client); diff --git a/include/mqss-c/job.h b/include/mqss-c/job.h index 1ab2f4f..8ec03ed 100644 --- a/include/mqss-c/job.h +++ b/include/mqss-c/job.h @@ -28,13 +28,15 @@ typedef struct MQSSOpaqueJob* MQSSJobRef; typedef struct MQSSOpaqueJobResult* MQSSJobResultRef; -MQSSJobRef MQSSClientCreateCircuitJob(char* circuit, char* circuitFormat, - char* resourceName, unsigned int shots, - bool noModify, bool queued); - -MQSSJobRef MQSSClientCreateHamiltonianJob(char* resourceName, - char* interactionStr, - char* coefficientsStr); +MQSSJobRef MQSSClientCreateCircuitJob(const char* circuit, + const char* circuitFormat, + const char* resourceName, + unsigned int shots, bool noModify, + bool queued); + +MQSSJobRef MQSSClientCreateHamiltonianJob(const char* resourceName, + const char* interactionStr, + const char* coefficientsStr); int MQSSClientGetJobResultCounts(MQSSJobResultRef jobResult, char*** bitstreams, int** counts, int* size); diff --git a/src/c_bindings/client.cpp b/src/c_bindings/client.cpp index 0dee333..0f44125 100644 --- a/src/c_bindings/client.cpp +++ b/src/c_bindings/client.cpp @@ -94,7 +94,8 @@ MQSSJobResultRef MQSSClientGetJobResult(MQSSClientRef client, MQSSJobRef job, return wrap(jobResult.release()); } -int MQSSClientGetNumberPendingJobs(MQSSClientRef client, char* resourceName) { +int MQSSClientGetNumberPendingJobs(MQSSClientRef client, + const char* resourceName) { if (!client || !resourceName) return -1; diff --git a/src/c_bindings/job.cpp b/src/c_bindings/job.cpp index f239651..ed23cf4 100644 --- a/src/c_bindings/job.cpp +++ b/src/c_bindings/job.cpp @@ -26,18 +26,20 @@ using namespace mqss::client; -MQSSJobRef MQSSClientCreateCircuitJob(char* circuit, char* circuitFormat, - char* resourceName, unsigned int shots, - bool noModify, bool queued) { +MQSSJobRef MQSSClientCreateCircuitJob(const char* circuit, + const char* circuitFormat, + const char* resourceName, + unsigned int shots, bool noModify, + bool queued) { if (!circuit || !circuitFormat || !resourceName) return nullptr; return wrap(new CircuitJobRequest( circuit, circuitFormat, resourceName, shots, noModify, queued)); } -MQSSJobRef MQSSClientCreateHamiltonianJob(char* resourceName, - char* interactionStr, - char* coefficientsStr) { +MQSSJobRef MQSSClientCreateHamiltonianJob(const char* resourceName, + const char* interactionStr, + const char* coefficientsStr) { if (!resourceName || !interactionStr || !coefficientsStr) return nullptr; return wrap( @@ -163,10 +165,8 @@ int MQSSClientGetJobResultScheduledTimestamp(MQSSJobResultRef jobResult, return 0; } -void MQSSClientFreeJob(MQSSJobRef job) { - delete unwrap(job); -} +void MQSSClientFreeJob(MQSSJobRef job) { delete unwrap(job); } void MQSSClientFreeJobResult(MQSSJobResultRef result) { delete unwrap(result); -} \ No newline at end of file +} diff --git a/src/client.cpp b/src/client.cpp index ff65b70..b2a993d 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -126,9 +126,9 @@ std::unique_ptr MQSSClient::waitForJobResult(const JobRequest& job, while (timeout > 0) { std::string status = getJobStatus(job); - if (status == "COMPLETED" || status == "CANCELLED") + if (status == "COMPLETED") break; - if (status == "FAILED" || status.empty()) + if (status == "FAILED" || status == "CANCELLED" || status.empty()) return nullptr; std::this_thread::sleep_for(std::chrono::seconds(poll_seconds)); timeout -= poll_seconds;