@@ -7,36 +7,40 @@ use clarabel::algebra::FloatT;
77use clarabel:: solver:: { self as lib} ;
88use std:: ffi:: { c_int, c_void} ;
99
10- pub ( crate ) type CallbackFcnFFI < T > = extern "C" fn ( info : * const ClarabelDefaultInfo < T > ) -> c_int ;
10+ pub ( crate ) type CallbackFcnFFI < T > =
11+ extern "C" fn ( info : * const ClarabelDefaultInfo < T > , userdata : * mut std:: ffi:: c_void ) -> c_int ;
1112pub type ClarabelCallbackFcn_f32 = CallbackFcnFFI < f32 > ;
1213pub type ClarabelCallbackFcn_f64 = CallbackFcnFFI < f64 > ;
1314
1415/// Set the termination callback
1516fn _internal_DefaultSolver_set_termination_callback < T : FloatT > (
1617 solver : * mut c_void ,
1718 callback : CallbackFcnFFI < T > ,
19+ userdata : * mut std:: ffi:: c_void ,
1820) {
1921 // Recover the solver object from the opaque pointer
2022 let solver = unsafe { & mut * ( solver as * mut lib:: DefaultSolver < T > ) } ;
2123
2224 // Set the termination callback
23- solver. set_termination_callback_c ( callback) ;
25+ solver. set_termination_callback_c ( callback, userdata ) ;
2426}
2527
2628#[ no_mangle]
2729pub extern "C" fn clarabel_DefaultSolver_f64_set_termination_callback (
2830 solver : * mut ClarabelDefaultSolver_f64 ,
2931 callback : ClarabelCallbackFcn_f64 ,
32+ userdata : * mut std:: ffi:: c_void ,
3033) {
31- _internal_DefaultSolver_set_termination_callback :: < f64 > ( solver, callback)
34+ _internal_DefaultSolver_set_termination_callback :: < f64 > ( solver, callback, userdata )
3235}
3336
3437#[ no_mangle]
3538pub extern "C" fn clarabel_DefaultSolver_f32_set_termination_callback (
3639 solver : * mut ClarabelDefaultSolver_f32 ,
3740 callback : ClarabelCallbackFcn_f32 ,
41+ userdata : * mut std:: ffi:: c_void ,
3842) {
39- _internal_DefaultSolver_set_termination_callback :: < f32 > ( solver, callback)
43+ _internal_DefaultSolver_set_termination_callback :: < f32 > ( solver, callback, userdata )
4044}
4145
4246/// Turn off the termination callback
0 commit comments