31 void serialize (
const std::vector<std::string>& strings, std::vector<uint32_t>& storage ) {
36 copy(strings.begin(), strings.end(), std::ostream_iterator<std::string>(
ostream, delimiter));
38 unsigned sizeToReserve =
ostream.str().size();
41 unsigned int sizeToPad = getPadding(sizeToReserve);
43 if ( sizeToPad != 0 ) {
44 sizeToReserve += sizeToPad;
45 for (
unsigned i = 0 ; i < sizeToPad; i++ )
51 const uint32_t* udata =
reinterpret_cast<const uint32_t*
> (
s.data());
52 storage.push_back(strings.size());
53 storage.insert(storage.end(), udata, udata+sizeToReserve/
sizeof(uint32_t));
62 std::size_t
deserialize (std::vector<uint32_t>::const_iterator first,
63 std::vector<uint32_t>::const_iterator last,
64 std::vector<std::string>& strings)
66 std::size_t storageSize = std::distance(first, last);
68 if ( storageSize <= 1 )
return storageSize;
69 unsigned int numOfStrings = *first;
71 std::string whole(
reinterpret_cast<const char*
>(&*(first+1)),
72 (storageSize-1)*
sizeof(uint32_t));
73 std::istringstream istream;
79 unsigned int readInStrings=0;
82 while ( istream.good() && readInStrings < numOfStrings ) {
83 getline(istream, one, delimiter[0]);
84 strings.push_back(one);
86 nChars += one.size() + 1;
89 return 1 + (nChars+getPadding(nChars))/
sizeof(uint32_t);