| @@ -27,8 +27,8 @@ NamedValueSet::NamedValue::NamedValue() noexcept | |||||
| { | { | ||||
| } | } | ||||
| inline NamedValueSet::NamedValue::NamedValue (const Identifier& name_, const var& value_) | |||||
| : name (name_), value (value_) | |||||
| inline NamedValueSet::NamedValue::NamedValue (const Identifier& n, const var& v) | |||||
| : name (n), value (v) | |||||
| { | { | ||||
| } | } | ||||
| @@ -52,8 +52,8 @@ NamedValueSet::NamedValue::NamedValue (NamedValue&& other) noexcept | |||||
| { | { | ||||
| } | } | ||||
| inline NamedValueSet::NamedValue::NamedValue (const Identifier& name_, var&& value_) | |||||
| : name (name_), value (static_cast <var&&> (value_)) | |||||
| inline NamedValueSet::NamedValue::NamedValue (const Identifier& n, var&& v) | |||||
| : name (n), value (static_cast <var&&> (v)) | |||||
| { | { | ||||
| } | } | ||||
| @@ -264,16 +264,43 @@ void NamedValueSet::setFromXmlAttributes (const XmlElement& xml) | |||||
| const int numAtts = xml.getNumAttributes(); // xxx inefficient - should write an att iterator.. | const int numAtts = xml.getNumAttributes(); // xxx inefficient - should write an att iterator.. | ||||
| for (int i = 0; i < numAtts; ++i) | for (int i = 0; i < numAtts; ++i) | ||||
| appender.append (new NamedValue (xml.getAttributeName (i), var (xml.getAttributeValue (i)))); | |||||
| { | |||||
| const String& name = xml.getAttributeName (i); | |||||
| const String& value = xml.getAttributeValue (i); | |||||
| if (name.startsWith ("base64:")) | |||||
| { | |||||
| MemoryBlock mb; | |||||
| if (mb.fromBase64Encoding (value)) | |||||
| { | |||||
| appender.append (new NamedValue (name.substring (7), var (mb))); | |||||
| continue; | |||||
| } | |||||
| } | |||||
| appender.append (new NamedValue (name, var (value))); | |||||
| } | |||||
| } | } | ||||
| void NamedValueSet::copyToXmlAttributes (XmlElement& xml) const | void NamedValueSet::copyToXmlAttributes (XmlElement& xml) const | ||||
| { | { | ||||
| for (NamedValue* i = values; i != nullptr; i = i->nextListItem) | for (NamedValue* i = values; i != nullptr; i = i->nextListItem) | ||||
| { | { | ||||
| jassert (! i->value.isObject()); // DynamicObjects can't be stored as XML! | |||||
| if (const MemoryBlock* mb = i->value.getBinaryData()) | |||||
| { | |||||
| xml.setAttribute ("base64:" + i->name.toString(), | |||||
| mb->toBase64Encoding()); | |||||
| } | |||||
| else | |||||
| { | |||||
| // These types can't be stored as XML! | |||||
| jassert (! i->value.isObject()); | |||||
| jassert (! i->value.isMethod()); | |||||
| jassert (! i->value.isArray()); | |||||
| xml.setAttribute (i->name.toString(), | |||||
| i->value.toString()); | |||||
| xml.setAttribute (i->name.toString(), | |||||
| i->value.toString()); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||