void ofXml::deserialize(ofAbstractParameter & parameter){ if(!parameter.isSerializable()) return; string name = parameter.getEscapedName(); if(parameter.type()==typeid(ofParameterGroup).name()){ ofParameterGroup & group = static_cast<ofParameterGroup&>(parameter); if(setTo(name)){ for(int i=0;i<group.size();i++){ deserialize(group.get(i)); } setToParent(); } }else{ if(exists(name)){ if(parameter.type()==typeid(ofParameter<int>).name()){ parameter.cast<int>() = getIntValue(name); }else if(parameter.type()==typeid(ofParameter<float>).name()){ parameter.cast<float>() = getFloatValue(name); }else if(parameter.type()==typeid(ofParameter<bool>).name()){ parameter.cast<bool>() = getBoolValue(name); }else if(parameter.type()==typeid(ofParameter<int64_t>).name()){ parameter.cast<int64_t>() = getInt64Value(name); }else if(parameter.type()==typeid(ofParameter<string>).name()){ parameter.cast<string>() = getValue(name); }else{ parameter.fromString(getValue(name)); } } } }
void ofxXmlSettings::deserialize(ofAbstractParameter & parameter){ if(!parameter.isSerializable()) return; string name = parameter.getEscapedName(); if(parameter.type()==typeid(ofParameterGroup).name()){ ofParameterGroup & group = static_cast<ofParameterGroup&>(parameter); if(tagExists(name)){ pushTag(name); for(int i=0;i<group.size();i++){ deserialize(group.get(i)); } popTag(); } }else{ if(tagExists(name)){ if(parameter.type()==typeid(ofParameter<int>).name()){ parameter.cast<int>() = getValue(name,0); }else if(parameter.type()==typeid(ofParameter<float>).name()){ parameter.cast<float>() = getValue(name,0.0f); }else if(parameter.type()==typeid(ofParameter<bool>).name()){ parameter.cast<bool>() = getValue(name,false); }else if(parameter.type()==typeid(ofParameter<string>).name()){ parameter.cast<string>() = getValue(name,""); }else{ parameter.fromString(getValue(name,"")); } } } }
void ofDeserialize(const ofXml & xml, ofAbstractParameter & parameter){ if(!parameter.isSerializable()){ return; } string name = parameter.getEscapedName(); ofXml child = xml.findFirst(name); if(child){ if(parameter.type() == typeid(ofParameterGroup).name()){ ofParameterGroup & group = static_cast <ofParameterGroup &>(parameter); for(auto & p: group){ ofDeserialize(child, *p); } }else{ if(parameter.type() == typeid(ofParameter <int> ).name()){ parameter.cast <int>() = child.getIntValue(); }else if(parameter.type() == typeid(ofParameter <float> ).name()){ parameter.cast <float>() = child.getFloatValue(); }else if(parameter.type() == typeid(ofParameter <bool> ).name()){ parameter.cast <bool>() = child.getBoolValue(); }else if(parameter.type() == typeid(ofParameter <string> ).name()){ parameter.cast <string>() = child.getValue(); }else{ parameter.fromString(child.getValue()); } } } }