]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/serialization/test/test_multiple_inheritance.cpp
1 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2 // test_multiple_inheritance.cpp
4 // (C) Copyright 2009 Robert Ramey.
5 // Use, modification and distribution is subject to the Boost Software
6 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt)
9 // test of serialization library for multiple inheritence situations
14 #include <boost/config.hpp>
15 #include <cstdio> // remove
16 #if defined(BOOST_NO_STDC_NAMESPACE)
22 #include "test_tools.hpp"
24 #include <boost/serialization/access.hpp>
25 #include <boost/serialization/base_object.hpp>
26 #include <boost/serialization/nvp.hpp>
27 #include <boost/serialization/export.hpp>
32 Base1(int x
) : m_x(1 + x
) {}
34 bool operator==(Base1
& rhs
) const {
35 return m_x
== rhs
.m_x
;
38 friend class boost::serialization::access
;
39 template<class Archive
>
40 void serialize(Archive
& ar
, const unsigned int /* file_version */) {
41 ar
& BOOST_SERIALIZATION_NVP(m_x
);
45 //BOOST_CLASS_EXPORT(Base1)
50 Base2(int x
) : m_x(2 + x
) {}
52 bool operator==(Base2
& rhs
) const {
53 return m_x
== rhs
.m_x
;
56 friend class boost::serialization::access
;
57 template<class Archive
>
58 void serialize(Archive
& ar
, const unsigned int /* file_version */) {
59 ar
& BOOST_SERIALIZATION_NVP(m_x
);
63 //BOOST_CLASS_EXPORT(Base2)
76 bool operator==(Sub
& rhs
) const {
77 if(! Base2::operator==(rhs
))
79 if(! Base1::operator==(rhs
))
81 return m_x
== rhs
.m_x
;
86 friend class boost::serialization::access
;
87 template<class Archive
>
88 void serialize(Archive
&ar
, const unsigned int /* file_version */)
90 ar
& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base1
);
91 ar
& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base2
);
92 ar
& BOOST_SERIALIZATION_NVP(m_x
);
96 BOOST_CLASS_EXPORT(Sub
)
99 test_main( int /* argc */, char* /* argv */[] )
101 const char * testfile
= boost::archive::tmpnam(NULL
);
102 BOOST_REQUIRE(NULL
!= testfile
);
108 test_ostream
ofs(testfile
);
109 test_oarchive
oa(ofs
);
110 oa
<< boost::serialization::make_nvp("Base2", pb2
);
115 test_istream
ifs(testfile
);
116 test_iarchive
ia(ifs
);
117 ia
>> boost::serialization::make_nvp("Base2", pb2_1
);
119 Sub
*s1
= dynamic_cast<Sub
*>(pb2
);
120 BOOST_CHECK(0 != s1
);
121 Sub
*s2
= dynamic_cast<Sub
*>(pb2_1
);
122 BOOST_CHECK(0 != s2
);
123 BOOST_CHECK(*s1
== *s2
);