Make EnumerationArray::size() not static
authorMark Abraham <mark.j.abraham@gmail.com>
Wed, 31 Mar 2021 08:31:48 +0000 (10:31 +0200)
committerArtem Zhmurov <zhmurov@gmail.com>
Wed, 31 Mar 2021 17:10:34 +0000 (17:10 +0000)
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
src/gromacs/fileio/tpxio.cpp
src/gromacs/modularsimulator/statepropagatordata.cpp
src/gromacs/utility/enumerationhelpers.h

index f1ce7802f9b35867dbcfd681838c9869d89eb775..0bbe5657d07e2836f548b20085434c57e6fd7127 100644 (file)
@@ -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<real>(
-                                    state->lambda.data(),
-                                    gmx::EnumerationArray<FreeEnergyPerturbationCouplingType, real>::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);
index e91e86a95899798f07bf047277a5162811df8c7d..4bcf3256d6289892de1bd88546ed06c55093f13b 100644 (file)
@@ -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<FreeEnergyPerturbationCouplingType, real>::size());
+                serializer->doBoolArray(fepvals->separate_dvdl.begin(), fepvals->separate_dvdl.size());
             }
             else if (fepvals->init_lambda >= 0)
             {
index cbafcfb871cd27f6e195b1db57b7b6ae248f5b64..1cf9df615ecd4f2cfeb28725ade97e7df243d98f 100644 (file)
@@ -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<FreeEnergyPerturbationCouplingType, double>::size();
-             ++i)
-        {
-            localStateBackup_->lambda[i] = freeEnergyPerturbationData_->constLambdaView()[i];
-        }
+        localStateBackup_->fep_state    = freeEnergyPerturbationData_->currentFEPState();
+        ArrayRef<const real> lambdaView = freeEnergyPerturbationData_->constLambdaView();
+        std::copy(lambdaView.begin(), lambdaView.end(), localStateBackup_->lambda.begin());
         localStateBackup_->flags |=
                 enumValueToBitMask(StateEntry::Lambda) | enumValueToBitMask(StateEntry::FepState);
     }
index 17bba5c10a4b9c8a84113b1ef39c249a7f5373b3..e2352b2421aaf436d0a415df0691d2de2c55737d 100644 (file)
@@ -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: