This is an automated email from the ASF dual-hosted git repository.

rmiddleton pushed a commit to branch LOGCXX-518
in repository https://gitbox.apache.org/repos/asf/logging-log4cxx.git

commit 6f07ca3328d48a8b0663dc532cdb9d312509e041
Author: Robert Middleton <[email protected]>
AuthorDate: Sun Oct 16 11:03:15 2022 -0400

    Made OutputStreamWriter ABI stable
---
 src/main/cpp/outputstreamwriter.cpp                | 36 ++++++++++++++++------
 .../include/log4cxx/helpers/outputstreamwriter.h   | 10 ++----
 2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/src/main/cpp/outputstreamwriter.cpp 
b/src/main/cpp/outputstreamwriter.cpp
index 35d7f383..703f31f8 100644
--- a/src/main/cpp/outputstreamwriter.cpp
+++ b/src/main/cpp/outputstreamwriter.cpp
@@ -27,8 +27,19 @@ using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(OutputStreamWriter)
 
+struct OutputStreamWriter::OutputStreamWriterPrivate{
+       OutputStreamWriterPrivate(OutputStreamPtr& out1) : out(out1), 
enc(CharsetEncoder::getDefaultEncoder()){}
+
+       OutputStreamWriterPrivate(OutputStreamPtr& out1,
+                                                         CharsetEncoderPtr& 
enc1)
+               : out(out1), enc(enc1){}
+
+       OutputStreamPtr out;
+       CharsetEncoderPtr enc;
+};
+
 OutputStreamWriter::OutputStreamWriter(OutputStreamPtr& out1)
-       : out(out1), enc(CharsetEncoder::getDefaultEncoder())
+       : m_priv(std::make_unique<OutputStreamWriterPrivate>(out1))
 {
        if (out1 == 0)
        {
@@ -38,7 +49,7 @@ OutputStreamWriter::OutputStreamWriter(OutputStreamPtr& out1)
 
 OutputStreamWriter::OutputStreamWriter(OutputStreamPtr& out1,
        CharsetEncoderPtr& enc1)
-       : out(out1), enc(enc1)
+       : m_priv(std::make_unique<OutputStreamWriterPrivate>(out1, enc1))
 {
        if (out1 == 0)
        {
@@ -57,12 +68,12 @@ OutputStreamWriter::~OutputStreamWriter()
 
 void OutputStreamWriter::close(Pool& p)
 {
-       out->close(p);
+       m_priv->out->close(p);
 }
 
 void OutputStreamWriter::flush(Pool& p)
 {
-       out->flush(p);
+       m_priv->out->flush(p);
 }
 
 void OutputStreamWriter::write(const LogString& str, Pool& p)
@@ -78,24 +89,29 @@ void OutputStreamWriter::write(const LogString& str, Pool& 
p)
                char rawbuf[BUFSIZE];
                ByteBuffer buf(rawbuf, (size_t) BUFSIZE);
 #endif
-               enc->reset();
+               m_priv->enc->reset();
                LogString::const_iterator iter = str.begin();
 
                while (iter != str.end())
                {
-                       CharsetEncoder::encode(enc, str, iter, buf);
+                       CharsetEncoder::encode(m_priv->enc, str, iter, buf);
                        buf.flip();
-                       out->write(buf, p);
+                       m_priv->out->write(buf, p);
                        buf.clear();
                }
 
-               CharsetEncoder::encode(enc, str, iter, buf);
-               enc->flush(buf);
+               CharsetEncoder::encode(m_priv->enc, str, iter, buf);
+               m_priv->enc->flush(buf);
                buf.flip();
-               out->write(buf, p);
+               m_priv->out->write(buf, p);
 #ifdef LOG4CXX_MULTI_PROCESS
                delete []rawbuf;
 #endif
        }
 }
 
+OutputStreamPtr OutputStreamWriter::getOutPutStreamPtr() const
+{
+       return m_priv->out;
+}
+
diff --git a/src/main/include/log4cxx/helpers/outputstreamwriter.h 
b/src/main/include/log4cxx/helpers/outputstreamwriter.h
index ee153b16..b3086f5f 100644
--- a/src/main/include/log4cxx/helpers/outputstreamwriter.h
+++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h
@@ -34,8 +34,7 @@ namespace helpers
 class LOG4CXX_EXPORT OutputStreamWriter : public Writer
 {
        private:
-               OutputStreamPtr out;
-               CharsetEncoderPtr enc;
+               LOG4CXX_DECLARE_PRIVATE_MEMBER_PTR(OutputStreamWriterPrivate, 
m_priv)
 
        public:
                DECLARE_ABSTRACT_LOG4CXX_OBJECT(OutputStreamWriter)
@@ -53,12 +52,7 @@ class LOG4CXX_EXPORT OutputStreamWriter : public Writer
                virtual void write(const LogString& str, Pool& p);
                LogString getEncoding() const;
 
-#ifdef LOG4CXX_MULTI_PROCESS
-               OutputStreamPtr getOutPutStreamPtr()
-               {
-                       return out;
-               }
-#endif
+               OutputStreamPtr getOutPutStreamPtr() const;
 
        private:
                OutputStreamWriter(const OutputStreamWriter&);

Reply via email to