From afeb7e04297a63a11d2dd0c1c839ec1484292252 Mon Sep 17 00:00:00 2001 From: Mark Abraham Date: Sun, 1 Jan 2017 19:12:55 +0000 Subject: [PATCH] Extend serialization to gmx_int64_t Change-Id: Ib48b89d3f6e75e47ab6462c4505227e3f14913a5 --- src/gromacs/fileio/gmxfio-xdr.cpp | 5 +++++ src/gromacs/fileio/gmxfio-xdr.h | 3 ++- src/gromacs/utility/inmemoryserializer.cpp | 10 ++++++++++ src/gromacs/utility/inmemoryserializer.h | 2 ++ src/gromacs/utility/iserializer.h | 5 ++++- src/gromacs/utility/keyvaluetreeserializer.cpp | 18 +++++++++++++++++- .../utility/tests/keyvaluetreeserializer.cpp | 10 +++++++++- src/testutils/refdata.cpp | 13 +++++++++++++ src/testutils/refdata.h | 2 ++ 9 files changed, 64 insertions(+), 4 deletions(-) diff --git a/src/gromacs/fileio/gmxfio-xdr.cpp b/src/gromacs/fileio/gmxfio-xdr.cpp index 16eb311b58..bdac061185 100644 --- a/src/gromacs/fileio/gmxfio-xdr.cpp +++ b/src/gromacs/fileio/gmxfio-xdr.cpp @@ -691,6 +691,11 @@ void FileIOXdrSerializer::doInt(int *value) gmx_fio_do_int(fio_, *value); } +void FileIOXdrSerializer::doInt64(gmx_int64_t *value) +{ + gmx_fio_do_int64(fio_, *value); +} + void FileIOXdrSerializer::doFloat(float *value) { gmx_fio_do_float(fio_, *value); diff --git a/src/gromacs/fileio/gmxfio-xdr.h b/src/gromacs/fileio/gmxfio-xdr.h index 16169a8b71..45118cb2af 100644 --- a/src/gromacs/fileio/gmxfio-xdr.h +++ b/src/gromacs/fileio/gmxfio-xdr.h @@ -3,7 +3,7 @@ * * Copyright (c) 1991-2000, University of Groningen, The Netherlands. * Copyright (c) 2001-2004, The GROMACS development team. - * Copyright (c) 2013,2014,2015,2016, by the GROMACS development team, led by + * Copyright (c) 2013,2014,2015,2016,2017, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -147,6 +147,7 @@ class FileIOXdrSerializer : public ISerializer virtual void doUChar(unsigned char *value); virtual void doInt(int *value); + virtual void doInt64(gmx_int64_t *value); virtual void doFloat(float *value); virtual void doDouble(double *value); virtual void doString(std::string *value); diff --git a/src/gromacs/utility/inmemoryserializer.cpp b/src/gromacs/utility/inmemoryserializer.cpp index fb7d4b7128..a741b67607 100644 --- a/src/gromacs/utility/inmemoryserializer.cpp +++ b/src/gromacs/utility/inmemoryserializer.cpp @@ -107,6 +107,11 @@ void InMemorySerializer::doInt(int *value) impl_->doValue(*value); } +void InMemorySerializer::doInt64(gmx_int64_t *value) +{ + impl_->doValue(*value); +} + void InMemorySerializer::doFloat(float *value) { impl_->doValue(*value); @@ -172,6 +177,11 @@ void InMemoryDeserializer::doInt(int *value) impl_->doValue(value); } +void InMemoryDeserializer::doInt64(gmx_int64_t *value) +{ + impl_->doValue(value); +} + void InMemoryDeserializer::doFloat(float *value) { impl_->doValue(value); diff --git a/src/gromacs/utility/inmemoryserializer.h b/src/gromacs/utility/inmemoryserializer.h index 55d315c6d3..2466602399 100644 --- a/src/gromacs/utility/inmemoryserializer.h +++ b/src/gromacs/utility/inmemoryserializer.h @@ -63,6 +63,7 @@ class InMemorySerializer : public ISerializer virtual bool reading() const { return false; } virtual void doUChar(unsigned char *value); virtual void doInt(int *value); + virtual void doInt64(gmx_int64_t *value); virtual void doFloat(float *value); virtual void doDouble(double *value); virtual void doString(std::string *value); @@ -83,6 +84,7 @@ class InMemoryDeserializer : public ISerializer virtual bool reading() const { return true; } virtual void doUChar(unsigned char *value); virtual void doInt(int *value); + virtual void doInt64(gmx_int64_t *value); virtual void doFloat(float *value); virtual void doDouble(double *value); virtual void doString(std::string *value); diff --git a/src/gromacs/utility/iserializer.h b/src/gromacs/utility/iserializer.h index 64fdf96384..aa52b85828 100644 --- a/src/gromacs/utility/iserializer.h +++ b/src/gromacs/utility/iserializer.h @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2016, by the GROMACS development team, led by + * Copyright (c) 2016,2017, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -45,6 +45,8 @@ #include +#include "gromacs/utility/basedefinitions.h" + namespace gmx { @@ -67,6 +69,7 @@ class ISerializer ///@{ virtual void doUChar(unsigned char *value) = 0; virtual void doInt(int *value) = 0; + virtual void doInt64(gmx_int64_t *value) = 0; virtual void doFloat(float *value) = 0; virtual void doDouble(double *value) = 0; virtual void doString(std::string *value) = 0; diff --git a/src/gromacs/utility/keyvaluetreeserializer.cpp b/src/gromacs/utility/keyvaluetreeserializer.cpp index df8bda370d..99e4047067 100644 --- a/src/gromacs/utility/keyvaluetreeserializer.cpp +++ b/src/gromacs/utility/keyvaluetreeserializer.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2016, by the GROMACS development team, led by + * Copyright (c) 2016,2017, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -167,6 +167,21 @@ struct SerializationTraits } }; +template <> +struct SerializationTraits +{ + static void serialize(gmx_int64_t value, ISerializer *serializer) + { + serializer->doInt64(&value); + } + static void deserialize(KeyValueTreeValueBuilder *builder, ISerializer *serializer) + { + gmx_int64_t value; + serializer->doInt64(&value); + builder->setValue(value); + } +}; + template <> struct SerializationTraits { @@ -222,6 +237,7 @@ void ValueSerializer::initSerializers() SERIALIZER('A', KeyValueTreeArray), SERIALIZER('s', std::string), SERIALIZER('i', int), + SERIALIZER('l', gmx_int64_t), SERIALIZER('f', float), SERIALIZER('d', double), }; diff --git a/src/gromacs/utility/tests/keyvaluetreeserializer.cpp b/src/gromacs/utility/tests/keyvaluetreeserializer.cpp index 00156143a9..f94866c8a6 100644 --- a/src/gromacs/utility/tests/keyvaluetreeserializer.cpp +++ b/src/gromacs/utility/tests/keyvaluetreeserializer.cpp @@ -1,7 +1,7 @@ /* * This file is part of the GROMACS molecular simulation package. * - * Copyright (c) 2016, by the GROMACS development team, led by + * Copyright (c) 2016,2017, by the GROMACS development team, led by * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, * and including many others, as listed in the AUTHORS file in the * top-level source directory and at http://www.gromacs.org. @@ -65,6 +65,10 @@ class RefDataWriteSerializer : public gmx::ISerializer { checker_.checkInteger(*value, nullptr); } + virtual void doInt64(gmx_int64_t *value) + { + checker_.checkInt64(*value, nullptr); + } virtual void doFloat(float *value) { checker_.checkFloat(*value, nullptr); @@ -101,6 +105,10 @@ class RefDataReadSerializer : public gmx::ISerializer { *value = checker_.readInteger(nullptr); } + virtual void doInt64(gmx_int64_t *value) + { + *value = checker_.readInt64(nullptr); + } virtual void doFloat(float *value) { *value = checker_.readFloat(nullptr); diff --git a/src/testutils/refdata.cpp b/src/testutils/refdata.cpp index d42f97f98d..474feff22f 100644 --- a/src/testutils/refdata.cpp +++ b/src/testutils/refdata.cpp @@ -1065,6 +1065,19 @@ int TestReferenceChecker::readInteger(const char *id) } +gmx_int64_t TestReferenceChecker::readInt64(const char *id) +{ + if (impl_->shouldIgnore()) + { + GMX_THROW(TestException("Trying to read from non-existent reference data value")); + } + gmx_int64_t value = 0; + EXPECT_PLAIN(impl_->processItem(Impl::cInt64NodeName, id, + ValueExtractor(&value))); + return value; +} + + float TestReferenceChecker::readFloat(const char *id) { if (impl_->shouldIgnore()) diff --git a/src/testutils/refdata.h b/src/testutils/refdata.h index e1cd287fe7..acf44b5ea5 100644 --- a/src/testutils/refdata.h +++ b/src/testutils/refdata.h @@ -394,6 +394,8 @@ class TestReferenceChecker unsigned char readUChar(const char *id); //! Reads an integer value. int readInteger(const char *id); + //! Reads a 64-bit integer value. + gmx_int64_t readInt64(const char *id); //! Reads a float value. float readFloat(const char *id); //! Reads a double value. -- 2.22.0