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.