diff options
| author | Carl Hetherington <cth@carlh.net> | 2025-09-16 17:38:43 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-09-16 23:49:13 +0200 |
| commit | 02dd03b4ef42db0a43b2011b5c34446f6f987c12 (patch) | |
| tree | 1d78e3b1b5bc63cf38d72edc9cba485bd9727c0d /src/stream_formatter.h | |
| parent | b33a97e3aa7dd3a0ddd3687762ff42a9a9e1079f (diff) | |
Extract StreamFormatter.
Diffstat (limited to 'src/stream_formatter.h')
| -rw-r--r-- | src/stream_formatter.h | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/src/stream_formatter.h b/src/stream_formatter.h new file mode 100644 index 00000000..acdcbb4c --- /dev/null +++ b/src/stream_formatter.h @@ -0,0 +1,92 @@ +/* + Copyright (C) 2025 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef LIBDCP_STREAM_FORMATTER_H +#define LIBDCP_STREAM_FORMATTER_H + + +#include "file.h" +#include "verify_report.h" + + +namespace dcp { + + +class StreamFormatter : public Formatter +{ +public: + StreamFormatter(boost::filesystem::path file) + : _file(file, "w") + {} + + class Wrap : public Formatter::Wrap + { + public: + Wrap() = default; + + Wrap(StreamFormatter* formatter, std::string const& close) + : _formatter(formatter) + , _close(close) + {} + + Wrap(StreamFormatter* formatter, std::string const& close, std::function<void ()> closer) + : _formatter(formatter) + , _close(close) + , _closer(closer) + {} + + Wrap(Wrap&& other) + { + std::swap(_formatter, other._formatter); + std::swap(_close, other._close); + std::swap(_closer, other._closer); + } + + ~Wrap() + { + if (_formatter) { + _formatter->file().puts(_close.c_str()); + } + if (_closer) { + _closer(); + } + } + + private: + StreamFormatter* _formatter = nullptr; + std::string _close; + std::function<void ()> _closer = nullptr; + }; + + dcp::File& file() { + return _file; + } + +protected: + dcp::File _file; +}; + + +} + + +#endif + |
