Hi,
I
have tried to create tests as you described.
I
assume you meant boost::archive::class_id_type
I
tried it also with class_id_optional_type, class_id_reference_type,
object_id_type, object_reference_type, version_type, tracking_type
. Are there any others I should check ?
I
guess I did not understand your request since almost all tests failed (also
with text archive)
For example the following simple test fails:
#include
<boost/archive/text_iarchive.hpp>
#include
<boost/archive/text_oarchive.hpp>
#include
<fstream>
#include <cassert>
#include
<iostream>
int main () {
char* file = "file"
;
boost::archive::class_id_optional_type cido
;
boost::archive::class_id_optional_type cido_(101) ;
std::ofstream ofs(file) ;
boost::archive::text_oarchive
oar(ofs) ;
oar << cido_ ;
ofs.close();
std::ifstream ifs(file) ;
boost::archive::text_iarchive
iar(ifs) ;
iar >> cido ;
std::cout
<< cido << std::endl ;
assert (cido_ == cido)
;
}
Could you help me understand what am I doing wrong
?
Thanks
Dan Leibovich
From:
boost-users-bounces@lists.boost.org
[mailto:boost-users-bounces@lists.boost.org] On Behalf Of Robert
Ramey
Sent: ב 26 פברואר 2007 22:29
To:
boost-users@lists.boost.org
Subject: Re: [Boost-users]
[Serialization] issue withportable_binary_oarchive
Sorry, I haven't looked into it.
Looking at ...basic_binary_archive I do see that the
meta data - object id, etc
are converted to integer types so it looks like this
issue was considered. So its not a super obvious issue. I do
believe that by making a small test - serializing each of the meta data
tag types, you might reveal which one - or more - are hanging things
up. Try making a small test:
boost::archive::class_id cid = 100;
ar << cid;
ar << 324;
...
boost::archive::class_id cid
ar >> cid;
assert(100 == cide);
ar >> i;
assert(i == 324);
...
That would be helpful.
Robert Ramey
Hi Robert,
Were you able to find some clue?
I don't think it is related to the problem but there are some
compilation warnings, do you have suggestion how to avoid
it?
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp: In member
function `void boost::archive::basic_binary_iarchive<Archive>::init() [with
Archive = portable_binary_iarchive]':
portable_binary_iarchive.hpp:116: instantiated from here
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning: choosing
`boost::archive::version_type::operator unsigned int&()' over `
boost::archive::version_type::operator const unsigned int&() const'
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning:
for conversion from `boost::archive::version_type' to `unsigned int'
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning:
because conversion sequence for the argument is better
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp: In member
function `void boost::archive::basic_binary_iarchive<Archive>::init() [with
Archive = boost::archive::binary_iarchive]':
../boost/boost_1_33_1/boost/archive/binary_iarchive.hpp:51: instantiated from `void boost::archive::binary_iarchive_impl<Archive>::init() [with Archive = boost::archive::binary_iarchive]'
../boost/boost_1_33_1/boost/archive/binary_iarchive.hpp:66: instantiated from `boost::archive::binary_iarchive_impl<Archive>::binary_iarchive_impl(std::istream&, unsigned int) [with Archive = boost::archive::binary_iarchive]'
../boost/boost_1_33_1/boost/archive/binary_iarchive.hpp:80: instantiated from here
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning: choosing
`boost::archive::version_type::operator unsigned int&()' over `
boost::archive::version_type::operator const unsigned int&() const'
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning:
for conversion from `boost::archive::version_type' to `unsigned int'
../boost/boost_1_33_1/boost/archive/impl/basic_binary_iarchive.ipp:67: warning:
because conversion sequence for the argument is better
Thank you
Dan
We'll look into it. If you get any
more information, feel free to share it.
Robert Ramey
Hi,
I am
trying to use the portable binary archive
example.
I need to serialize only
integers and strings.
I tried
it on linux and solaris5.8. The result binary stream is not the same
and deserialization fails.
I used hex viewer and notice that
the files are very similar except for some few differences which
results from endienness issues. Can it be that the metadata is
written differently on each platform.
This is
happens when I serialize derived class through a pointer to
base class. (I used BOOS_CLASS_EXPORT)
Below
you will find a test case. It produce differ output on linux and
solaris.
Am I
missing something?
Thanks
in advance
Dan Leibovich
#include <fstream>
#include
"portable_binary_oarchive.hpp"
#include
<boost/serialization/base_object.hpp>
#include
<boost/serialization/export.hpp>
class Base
{
private:
friend class
boost::serialization::access;
template<class Archive>
void
serialize(Archive & ar, const unsigned int
version)
{
ar &
x;
}
protected:
int x;
public:
Base() {} ;
Base(int x_) :
x(x_) {} ;
virtual void foo() {} ;
};
class
Derived1 : public Base {
private:
friend class
boost::serialization::access;
template<class
Archive>
void serialize(Archive & ar, const
unsigned int version)
{
ar &
boost::serialization::base_object<Base>(*this);
ar & y;
}
protected:
int
y;
public:
Derived1() {} ;
Derived1(int
x_, int y_) : Base(x_), y(y_) {} ;
virtual void foo()
{x++;}
};
class Derived2 : public Base
{
private:
friend class
boost::serialization::access;
template<class
Archive>
void serialize(Archive & ar, const
unsigned int version)
{
ar &
boost::serialization::base_object<Base>(*this);
ar & z;
}
protected:
bool
z;
public:
Derived2() {} ;
Derived2(int
x_) : Base(x_), z(true) {} ;
virtual void foo() {x--;}
};
class Container {
Base* b1
;
Base* b2 ;
friend class
boost::serialization::access;
template<class
Archive>
void serialize(Archive & ar, const
unsigned int version)
{
ar &
b1;
ar & b2 ;
}
public:
Container() {} ;
Container(int x,
int y) {
b1 = new Derived1(x,y) ;
b2 = new Derived2(x) ;
}
};
BOOST_CLASS_EXPORT(Derived1)
;
BOOST_CLASS_EXPORT(Derived2) ;
int main()
{
std::ofstream
ofs("filename");
const Container c(1,2)
;
portable_binary_oarchive
oa(ofs);
oa << c;
}
_______________________________________________
Boost-users
mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users
mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users
mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users