void SelectionTreeElement::mempoolReserve(int count) { if (!mempool) { return; } switch (v.type) { case INT_VALUE: v.u.i = static_cast<int *>( _gmx_sel_mempool_alloc(mempool, sizeof(*v.u.i)*count)); break; case REAL_VALUE: v.u.r = static_cast<real *>( _gmx_sel_mempool_alloc(mempool, sizeof(*v.u.r)*count)); break; case GROUP_VALUE: _gmx_sel_mempool_alloc_group(mempool, v.u.g, count); break; default: GMX_THROW(gmx::InternalError("Memory pooling not implemented for requested type")); } }
/*! * \param[in,out] sel Selection element to reserve. * \param[in] count Number of values to reserve memory for. * \returns 0 on success or if no memory pool, non-zero on error. * * Reserves memory for the values of \p sel from the \p sel->mempool * memory pool. If no memory pool is set, nothing is done. */ void _gmx_selelem_mempool_reserve(t_selelem *sel, int count) { if (!sel->mempool) { return; } switch (sel->v.type) { case INT_VALUE: sel->v.u.i = static_cast<int *>( _gmx_sel_mempool_alloc(sel->mempool, sizeof(*sel->v.u.i)*count)); break; case REAL_VALUE: sel->v.u.r = static_cast<real *>( _gmx_sel_mempool_alloc(sel->mempool, sizeof(*sel->v.u.r)*count)); break; case GROUP_VALUE: _gmx_sel_mempool_alloc_group(sel->mempool, sel->v.u.g, count); break; default: GMX_THROW(gmx::InternalError("Memory pooling not implemented for requested type")); } }
void _gmx_sel_mempool_alloc_group(gmx_sel_mempool_t *mp, gmx_ana_index_t *g, int isize) { void *ptr = _gmx_sel_mempool_alloc(mp, sizeof(*g->index)*isize); g->index = static_cast<int *>(ptr); }