From 4a28376403620736ad49f8bc886609154c51498b Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Fri, 11 Aug 2023 00:31:25 +0100 Subject: Bit of dedupe in DocumentTreeIterateDictAttrs --- slicer/xml/serializer.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/slicer/xml/serializer.cpp b/slicer/xml/serializer.cpp index cb0b0e4..369394e 100644 --- a/slicer/xml/serializer.cpp +++ b/slicer/xml/serializer.cpp @@ -229,15 +229,17 @@ namespace Slicer { void DocumentTreeIterateDictAttrs(const xmlpp::Element::const_AttributeList & attrs, ModelPartParam dict) { + using AttrMember = Glib::ustring (xmlpp::Attribute::*)() const; for (const auto & attr : attrs) { auto emp = dict->GetAnonChild(); emp->Create(); - auto key = emp->GetChild(keyName); - auto value = emp->GetChild(valueName); - key->SetValue(XmlValueSource(attr->get_name())); - key->Complete(); - value->SetValue(XmlValueSource(attr->get_value())); - value->Complete(); + const auto setChild = [&emp, &attr](const auto & childName, AttrMember attrMember) { + auto child = emp->GetChild(childName); + child->SetValue(XmlValueSource((attr->*attrMember)())); + child->Complete(); + }; + setChild(keyName, &xmlpp::Attribute::get_name); + setChild(valueName, &xmlpp::Attribute::get_value); emp->Complete(); } } -- cgit v1.2.3