diff options
Diffstat (limited to 'src/lib/netlist/plib/pstream.h')
-rw-r--r-- | src/lib/netlist/plib/pstream.h | 94 |
1 files changed, 85 insertions, 9 deletions
diff --git a/src/lib/netlist/plib/pstream.h b/src/lib/netlist/plib/pstream.h index 2492d01d141..17a5f2702a4 100644 --- a/src/lib/netlist/plib/pstream.h +++ b/src/lib/netlist/plib/pstream.h @@ -41,7 +41,7 @@ typedef std::ostringstream pomemstream; // pstream: things common to all streams // ----------------------------------------------------------------------------- -class pstream : public nocopyassign +class pstream { public: @@ -50,6 +50,9 @@ public: static constexpr pos_type SEEK_EOF = static_cast<pos_type>(-1); + COPYASSIGN(pstream, delete) + pstream &operator=(pstream &&) noexcept = delete; + bool seekable() const { return ((m_flags & FLAG_SEEKABLE) != 0); } void seekp(const pos_type n) @@ -69,9 +72,8 @@ protected: explicit pstream(const unsigned flags) : m_flags(flags) { } - pstream(pstream &&src) noexcept : m_flags(src.m_flags) - { - } + pstream(pstream &&src) noexcept = default; + virtual ~pstream() = default; virtual void vseek(const pos_type n) = 0; @@ -105,6 +107,11 @@ public: using value_type = T; + ~pistream_base() noexcept override = default; + + COPYASSIGN(pistream_base, delete) + pistream_base &operator=(pistream_base &&src) noexcept = delete; + bool eof() const { return ((flags() & FLAG_EOF) != 0); } pos_type read(T *buf, const pos_type n) @@ -116,6 +123,7 @@ protected: pistream_base() : pstream(0) {} explicit pistream_base(const unsigned flags) : pstream(flags) {} pistream_base(pistream_base &&src) noexcept : pstream(std::move(src)) {} + /* read up to n bytes from stream */ virtual size_type vread(T *buf, const size_type n) = 0; }; @@ -134,6 +142,12 @@ public: using value_type = T; + postream_base() = default; + ~postream_base() noexcept override = default; + + COPYASSIGN(postream_base, delete) + postream_base &operator=(postream_base &&src) noexcept = delete; + void write(const T *buf, const size_type n) { vwrite(buf, n); @@ -142,6 +156,7 @@ public: protected: explicit postream_base(unsigned flags) : pstream(flags) {} postream_base(postream_base &&src) noexcept : pstream(std::move(src)) {} + /* write n bytes to stream */ virtual void vwrite(const T *buf, const size_type n) = 0; @@ -160,6 +175,8 @@ public: pomemstream(); + COPYASSIGN(pomemstream, delete) + pomemstream(pomemstream &&src) noexcept : postream(std::move(src)) , m_pos(src.m_pos) @@ -169,6 +186,7 @@ public: { src.m_mem = nullptr; } + pomemstream &operator=(pomemstream &&src) = delete; ~pomemstream() override; @@ -198,6 +216,9 @@ public: , m_buf(std::move(src.m_buf)) { src.m_buf = ""; } + COPYASSIGN(postringstream, delete) + postringstream &operator=(postringstream &&src) = delete; + ~postringstream() override = default; const pstring &str() { return m_buf; } @@ -234,6 +255,8 @@ public: src.m_file = nullptr; src.m_actually_close = false; } + COPYASSIGN(pofilestream, delete) + pofilestream &operator=(pofilestream &&src) = delete; ~pofilestream() override; @@ -262,6 +285,11 @@ class pstderr : public pofilestream { public: pstderr(); + pstderr(pstderr &&src) noexcept = default; + pstderr &operator=(pstderr &&src) = delete; + COPYASSIGN(pstderr, delete) + + ~pstderr() noexcept override= default; }; // ----------------------------------------------------------------------------- @@ -272,6 +300,11 @@ class pstdout : public pofilestream { public: pstdout(); + pstdout(pstdout &&src) noexcept = default; + pstdout &operator=(pstdout &&src) = delete; + COPYASSIGN(pstdout, delete) + + ~pstdout() noexcept override = default; }; // ----------------------------------------------------------------------------- @@ -295,6 +328,8 @@ public: src.m_actually_close = false; src.m_file = nullptr; } + COPYASSIGN(pifilestream, delete) + pifilestream &operator=(pifilestream &&src) = delete; protected: pifilestream(void *file, const pstring &name, const bool do_close); @@ -322,6 +357,9 @@ class pstdin : public pifilestream public: pstdin(); + pstdin(pstdin &&src) noexcept = default; + pstdin &operator=(pstdin &&src) = delete; + COPYASSIGN(pstdin, delete) ~pstdin() override = default; }; @@ -344,6 +382,8 @@ public: { src.m_mem = nullptr; } + COPYASSIGN(pimemstream, delete) + pimemstream &operator=(pimemstream &&src) = delete; explicit pimemstream(const pomemstream &ostrm); @@ -387,6 +427,9 @@ public: { set_mem(m_str.c_str(), std::strlen(m_str.c_str())); } + COPYASSIGN(pistringstream, delete) + pistringstream &operator=(pistringstream &&src) = delete; + ~pistringstream() override = default; private: @@ -407,17 +450,20 @@ struct constructor_helper std::unique_ptr<pistream> operator()(T &&s) { return std::move(plib::make_unique<T>(std::move(s))); } }; -class putf8_reader : plib::nocopyassign +// NOLINTNEXTLINE(cppcoreguidelines-special-member-functions) +class putf8_reader { public: + COPYASSIGN(putf8_reader, delete) + putf8_reader &operator=(putf8_reader &&src) = delete; virtual ~putf8_reader() = default; template <typename T> friend struct constructor_helper; template <typename T> - putf8_reader(T &&strm) // NOLINT(misc-forwarding-reference-overload, bugprone-forwarding-reference-overload) + putf8_reader(T &&strm) // NOLINT(cppcoreguidelines-special-member-functions, misc-forwarding-reference-overload, bugprone-forwarding-reference-overload) : m_strm(std::move(constructor_helper<T>()(std::move(strm)))) // NOLINT(bugprone-move-forwarding-reference) {} @@ -464,12 +510,16 @@ struct constructor_helper<std::unique_ptr<pistream>> // putf8writer_t: writer on top of ostream // ----------------------------------------------------------------------------- -class putf8_writer : plib::nocopyassign +class putf8_writer { public: explicit putf8_writer(postream *strm) : m_strm(strm) {} putf8_writer(putf8_writer &&src) noexcept : m_strm(src.m_strm) {} + + COPYASSIGN(putf8_writer, delete) + putf8_writer &operator=(putf8_writer &&src) = delete; + virtual ~putf8_writer() = default; void writeline(const pstring &line) const @@ -504,6 +554,8 @@ public: { } + COPYASSIGNMOVE(putf8_fmt_writer, delete) + ~putf8_fmt_writer() override = default; //protected: @@ -516,11 +568,15 @@ private: // pbinary_writer_t: writer on top of ostream // ----------------------------------------------------------------------------- -class pbinary_writer : public plib::nocopyassign +class pbinary_writer { public: explicit pbinary_writer(postream &strm) : m_strm(strm) {} pbinary_writer(pbinary_writer &&src) noexcept : m_strm(src.m_strm) {} + + COPYASSIGN(pbinary_writer, delete) + postringstream &operator=(pbinary_writer &&src) = delete; + virtual ~pbinary_writer() = default; template <typename T> @@ -549,11 +605,15 @@ private: postream &m_strm; }; -class pbinary_reader : public plib::nocopyassign +class pbinary_reader { public: explicit pbinary_reader(pistream &strm) : m_strm(strm) {} pbinary_reader(pbinary_reader &&src) noexcept : m_strm(src.m_strm) { } + + COPYASSIGN(pbinary_reader, delete) + pbinary_reader &operator=(pbinary_reader &&src) = delete; + virtual ~pbinary_reader() = default; template <typename T> @@ -594,6 +654,22 @@ inline void copystream(postream &dest, pistream &src) dest.write(buf.data(), r); } +struct perrlogger +{ + template <typename ... Args> + perrlogger(Args&& ... args) + { + h()(std::forward<Args>(args)...); + } +private: + static putf8_fmt_writer &h() + { + static plib::pstderr perr_strm; + static plib::putf8_fmt_writer perr(&perr_strm); + return perr; + } +}; + } // namespace plib |