summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/pstream.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/pstream.h')
-rw-r--r--src/lib/netlist/plib/pstream.h94
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