inline stream_offset position_to_offset(std::streampos pos) { // use implementation-specific member function get_fpos_t(). return fpos_t_to_offset(pos.get_fpos_t()) + stream_offset(std::streamoff(pos)) - stream_offset(std::streamoff(pos.get_fpos_t())); }
// Extracts the member _Fpos from a std::fpos inline std::fpos_t streampos_to_fpos_t(std::streampos pos) { # if defined (_CPPLIB_VER) || defined(__IBMCPP__) return pos.seekpos(); # else return pos.get_fpos_t(); # endif }
inline OSGA_Archive::pos_type ARCHIVE_POS( const std::streampos & pos ) { #if defined(_CPPLIB_VER)//newer Dinkumware(eg: one included with VC++ 2003,2005) fpos_t position = pos.seekpos(); #else // older Dinkumware (eg: one included in Win Server 2003 Platform SDK ) fpos_t position = pos.get_fpos_t(); #endif std::streamoff offset = pos.operator std::streamoff( ) - _FPOSOFF( position ); return OSGA_Archive::pos_type( position + offset ); }