#ifndef ASSETOARCHIVE_H #define ASSETOARCHIVE_H #include #include #include #include #include template class asset_oarchive : public boost::archive::text_oarchive_impl< asset_oarchive > { friend class CubesDemo; typedef boost::archive::text_oarchive_impl< asset_oarchive > archive_base_t; private: AssetManagerType* TheAssetManager; osBool RootAssetSaved; public: asset_oarchive(AssetManagerType* theAssetManager, std::ostream& os, unsigned int flags = 0) :archive_base_t(os, flags) ,TheAssetManager(theAssetManager) ,RootAssetSaved(false) {} ~asset_oarchive() { } public: template bool save_object_ptr_custom(T& t) { BOOST_STATIC_ASSERT(boost::is_pointer::value); if (boost::is_base_of::type >::value) { if (!RootAssetSaved) { RootAssetSaved = true; return false; } else { AssetManagerType::ResourceID ResourceId = TheAssetManager->ResourceIdForAsset(t); operator&(ResourceId); return true; } } else { return false; } } }; #include #include #include #include "AssetManager.hpp" #include "Asset.hpp" namespace boost { namespace archive { template class basic_text_oarchive< asset_oarchive > ; template class text_oarchive_impl< asset_oarchive > ; template class detail::archive_pointer_oserializer< asset_oarchive > ; } // namespace archive } // namespace boost #define BOOST_ARCHIVE_CUSTOM_OARCHIVE_TYPES asset_oarchive #endif//ASSETOARCHIVE_H