diff options
author | 2020-06-28 13:13:57 +0200 | |
---|---|---|
committer | 2020-06-28 13:14:42 +0200 | |
commit | 3fcdfa0a9b1783f556abe36c9fb927c25c2170ee (patch) | |
tree | 321f4d3c3e080448f020ee3d037abe6b453a511e /src/lib/netlist/plib/pstream.h | |
parent | 3832644d4ad36d5b5807b3d2d9ff6d284bd86236 (diff) |
netlist: code maintenance
* decrease use of reinterpret_cast.
* change some defaults for better ttl game optimization.
* various code cleanup.
Diffstat (limited to 'src/lib/netlist/plib/pstream.h')
-rw-r--r-- | src/lib/netlist/plib/pstream.h | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h index b96c1f91a3b..dcb2b0652cf 100644 --- a/src/lib/netlist/plib/pstream.h +++ b/src/lib/netlist/plib/pstream.h @@ -27,8 +27,29 @@ namespace plib { + /// \brief wrapper around isteam read + /// + template <typename S, typename T> + static inline S & istream_read(S &is, T * data, size_t len) + { + using ct = typename S::char_type; + static_assert((sizeof(T) % sizeof(ct)) == 0, "istream_read sizeof issue"); + // FIXME: throw on + return is.read(reinterpret_cast<ct *>(data), gsl::narrow<std::streamsize>(len * sizeof(T))); + } + + /// \brief wrapper around osteam write + /// + template <typename S, typename T> + static inline S & ostream_write(S &os, const T * data, size_t len) + { + using ct = typename S::char_type; + static_assert((sizeof(T) % sizeof(ct)) == 0, "ostream_write sizeof issue"); + // FIXME: throw on + return os.write(reinterpret_cast<const ct *>(data), gsl::narrow<std::streamsize>(len * sizeof(T))); + } + /// -/// \brief: putf8reader_t: reader on top of istream. /// /// putf8reader_t digests linux & dos/windows text files /// @@ -188,23 +209,23 @@ public: template <typename T> void write(const T &val) { - m_strm.write(reinterpret_cast<const std::ostream::char_type *>(&val), sizeof(T)); + ostream_write(m_strm, &val, 1); } void write(const pstring &s) { - const auto *const sm = reinterpret_cast<const std::ostream::char_type *>(s.c_str()); - const auto sl(static_cast<std::streamsize>(std::char_traits<std::ostream::char_type>::length(sm))); + auto *sm = s.c_str(); + const auto sl(std::char_traits<pstring::mem_t>::length(sm)); write(sl); - m_strm.write(sm, sl); + ostream_write(m_strm, sm, sl); } template <typename T> void write(const std::vector<T> &val) { - const auto sz(static_cast<std::streamsize>(val.size())); + const auto sz(val.size()); write(sz); - m_strm.write(reinterpret_cast<const std::ostream::char_type *>(val.data()), sz * gsl::narrow<std::streamsize>(sizeof(T))); + ostream_write(m_strm, val.data(), sz); } private: @@ -225,7 +246,7 @@ public: template <typename T> void read(T &val) { - m_strm.read(reinterpret_cast<std::istream::char_type *>(&val), gsl::narrow<std::streamsize>(sizeof(T))); + istream_read(m_strm, &val, 1); } void read( pstring &s) @@ -244,7 +265,7 @@ public: std::size_t sz = 0; read(sz); val.resize(sz); - m_strm.read(reinterpret_cast<std::istream::char_type *>(val.data()), gsl::narrow<std::streamsize>(sizeof(T) * sz)); + istream_read(m_strm, val.data(), sz); } private: |