return fio_->bRead;
}
+void FileIOXdrSerializer::doBool(bool *value)
+{
+ gmx_bool v = *value;
+ gmx_fio_do_gmx_bool(fio_, v);
+ *value = v;
+}
+
void FileIOXdrSerializer::doUChar(unsigned char *value)
{
gmx_fio_do_uchar(fio_, *value);
virtual bool reading() const;
+ virtual void doBool(bool *value);
virtual void doUChar(unsigned char *value);
virtual void doInt(int *value);
virtual void doInt64(gmx_int64_t *value);
checker.checkKeyValueTreeObject(tree, "Adjusted");
// Check that assignment works.
ASSERT_NO_THROW_GMX(gmx::assignOptionsFromKeyValueTree(&options_, tree, nullptr));
+ // Check that serialization works.
+ {
+ std::vector<char> buffer = serializeTree(tree);
+ gmx::InMemoryDeserializer deserializer(buffer);
+ gmx::KeyValueTreeObject output
+ = gmx::deserializeKeyValueTree(&deserializer);
+ checker.checkKeyValueTreeObject(output, "Adjusted");
+ }
+ // Check that dumping works.
{
gmx::StringOutputStream stream;
gmx::TextWriter writer(&stream);
gmx::Options options_;
gmx::KeyValueTreeBuilder builder_;
+
+ private:
+ std::vector<char> serializeTree(const gmx::KeyValueTreeObject &tree)
+ {
+ gmx::InMemorySerializer serializer;
+ gmx::serializeKeyValueTree(tree, &serializer);
+ return serializer.finishAndGetBuffer();
+ }
};
TEST_F(TreeValueSupportTest, SupportsBooleanOption)
return std::move(impl_->buffer_);
}
+void InMemorySerializer::doBool(bool *value)
+{
+ impl_->doValue(value);
+}
+
void InMemorySerializer::doUChar(unsigned char *value)
{
impl_->doValue(*value);
{
}
+void InMemoryDeserializer::doBool(bool *value)
+{
+ impl_->doValue(value);
+}
+
void InMemoryDeserializer::doUChar(unsigned char *value)
{
impl_->doValue(value);
// From ISerializer
virtual bool reading() const { return false; }
+ virtual void doBool(bool *value);
virtual void doUChar(unsigned char *value);
virtual void doInt(int *value);
virtual void doInt64(gmx_int64_t *value);
// From ISerializer
virtual bool reading() const { return true; }
+ virtual void doBool(bool *value);
virtual void doUChar(unsigned char *value);
virtual void doInt(int *value);
virtual void doInt64(gmx_int64_t *value);
virtual bool reading() const = 0;
//! \brief Serialize values of different types.
///@{
+ virtual void doBool(bool *value) = 0;
virtual void doUChar(unsigned char *value) = 0;
virtual void doInt(int *value) = 0;
virtual void doInt64(gmx_int64_t *value) = 0;
}
};
+template <>
+struct SerializationTraits<bool>
+{
+ static void serialize(bool value, ISerializer *serializer)
+ {
+ serializer->doBool(&value);
+ }
+ static void deserialize(KeyValueTreeValueBuilder *builder, ISerializer *serializer)
+ {
+ bool value;
+ serializer->doBool(&value);
+ builder->setValue<bool>(value);
+ }
+};
+
template <>
struct SerializationTraits<int>
{
SERIALIZER('O', KeyValueTreeObject),
SERIALIZER('A', KeyValueTreeArray),
SERIALIZER('s', std::string),
+ SERIALIZER('b', bool),
SERIALIZER('i', int),
SERIALIZER('l', gmx_int64_t),
SERIALIZER('f', float),
virtual bool reading() const { return false; }
+ virtual void doBool(bool *value)
+ {
+ checker_.checkBoolean(*value, nullptr);
+ }
virtual void doUChar(unsigned char *value)
{
checker_.checkUChar(*value, nullptr);