BIE |
/home/weinberg/src/BIE/persistence/BIE_polymorphic_xml_iarchive_pre_1_35.h00001 // This is really -*- C++ -*- 00002 00003 #ifndef BIE_POLYMORPHIC_XML_IARCHIVE_H 00004 #define BIE_POLYMORPHIC_XML_IARCHIVE_H 00005 00006 #include <iostream> 00007 #include <sstream> 00008 #include <iomanip> 00009 00010 #include <boost/version.hpp> 00011 #include <boost/config.hpp> 00012 00013 #include <boost/archive/basic_xml_iarchive.hpp> 00014 #include <boost/archive/polymorphic_xml_iarchive.hpp> 00015 #include <boost/archive/xml_iarchive.hpp> 00016 #include <boost/archive/detail/polymorphic_iarchive_dispatch.hpp> 00017 #include <boost/archive/impl/basic_xml_iarchive.ipp> 00018 #include <boost/archive/impl/xml_iarchive_impl.ipp> 00019 00020 #include <boost/archive/detail/abi_prefix.hpp> 00021 00022 namespace BIE { 00023 template<class Archive> 00024 class BIE_xml_iarchive_impl : public ::boost::archive::xml_iarchive_impl<Archive> 00025 { 00026 friend class ::boost::archive::detail::interface_iarchive<Archive>; 00027 friend class ::boost::archive::basic_xml_iarchive<Archive>; 00028 friend class ::boost::archive::load_access; 00029 00030 public: 00031 template<class T> 00032 BOOST_ARCHIVE_DECL(void) 00033 load(T & t) { 00034 ::boost::archive::xml_iarchive_impl<Archive>::load(t); 00035 } 00036 00037 template<class T> 00038 BOOST_ARCHIVE_DECL(void) 00039 load(T * t) { 00040 ::boost::archive::xml_iarchive_impl<Archive>::load(t); 00041 } 00042 00043 BOOST_ARCHIVE_DECL(void) 00044 load(float & t) { 00045 this->load_binary(&t, sizeof(t)); 00046 } 00047 00048 BOOST_ARCHIVE_DECL(void) 00049 load(double & t) { 00050 this->load_binary(&t, sizeof(t)); 00051 } 00052 00053 // special treatment for name-value pairs. 00054 template<class T> 00055 void load_override( 00056 #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING 00057 const 00058 #endif 00059 ::boost::serialization::nvp<T> & t, 00060 int 00061 ){ 00062 this->This()->load_start(t.name()); 00063 ::boost::archive::load(* this->This(), t.const_value()); 00064 this->This()->load_end(t.name()); 00065 } 00066 00067 // specific overrides for attributes - not name value pairs so we 00068 // want to trap them before the above "fall through" 00069 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00070 load_override(::boost::archive::object_id_type & t, int) { 00071 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00072 } 00073 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00074 load_override(::boost::archive::object_reference_type & t, int) { 00075 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00076 } 00077 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00078 load_override(::boost::archive::version_type & t, int) { 00079 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00080 } 00081 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00082 load_override(::boost::archive::class_id_type & t, int) { 00083 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00084 } 00085 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00086 load_override(::boost::archive::class_id_optional_type & t, int) { 00087 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00088 } 00089 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00090 load_override(::boost::archive::class_id_reference_type & t, int) { 00091 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00092 } 00093 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00094 load_override(::boost::archive::class_name_type & t, int) { 00095 /* ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0);*/ 00096 } 00097 BOOST_ARCHIVE_OR_WARCHIVE_DECL(void) 00098 load_override(::boost::archive::tracking_type & t, int) { 00099 ::boost::archive::basic_xml_iarchive<Archive>::load_override(t, 0); 00100 } 00101 00102 protected: 00103 BIE_xml_iarchive_impl(std::istream & is, unsigned int flags) : 00104 ::boost::archive::xml_iarchive_impl<Archive>(is, flags) { } 00105 00106 ~BIE_xml_iarchive_impl() { } 00107 }; 00108 00109 // copy of boost/archive/xml_iarchive.hpp:94 00110 // CRTP - Curiously Recurring Template Pattern 00111 class BIE_xml_iarchive : 00112 public BIE_xml_iarchive_impl<BIE_xml_iarchive> 00113 { 00114 public: 00115 BIE_xml_iarchive(std::istream & is, unsigned int flags = 0) : 00116 BIE_xml_iarchive_impl<BIE_xml_iarchive>(is, flags) {} 00117 00118 ~BIE_xml_iarchive(){} 00119 }; 00120 00121 typedef boost::archive::detail::polymorphic_iarchive_dispatch< 00122 BIE_xml_iarchive_impl<BIE_xml_iarchive> 00123 > BIE_polymorphic_xml_iarchive; 00124 } // namespace BIE 00125 00126 BOOST_SERIALIZATION_REGISTER_ARCHIVE(BIE::BIE_xml_iarchive) 00127 BOOST_SERIALIZATION_REGISTER_ARCHIVE(BIE::BIE_polymorphic_xml_iarchive) 00128 00129 #include <boost/archive/detail/abi_suffix.hpp> 00130 00131 #endif // BIE_POLYMORPHIC_XML_IARCHIVE_H Send suggestions, questions, and feedback to WEINBERG at ASTRO dot UMASS dot EDU. Documentation generated at Fri Mar 26 00:35:11 2010 by
|