Skip to content
Advertisement

How one can safely serialize std::basic_istream::pos_type?

In one of my projects I have to cache positional information about certain data chunks found in large files. I’ve already implemented a small API built around std::basic_istream<char>::pos_type placed in maps.

Now I need to serialize these descriptors into a bytestream and write them on a disk for further usage (on other *nix-machines as well). I have read that this type is platform-dependent but still rather being a POD-type. So my questions are:

  • Whether it will be better to save something besides of just offsets? E.g. std::fpos<std::mbstate_t> keeping the state of reading structure?
  • How can I safely obtain and restore the offset data from std::basic_istream<char>::pos_type (and other info if it is need)?

Thank you in advance.

Advertisement

Answer

The structure of std::fpos<mbstate_t> is unspecified and there may be non-trivial state in the mbstate_t. You certainly can’t portably serialize these objects. You can obtain a value of the offset type (std::streamoff) which is an integer type and its value can be serialized.

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement