use self::velocity_solver::VelocitySolver;
use crate::alloc_prelude::*;
use contact_constraint::*;
pub(crate) use joint_constraint::MotorParameters;
pub use joint_constraint::*;
use solver_body::SolverVel;
mod categorization;
mod contact_constraint;
mod interaction_groups;
mod joint_constraint;
pub(crate) mod manifold_store;
mod solver_body;
pub(crate) mod solver_contact_graph;
mod staged_island_solver;
pub(crate) use staged_island_solver::StagedIslandSolver;
mod velocity_solver;
pub unsafe fn reset_buffer_reusing<T>(buffer: &mut Vec<T>, len: usize) {
if len <= buffer.len() {
buffer.truncate(len);
} else {
let old_len = buffer.len();
buffer.reserve(len - old_len);
unsafe {
buffer
.as_mut_ptr()
.add(old_len)
.write_bytes(0, len - old_len);
buffer.set_len(len);
}
}
}
pub unsafe fn reset_buffer<T>(buffer: &mut Vec<T>, len: usize) {
buffer.clear();
buffer.reserve(len);
unsafe {
buffer.as_mut_ptr().write_bytes(0, len);
buffer.set_len(len);
}
}