|
Boost : |
From: Robert Ramey (ramey_at_[hidden])
Date: 2005-09-13 22:56:26
There might be people interested. You might upload it to the vault.
You don't have to write a test program. You can use all the boost archive
test programs with your own archives by following the instructions in the
documentation Reference/Archve Class Reference/ Testing. The batch file
run_archive_test.bat will run all the tests with your archive.
Robert Ramey
troy d. straszheim wrote:
> Hi Robert, boost...
>
> I've implemented a portable binary archive, wondering if there is
> general interest. I've tested (very thoroughly) on our target
> platforms, which are 32 and 64 bit linux, and osx on a g5, each
> platform reads and writes archives written by the others, down to the
> bit.
>
> The archive itself is stored little-endian (as the vast majority of my
> users are on intel hardware) so big-endian platforms are responsible
> for byteswapping, though this could be configurable. The problem
> types are (unsigned) long int and long double. For long int, the
> archive checks
> to see if it is small enough to fit into 32 bits, if so it stores it
> in 32 bits, otherwise it throws. For long double, it just throws, as
> that's 12 bytes on some platforms, 16 on others, no good way to handle
> this, and the type is seldom used anyhow. Float and double are
> assumed
> to be ieee754, and are just handled as blocks of 32 or 64 bytes. So
> if
> the write succeeds, the read is guaranteed to.
>
> Part of the idea here is that without resorting to widespread use of
> int32_t and friends, 4-byte-long platforms are always be able to write
> archives readable on 8-byte-long platforms. On 8-byte-long platforms,
> you could write archives readable on the smaller machines, but best to
> choose either int or long long int or a typedef thereof (int32_t or
> int64_t).
>
> The code is at http://svn.resophonic.com/pub/boost, in
>
> boost/archive/detail/portable_binary_archive.hpp
> boost/archive/portable_binary_iarchive.hpp
> boost/archive/portable_binary_oarchive.hpp
> libs/serialization/src/portable_binary_iarchive.cpp
> libs/serialization/src/portable_binary_oarchive.cpp
> libs/serialization/test/portable_binary_archive.cpp
>
> Issues that come to mind:
> The test isn't boost-test, that'd need rewriting. Haven't tried any
> of
> this on microsoft. Maybe there is some preferred way to detect
> endianness. The decision to go little-endian was relatively
> arbitrary,
> maybe the byte-swapping should be configurable. A possibility I
> considered was to upgrade all 32 bit longs to 64 bit and do the
> range-check/throw when *reading* (We nixed this idea, preferring to
> have
> the error come up sooner rather than later), maybe this should be
> configurable as well. There's surely platforms out there with other
> differences that aren't handled, I don't have a good feel for whether
> they would make the archive useless to a wider audience. The tests
> require having access to binary archives written on other platforms,
> haven't yet thought about how to put that together in the boost
> build/test context.
>
> So have a look, let me know if you're interested. Thanks again for a
> great lib.
>
> troy d. straszheim
>
>
>
>
>
>
> _______________________________________________
> 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