From c577ee0f43500a2fade34e62cc55cacb44be0840 Mon Sep 17 00:00:00 2001 From: camierjs Date: Wed, 18 Mar 2026 10:22:37 -0700 Subject: [PATCH] Pre simplify w/o SerialImpl --- general/glvis/stream.cpp | 17 +++-------- general/glvis/stream.hpp | 62 +++++++++------------------------------- 2 files changed, 17 insertions(+), 62 deletions(-) diff --git a/general/glvis/stream.cpp b/general/glvis/stream.cpp index 79733b6f20..637ed48eab 100644 --- a/general/glvis/stream.cpp +++ b/general/glvis/stream.cpp @@ -67,7 +67,6 @@ int glvis_stream::MpiRank() const return 0; } -/////////////////////////////////////////////////////////////////////////////// const auto IsMpiInitialized = []() { int flag; @@ -75,14 +74,6 @@ const auto IsMpiInitialized = []() return flag != 0; }; -const auto GetImpl = [](const bool serial, - const std::shared_ptr &data) - -> std::unique_ptr -{ - if (serial) { return std::make_unique(data); } - return std::make_unique(data); -}; - ///////////////////////////////////////////////////////////////////// glvis_stream::glvis_stream(const char*, int, int rank): std::iostream((dbg(rank >= 0 ? "Parallel" : "Serial"), nullptr)), @@ -92,7 +83,7 @@ glvis_stream::glvis_stream(const char*, int, int rank): serial(rank < 0), mpi_root(!mpi_initialized || mpi_rank == 0), data(std::make_shared()), - impl(GetImpl(serial, data)) + impl(data) { data->serial = serial; data->mpi_root = mpi_root; @@ -100,7 +91,7 @@ glvis_stream::glvis_stream(const char*, int, int rank): if (serial) { assert(rank == -1); } // link the stream buffer to the one provided by the implementation - this->rdbuf(impl->get_buf()); + this->rdbuf(impl.get_buf()); } ///////////////////////////////////////////////////////////////////// @@ -113,14 +104,14 @@ glvis_stream& glvis_stream::operator<<(ostream_manipulator pf) return *this; } -void glvis_stream::flush() { impl->flush(); } +void glvis_stream::flush() { impl.flush(); } void glvis_stream::glvis() { if (data->serial) { dbg("Serial"); - const auto size = impl->size(); + const auto size = impl.size(); dbg("stream size: {}", size); assert(size > 0); data->mpi_size = 1; diff --git a/general/glvis/stream.hpp b/general/glvis/stream.hpp index 4f30c7b4eb..d34ace4417 100644 --- a/general/glvis/stream.hpp +++ b/general/glvis/stream.hpp @@ -24,60 +24,24 @@ namespace mfem class glvis_stream : public std::iostream { -public: - struct IBase - { - virtual ~IBase() = default; - virtual size_t size() const = 0; - virtual std::streambuf* get_buf() = 0; - virtual std::streamsize precision() const = 0; - virtual std::streamsize precision(std::streamsize) = 0; - virtual int open(const char hostname[], int port) = 0; - virtual bool is_open() const = 0; - virtual int close() = 0; - virtual void flush() = 0; - }; - - ////////////////////////////////////////////////////////////////// - struct SerialImpl : public IBase + struct SerialImpl { const std::shared_ptr &data; SerialImpl(const std::shared_ptr &data): data(data) { data->stream.clear(); } - ~SerialImpl() override {} - size_t size() const override { return data->stream.tellp(); } - std::streambuf *get_buf() override { return data->stream.rdbuf(); } - std::streamsize precision() const override { return data->stream.precision(); } - std::streamsize precision(std::streamsize prec) override { return data->stream.precision(prec); } - int open(const char[], int) override { return 0; } - bool is_open() const override { return true; } - int close() override { return 0; } - void flush() override { data->stream.flush(); } + ~SerialImpl() {} + size_t size() const { return data->stream.tellp(); } + std::streambuf *get_buf() { return data->stream.rdbuf(); } + std::streamsize precision() const { return data->stream.precision(); } + std::streamsize precision(std::streamsize prec) { return data->stream.precision(prec); } + int open(const char[], int) { return 0; } + bool is_open() const { return true; } + int close() { return 0; } + void flush() { data->stream.flush(); } }; -#ifdef MFEM_USE_MPI - ////////////////////////////////////////////////////////////////// - struct ParallelImpl : public IBase - { - const std::shared_ptr &data; - ParallelImpl(const std::shared_ptr &data): data(data) - { - data->stream.clear(); - } - ~ParallelImpl() override { } - size_t size() const override { return data->stream.tellp(); } - std::streamsize precision() const override { return data->stream.precision(); } - std::streamsize precision(std::streamsize prec) override { return data->stream.precision(prec); } - std::streambuf *get_buf() override { return data->stream.rdbuf(); } - int open(const char hostname[], int port) override { return 0; } - bool is_open() const override { return true; } - int close() override { return 0; } - void flush() override { data->stream.flush(); } - }; -#endif // MFEM_USE_MPI - int MpiSize() const; int MpiRank() const; inline bool Root() const { return MpiRank() == 0; } @@ -92,8 +56,8 @@ public: virtual ~glvis_stream() {} - std::streamsize precision() const { return impl->precision(); } - std::streamsize precision(std::streamsize new_prec) { return impl->precision(new_prec); } + std::streamsize precision() const { return impl.precision(); } + std::streamsize precision(std::streamsize new_prec) { return impl.precision(new_prec); } using ostream_manipulator = std::ostream& (*)(std::ostream&); glvis_stream& operator<<(ostream_manipulator pf); @@ -120,7 +84,7 @@ private: const int mpi_size, mpi_rank; const bool serial, mpi_root; std::shared_ptr data; - std::unique_ptr impl; + SerialImpl impl; }; } // namespace mfem