The C++ facade groups algorithms under copp::solver, matching the Rust, Python, C, and MATLAB naming model. Solver-specific Problem, Options, and Result types are lightweight descriptors around COPP's path-domain constraints and profiles.
TOPP2 and COPP2 optimize the scalar profile
\[a(s) = \dot{s}^2. \]
Use copp::solver::topp2_ra for time-optimal second-order profiles and copp::solver::reach_set2 when you need reachable intervals directly.
Use copp::solver::copp2_socp for convex objectives through Clarabel. The strict solve overload returns the accepted profile, while solve_expert returns solver status, residuals, raw vectors, and objective diagnostics.
TOPP3 and COPP3 optimize a copp::Profile3rd:
\[a(s) = \dot{s}^2, \qquad b(s) = \ddot{s}. \]
Use copp::solver::topp3_lp for the linear-programming formulation and copp::solver::topp3_socp for the conic formulation. Both share the copp::solver::topp3::Problem descriptor and can return expert Clarabel diagnostics.
Use copp::solver::copp3_socp when third-order constraints must be combined with convex objective descriptors.
Second-order solvers return std::vector<double> profiles. Convert them with copp::interpolation::s_to_t_topp2 and sample with the TOPP2 t_to_s helpers.
Third-order solvers return copp::Profile3rd. Convert and sample those results with the TOPP3 interpolation helpers.