Improve option support & tests for key-value trees
[alexxy/gromacs.git] / src / gromacs / options / optionstoragetemplate.h
index 2dae1aa9f4958be60c129a992b60543792c6e095..d2d9dac15ffbd2b143770456a15d2b81e47e3906 100644 (file)
@@ -334,9 +334,7 @@ class OptionStorageTemplateSimple : public OptionStorageTemplate<T>
             std::vector<Variant> result;
             for (const auto &value : values)
             {
-                result.push_back(
-                        Variant::create<T>(
-                                processValue(converter_.convert(value))));
+                result.push_back(normalizeValue(converter_.convert(value)));
             }
             return result;
         }
@@ -359,6 +357,19 @@ class OptionStorageTemplateSimple : public OptionStorageTemplate<T>
         {
             return value;
         }
+        /*! \brief
+         * Converts a single value to normalized type.
+         *
+         * \param[in] value  Value after conversion.
+         * \returns   Value to store for the option.
+         *
+         * This can be overridden to serialize a different type than `T`
+         * when using the option with KeyValueTreeObject.
+         */
+        virtual Variant normalizeValue(const T &value) const
+        {
+            return Variant::create<T>(processValue(value));
+        }
 
     private:
         virtual void convertValue(const Variant &variant)
@@ -471,7 +482,7 @@ std::vector<Variant> OptionStorageTemplate<T>::defaultValues() const
     {
         result.push_back(Variant::create<T>(value));
     }
-    return result;
+    return normalizeValues(result);
 }