/*! * \param[in,out] dest Destination positions. * \param[in] src Source positions. * \param[in] bFirst If true, memory is allocated for \p dest and a full * copy is made; otherwise, only variable parts are copied, and no memory * is allocated. * * \p dest should have been initialized somehow (calloc() is enough). */ void gmx_ana_pos_copy(gmx_ana_pos_t *dest, gmx_ana_pos_t *src, bool bFirst) { if (bFirst) { gmx_ana_pos_reserve(dest, src->count(), 0); if (src->v) { gmx_ana_pos_reserve_velocities(dest); } if (src->f) { gmx_ana_pos_reserve_forces(dest); } } memcpy(dest->x, src->x, src->count()*sizeof(*dest->x)); if (dest->v) { GMX_ASSERT(src->v, "src velocities should be non-null if dest velocities are allocated"); memcpy(dest->v, src->v, src->count()*sizeof(*dest->v)); } if (dest->f) { GMX_ASSERT(src->f, "src forces should be non-null if dest forces are allocated"); memcpy(dest->f, src->f, src->count()*sizeof(*dest->f)); } gmx_ana_indexmap_copy(&dest->m, &src->m, bFirst); }
/*! * \param[in,out] dest Destination positions. * \param[in] src Source positions. * \param[in] bFirst If true, memory is allocated for \p dest and a full * copy is made; otherwise, only variable parts are copied, and no memory * is allocated. * * \p dest should have been initialized somehow (calloc() is enough). */ void gmx_ana_pos_copy(gmx_ana_pos_t *dest, gmx_ana_pos_t *src, bool bFirst) { if (bFirst) { gmx_ana_pos_reserve(dest, src->nr, 0); if (src->v) { gmx_ana_pos_reserve_velocities(dest); } if (src->f) { gmx_ana_pos_reserve_forces(dest); } } dest->nr = src->nr; memcpy(dest->x, src->x, dest->nr*sizeof(*dest->x)); if (dest->v) { memcpy(dest->v, src->v, dest->nr*sizeof(*dest->v)); } if (dest->f) { memcpy(dest->f, src->f, dest->nr*sizeof(*dest->f)); } gmx_ana_indexmap_copy(&dest->m, &src->m, bFirst); dest->g = src->g; }