From ae50b73b502bf8c3f1df7e7c369dabe7f216184b Mon Sep 17 00:00:00 2001 From: Mark Abraham Date: Wed, 31 Mar 2021 10:31:48 +0200 Subject: [PATCH] Make EnumerationArray::size() not static It's formally correct that the method can be static, but this makes code more complex at the point of use for the doubtful benefit of making clear to the human reader that the value returned by size() is a compile-time constant. The compiler can always see it. --- src/gromacs/fileio/checkpoint.cpp | 9 +-------- src/gromacs/fileio/tpxio.cpp | 4 +--- src/gromacs/modularsimulator/statepropagatordata.cpp | 10 +++------- src/gromacs/utility/enumerationhelpers.h | 2 +- 4 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/gromacs/fileio/checkpoint.cpp b/src/gromacs/fileio/checkpoint.cpp index f1ce7802f9..0bbe5657d0 100644 --- a/src/gromacs/fileio/checkpoint.cpp +++ b/src/gromacs/fileio/checkpoint.cpp @@ -1324,14 +1324,7 @@ static int do_cpt_state(XDR* xd, int fflags, t_state* state, FILE* list) switch (*i) { case StateEntry::Lambda: - ret = doRealArrayRef( - xd, - *i, - sflags, - gmx::arrayRefFromArray( - state->lambda.data(), - gmx::EnumerationArray::size()), - list); + ret = doRealArrayRef(xd, *i, sflags, state->lambda, list); break; case StateEntry::FepState: ret = do_cpte_int(xd, *i, sflags, &state->fep_state, list); diff --git a/src/gromacs/fileio/tpxio.cpp b/src/gromacs/fileio/tpxio.cpp index e91e86a958..4bcf3256d6 100644 --- a/src/gromacs/fileio/tpxio.cpp +++ b/src/gromacs/fileio/tpxio.cpp @@ -498,9 +498,7 @@ static void do_fepvals(gmx::ISerializer* serializer, t_lambda* fepvals, int file { fepvals->all_lambda[g].resize(fepvals->n_lambda); serializer->doDoubleArray(fepvals->all_lambda[g].data(), fepvals->n_lambda); - serializer->doBoolArray( - fepvals->separate_dvdl.begin(), - gmx::EnumerationArray::size()); + serializer->doBoolArray(fepvals->separate_dvdl.begin(), fepvals->separate_dvdl.size()); } else if (fepvals->init_lambda >= 0) { diff --git a/src/gromacs/modularsimulator/statepropagatordata.cpp b/src/gromacs/modularsimulator/statepropagatordata.cpp index cbafcfb871..1cf9df615e 100644 --- a/src/gromacs/modularsimulator/statepropagatordata.cpp +++ b/src/gromacs/modularsimulator/statepropagatordata.cpp @@ -359,13 +359,9 @@ void StatePropagatorData::Element::saveState() localStateBackup_ = statePropagatorData_->localState(); if (freeEnergyPerturbationData_) { - localStateBackup_->fep_state = freeEnergyPerturbationData_->currentFEPState(); - for (unsigned long i = 0; - i < gmx::EnumerationArray::size(); - ++i) - { - localStateBackup_->lambda[i] = freeEnergyPerturbationData_->constLambdaView()[i]; - } + localStateBackup_->fep_state = freeEnergyPerturbationData_->currentFEPState(); + ArrayRef lambdaView = freeEnergyPerturbationData_->constLambdaView(); + std::copy(lambdaView.begin(), lambdaView.end(), localStateBackup_->lambda.begin()); localStateBackup_->flags |= enumValueToBitMask(StateEntry::Lambda) | enumValueToBitMask(StateEntry::FepState); } diff --git a/src/gromacs/utility/enumerationhelpers.h b/src/gromacs/utility/enumerationhelpers.h index 17bba5c10a..e2352b2421 100644 --- a/src/gromacs/utility/enumerationhelpers.h +++ b/src/gromacs/utility/enumerationhelpers.h @@ -217,7 +217,7 @@ struct EnumerationArray final //! Returns an object that provides iterators over the keys. static constexpr EnumerationWrapperType keys() { return EnumerationWrapperType{}; } //! Returns the size of the enumeration. - static constexpr std::size_t size() { return std::size_t(ArraySize); } + constexpr std::size_t size() const { return std::size_t(ArraySize); } /*!@{*/ //! Array access with asserts: -- 2.22.0