#ifndef _PolyXML_h_ #define _PolyXML_h_ #include "ClassFactory.h" NAMESPACE_UPP; template class WithPolyXML : public WithFactory { public: // Xmlizer virtual void Xmlize(XmlIO xml) {}; }; template class PolyXMLArray : public Array { public: // Xmlizer void Xmlize(XmlIO xml); void Add(const T &data) { Array::Add(data); } void Add(T *data) { Array::Add(data); } }; template void PolyXMLArray::Xmlize(XmlIO xml) { if(xml.IsStoring()) { for(int i = 0; i < PolyXMLArray::GetCount(); i++) { T &data = PolyXMLArray::operator[](i); String tag = data.IsA(); data.Xmlize(xml.Add(tag)); } } else { PolyXMLArray::Clear(); for(int i = 0; i < xml->GetCount(); i++) { if(xml->Node(i).IsTag()) { String tag = xml->Node(i).GetTag(); T *data = T::CreatePtr(tag); if(data) { data->Xmlize(xml.At(i)); Add(data); } } } } } END_UPP_NAMESPACE; #endif