24 Ağustos 2017 Perşembe

serialization make_array metodu

Giriş
Belirtilen belleği stream'e yazar.
Örnek
boost serialization normalde std::vector nesnesini yazıp okuyabilir. Sadece örnek olsun diye ekliyorum. Elimizde bir vector olsun
std::vector<int> v(100);
Şöyle yaparız.
std::ostringstream oss;

boost::archive::binary_oarchive oa(oss, flags);
oa << v.size() << boost::serialization::make_array(v.data(), v.size());

Örnek
Şöyle yaparız.
template <class Archive>
inline void save(Archive &ar, icu_55::UnicodeString const &s,const unsigned int) {
  auto sz = s.getCapacity();
  auto len = s.length();
  auto buf = s.getBuffer();

  if (!buf) throw std::invalid_argument("str");

  ar & sz & len & boost::serialization::make_array(buf, sz);
}

template <class Archive>
inline void load(Archive &ar, icu_55::UnicodeString &s, const unsigned int)
{
  size_t sz, len;
  ar & sz & len;
  auto buf = s.getBuffer(sz);
  if (!buf) throw std::invalid_argument("s");

  try {
    ar & boost::serialization::make_array(buf, sz);
  } 
  catch(...) {
    s.releaseBuffer(len);
    throw;
  }
  s.releaseBuffer(len);
}

Hiç yorum yok:

Yorum Gönder