diff options
Diffstat (limited to 'src/dynamics/joint/multibody_joint/multibody_workspace.rs')
| -rw-r--r-- | src/dynamics/joint/multibody_joint/multibody_workspace.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/dynamics/joint/multibody_joint/multibody_workspace.rs b/src/dynamics/joint/multibody_joint/multibody_workspace.rs new file mode 100644 index 0000000..767d751 --- /dev/null +++ b/src/dynamics/joint/multibody_joint/multibody_workspace.rs @@ -0,0 +1,27 @@ +use crate::dynamics::RigidBodyVelocity; +use crate::math::Real; +use na::DVector; + +/// A temporary workspace for various updates of the multibody. +#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))] +#[derive(Clone)] +pub(crate) struct MultibodyWorkspace { + pub accs: Vec<RigidBodyVelocity>, + pub ndofs_vec: DVector<Real>, +} + +impl MultibodyWorkspace { + /// Create an empty workspace. + pub fn new() -> Self { + MultibodyWorkspace { + accs: Vec::new(), + ndofs_vec: DVector::zeros(0), + } + } + + /// Resize the workspace so it is enough for `nlinks` links. + pub fn resize(&mut self, nlinks: usize, ndofs: usize) { + self.accs.resize(nlinks, RigidBodyVelocity::zero()); + self.ndofs_vec = DVector::zeros(ndofs) + } +} |
