Skip to content

Commit 88fc7c6

Browse files
committed
update c bindings
1 parent 1cedfdf commit 88fc7c6

2 files changed

Lines changed: 49 additions & 17 deletions

File tree

open-codegen/opengen/templates/c/example_optimizer_c_bindings.c

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,30 @@
2020
*/
2121

2222
#include <stdio.h>
23+
#include <stdlib.h>
2324
#include "{{meta.optimizer_name}}_bindings.h"
2425

2526
/*
2627
* Feel free to customize the following code...
2728
*/
2829

30+
static const char *exit_status_to_string({{meta.optimizer_name}}ExitStatus exit_status) {
31+
switch (exit_status) {
32+
case {{meta.optimizer_name}}Converged:
33+
return "Converged";
34+
case {{meta.optimizer_name}}NotConvergedIterations:
35+
return "NotConvergedIterations";
36+
case {{meta.optimizer_name}}NotConvergedOutOfTime:
37+
return "NotConvergedOutOfTime";
38+
case {{meta.optimizer_name}}NotConvergedCost:
39+
return "NotConvergedCost";
40+
case {{meta.optimizer_name}}NotConvergedNotFiniteComputation:
41+
return "NotConvergedNotFiniteComputation";
42+
default:
43+
return "Unknown";
44+
}
45+
}
46+
2947
int main(void) {
3048
int i;
3149

@@ -45,28 +63,18 @@ int main(void) {
4563

4664
/* obtain cache */
4765
{{meta.optimizer_name}}Cache *cache = {{meta.optimizer_name}}_new();
66+
if (cache == NULL) {
67+
fprintf(stderr, "Could not allocate solver cache\n");
68+
return EXIT_FAILURE;
69+
}
4870

4971
/* solve */
5072
{{meta.optimizer_name}}SolverStatus status = {{meta.optimizer_name}}_solve(cache, u, p, {% if problem.dim_constraints_aug_lagrangian() > 0 %}y{% else %}0{% endif %}, &init_penalty);
5173

52-
/* print results */
53-
printf("\n\n-------------------------------------------------\n");
54-
printf(" Solution\n");
55-
printf("-------------------------------------------------\n");
56-
57-
for (i = 0; i < {{meta.optimizer_name|upper}}_NUM_DECISION_VARIABLES; ++i) {
58-
printf("u[%d] = %g\n", i, u[i]);
59-
}
60-
61-
printf("\n");
62-
for (i = 0; i < {{meta.optimizer_name|upper}}_N1; ++i) {
63-
printf("y[%d] = %g\n", i, status.lagrange[i]);
64-
}
65-
6674
printf("\n\n-------------------------------------------------\n");
6775
printf(" Solver Statistics\n");
6876
printf("-------------------------------------------------\n");
69-
printf("exit status : %d\n", status.exit_status);
77+
printf("exit status : %d (%s)\n", status.exit_status, exit_status_to_string(status.exit_status));
7078
printf("error code : %d\n", status.error_code);
7179
printf("error message : %s\n", status.error_message);
7280
printf("iterations : %lu\n", status.num_inner_iterations);
@@ -78,10 +86,34 @@ int main(void) {
7886
printf("Cost : %f\n", status.cost);
7987
printf("||FRP|| : %f\n\n", status.last_problem_norm_fpr);
8088

89+
if (status.error_code != 0) {
90+
fprintf(stderr, "Solver returned an error; solution vector is not printed.\n");
91+
{{meta.optimizer_name}}_free(cache);
92+
return EXIT_FAILURE;
93+
}
94+
95+
if (status.exit_status != {{meta.optimizer_name}}Converged) {
96+
fprintf(stderr, "Warning: solver did not converge, printing best available iterate.\n");
97+
}
98+
99+
/* print results */
100+
printf("\n\n-------------------------------------------------\n");
101+
printf(" Solution\n");
102+
printf("-------------------------------------------------\n");
103+
104+
for (i = 0; i < {{meta.optimizer_name|upper}}_NUM_DECISION_VARIABLES; ++i) {
105+
printf("u[%d] = %g\n", i, u[i]);
106+
}
107+
108+
printf("\n");
109+
for (i = 0; i < {{meta.optimizer_name|upper}}_N1; ++i) {
110+
printf("y[%d] = %g\n", i, status.lagrange[i]);
111+
}
112+
81113

82114

83115
/* free memory */
84116
{{meta.optimizer_name}}_free(cache);
85117

86-
return 0;
118+
return EXIT_SUCCESS;
87119
}

open-codegen/opengen/templates/c/optimizer_cinterface.rs.jinja

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{% if activate_clib_generation -%}
2-
// ---Export functionality from Rust to C/C++------------------------------------------------------------
2+
// ---Export functionality from Rust to C/C++ --------------
33

44
/// Solver cache (structure `{{meta.optimizer_name}}Cache`)
55
///

0 commit comments

Comments
 (0)