Made OutputStreamWriter ABI stable
diff --git a/src/main/cpp/outputstreamwriter.cpp b/src/main/cpp/outputstreamwriter.cpp
index 35d7f38..703f31f 100644
--- a/src/main/cpp/outputstreamwriter.cpp
+++ b/src/main/cpp/outputstreamwriter.cpp
@@ -27,8 +27,19 @@
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,
CharsetEncoderPtr& enc1)
- : out(out1), enc(enc1)
+ : m_priv(std::make_unique<OutputStreamWriterPrivate>(out1, enc1))
{
if (out1 == 0)
{
@@ -57,12 +68,12 @@
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 @@
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 ee153b1..b3086f5 100644
--- a/src/main/include/log4cxx/helpers/outputstreamwriter.h
+++ b/src/main/include/log4cxx/helpers/outputstreamwriter.h
@@ -34,8 +34,7 @@
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 @@
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&);