StreamWriter::Builder

This commit is contained in:
Christopher Dunn
2015-01-22 15:25:30 -06:00
parent 5fbfe3cdb9
commit 489707ff60
2 changed files with 63 additions and 12 deletions

View File

@@ -696,9 +696,21 @@ int MyStreamWriter::write(Value const& root) const
sout_ << root;
return 0;
}
class StreamWriterBuilder {
typedef StreamWriter::CommentStyle CommentStyle;
CommentStyle cs_;
public:
virtual ~StreamWriterBuilder();
virtual void setCommentStyle(CommentStyle cs);
virtual StreamWriter* newStreamWriter(std::ostream* sout) const;
};
StreamWriterBuilder::~StreamWriterBuilder()
{
}
void StreamWriterBuilder::setCommentStyle(CommentStyle cs)
{
cs_ = cs;
}
StreamWriter* StreamWriterBuilder::newStreamWriter(std::ostream* stream) const
{
// return new StyledStreamWriter(stream);
@@ -707,10 +719,26 @@ StreamWriter* StreamWriterBuilder::newStreamWriter(std::ostream* stream) const
StreamWriterBuilderFactory::~StreamWriterBuilderFactory()
{
}
StreamWriterBuilder* StreamWriterBuilderFactory::newStreamWriterBuilder()
StreamWriterBuilder* StreamWriterBuilderFactory::newStreamWriterBuilder() const
{
return new StreamWriterBuilder;
}
StreamWriter::Builder::Builder(StreamWriterBuilderFactory const* f)
: own_(f->newStreamWriterBuilder())
{
}
StreamWriter::Builder::~Builder()
{
delete own_;
}
void StreamWriter::Builder::setCommentStyle(CommentStyle cs)
{
own_->setCommentStyle(cs);
}
/// Do not take ownership of sout, but maintain a reference.
StreamWriter* newStreamWriter(std::ostream* sout);
std::string writeString(Value const& root, StreamWriterBuilder const& builder) {
std::ostringstream sout;
std::unique_ptr<StreamWriter> const sw(builder.newStreamWriter(&sout));