1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
void CChargeurDataXML::Charger(std::string i_strNom, boost::shared_ptr<CDataXML> & o_DataXML)
{
std::ifstream ifileXML(i_strNom.c_str());
try
{
boost::archive::xml_iarchive iTextArchiveXML(ifileXML);
// inscription dans les tables Boost: CDataXML est la classe de base
// camera hérite de CDataML
iTextArchiveXML.register_type(static_cast<CCameraXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CCameraXML *>(NULL),static_cast<CDataXML *>(NULL));
// lumiere hérite de CDataML
iTextArchiveXML.register_type(static_cast<CLumiereXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CLumiereXML *>(NULL),static_cast<CDataXML *>(NULL));
// shader hérite de CDataML
iTextArchiveXML.register_type(static_cast<CShaderXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CShaderXML *>(NULL),static_cast<CDataXML *>(NULL));
// scene info hérite de CDataML
iTextArchiveXML.register_type(static_cast<CSceneInfoXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CSceneInfoXML *>(NULL),static_cast<CDataXML *>(NULL));
// CMediaXML hérite de CDataML, les CMediaTextureXML et autres héritent de CMediaXML
iTextArchiveXML.register_type(static_cast<CMediaXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaXML *>(NULL),static_cast<CDataXML *>(NULL));
iTextArchiveXML.register_type(static_cast<CMediaTextureXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaTextureXML *>(NULL),static_cast<CMediaXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaTextureXML *>(NULL),static_cast<CDataXML *>(NULL));
iTextArchiveXML.register_type(static_cast<CMediaTextureArrayXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaTextureArrayXML *>(NULL),static_cast<CMediaXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaTextureArrayXML *>(NULL),static_cast<CDataXML *>(NULL));
iTextArchiveXML.register_type(static_cast<CMediaCubeMapXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaCubeMapXML *>(NULL),static_cast<CMediaXML *>(NULL));
boost::serialization::void_cast_register(static_cast<CMediaCubeMapXML *>(NULL),static_cast<CDataXML *>(NULL));
CDataXML * l_pData = o_DataXML.get();
iTextArchiveXML >> BOOST_SERIALIZATION_NVP(l_pData); // déssérialisation
o_DataXML = boost::shared_ptr<CDataXML>(l_pData);
}
catch(boost::archive::archive_exception & e)
{
std::cout << e.what();
}
ifileXML.close();
} |
Partager