module proj; nothrow @nogc extern(C): import types; import glob_opts; void project(OSQPWorkspace *work, c_float *z) { c_int i, m; m = work.data.m; for (i = 0; i < m; i++) { z[i] = c_min(c_max(z[i], work.data.l[i]), // Between lower work.data.u[i]); // and upper bounds } } void project_normalcone(OSQPWorkspace *work, c_float *z, c_float *y) { c_int i, m; // NB: Use z_prev as temporary vector m = work.data.m; for (i = 0; i < m; i++) { work.z_prev[i] = z[i] + y[i]; z[i] = c_min(c_max(work.z_prev[i], work.data.l[i]), work.data.u[i]); y[i] = work.z_prev[i] - z[i]; } }