Re: serialization of arrays
aaragon wrote:
....
Ok, got the point, but all this still doesn't solve my original
problem, which was to send a boost::dynamic_bitset using MPI. I will
start a traits class and I guess that I could send it as a string
since the dynamic_bitset supports a function that creates a string
with the boolean values. I'll go back to you guys later. Thanks for
answering.
You will need to "serialize" the bitset which has two components -
number of bits and the bits themselves. Since you can only output
multiples of 8 bits you need to send not only the size in bytes
(serializer.size()), you also need to send the number of significant
bits in the "remainder byte".
e.g.
size=1
bits=01010101
^^^ number of bits in the last byte.
this would be the bit sequence "01010".
ex. 2.
size=0
bytes=
no bits
size=2
bits= 10010100 00001111
^^^ number of bits to use in last byte
would mean: 111110010
class SerializerDynamicBitset
{
std::vector<char> m_data;
enum { bits_per_byte=8, remainder_bits_size=3 };
public:
SerializerDynamicBitset( const boost::dynamic_bitset & i_data )
: m_data(
(i_data.size() + remainder_bits_size + bits_per_byte -1)/
bits_per_byte
)
{
m_data[ 0 ] = i_data.size() % bits_per_byte;
unsigned char l_val = 0x08; // bit location
... now iterate through the bit set popping bits from
... the input and pushing it into the m_data array
}
const char * buffer() const
{
return & m_data[0];
}
const size_t size()
{
return m_data.size();
}
};
.... you'll need a corresponding deserializer function.