Boost logo

Boost :

From: Robert Ramey (ramey_at_[hidden])
Date: 2008-07-10 12:46:24


The only implemenation of portable binary archive I can recommend is that in
the trunk
and release branches. Previous versions were crafted as an example of class
extension through derivation and were not tested nor reliable.

Robert Ramey

Jon Kroll wrote:
> Hello:
>
> I am attempting to use the boost serialization portable-binary
> archive.
> The 2 architectures I am working on are:
> 1. Intel on MS-Windows/Mac OS X
> 2. PowerPC on Mac OS X
>
> The attached sample code shows that an integer I serialize on PPC and
> then unserialize on Intel is not byte-swapped. And similarly, an
> integer I serialize on Intel is not byte-swapped on PPC.
>
> It does not appear to be a OS issue, because the data is unserialized
> properly from a MS-Windows Intel system to a Mac OS X Intel system,
> and vise versa.
>
> Another manifestation of this occurs when I serialize a large
> container, like a vector for example. The code has an exception
> because the size of the container is not byte-swapper. I can provide
> example code for this as well.
>
> This experience leads me to believe either:
> 1. The portable binary is not functioning properly with Mac OS X PPC
> or
> 2. I am not using the portable-binary archive properly, either
> configuration or code.
>
> Advise on this issue would be greatly appreciated.
>
> Best regards, Jon Kroll
> Ann Arbor Michigan
>
>
> =========================================================================
> BUILD:
> Windows: MS-Visual Studio 2005
> Mac OS X:
> g++ test_portable_binary.cpp portable_binary_iarchive.cpp
> portable_binary_oarchive.cpp -o test_portable_binary
> -I/Volumes/..../boost_1_35_0/
> -L/Volumes/..../boost_1_35_0/stage/lib/
> -lboost_serialization-mt-1_35
>
>
>
> CODE:
> ========================================================
>
> #include "boost/archive/portable_binary_oarchive.hpp"
> #include "boost/archive/portable_binary_iarchive.hpp"
>
> #include <vector>
> #include <sstream>
> #include <fstream>
> #include <iostream>
> #include <string>
>
> namespace
> {
> bool isIntelArch()
> {
> char endianTest[2] = { 1, 0 };
> return (*(short *) endianTest == 1);
> }
> bool isPPCArch()
> {
> return !isIntelArch();
> }
> }
>
> int main(int argc, char* argv[])
> {
> if (false) // generate test file
> {
> std::string fileName;
> if (isPPCArch())
> fileName = "PPC_portableBinaryLargeInt.ser";
> else if (isIntelArch())
> fileName = "Intel_portableBinaryLargeInt.ser";
>
> int val = 16000; // 0x3E80
>
> std::ofstream os(fileName.c_str(), std::ios::binary);
> portable_binary_oarchive oa(os);
> oa & val;
>
> return 0;
> }
>
> int unserializedVal = 0;
> {
> std::string fileName;
> if (isPPCArch())
> fileName = "Intel_portableBinaryLargeInt.ser";
> else if (isIntelArch())
> fileName = "PPC_portableBinaryLargeInt.ser";
>
> std::ifstream is(fileName.c_str(), std::ios::binary);
> portable_binary_iarchive ia(is);
>
> ia & unserializedVal;
> }
>
> if (0x3E80 == unserializedVal)
> {
> return 0; // This is the correct result!
> }
> if (0x803E == unserializedVal)
> {
> return -1; // This is an error, the value is not byte-swapped
> }
> if (0 == unserializedVal)
> {
> return -1; // This is an error, nothing got unserialized
> }
> return 0;
> }
>
>
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk