In-Reply-To: <[EMAIL PROTECTED]> On Sun, 17 Nov 2002 10:19:23 +0100 Matthias Troyer ([EMAIL PROTECTED]) wrote: > It can cause troubles, since for my portable codes I use int64_t or > int32_t to be portable. In order for the library to write numbers in > binary consistently we should also serialize them as 64-bit ore 32-bit. > How do you do that when the bit size can vary from platform to > platform? Do you check at runtime what the number of bits is and > dispatch to serialization for that number of bits?
I don't see the problem. On one platform int32_t is typedef'd to long and the binary code boils down to: read_binary( &_Val, sizeof(long) ); On the other int32_t is typedef'd to short and the code boils down to: read_binary( &_Val, sizeof(short) ); But since sizeof(long) on the first platform is sizeof(short) on the second platform, the code is compatible. As long as the typedef's are right, how can the serialisation go wrong? > As I mentioned in the introductory part of my post, text archives are > much longer than binary ones and thus cause bandwidth problems for some > applications. If you do need variable-length you could use a /binary/ variable-length format. This wouldn't have the verbosity of text. Indeed, for many uses it would be shorter than your preferred fixed-length format. I posted an algorithm earlier. I think now it could be turned into a pair of archive subclasses and used (by these subclasses) as their int format. There would still be some cases where an int16_t would take up 3 bytes rather than 2. If this is a problem I wonder whether you should use write_binary() directly for those numbers, or rather, a wrapper that does that. Such wrappers don't need to be members of basic_xarchive. The main problem with this is that write_binary() may not produce very readable output for text archives. (In my view it should produce a hex dump.) -- Dave Harris _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost