| 123456789101112131415161718192021222324252627282930313233343536373839 |
- //
- // scoped_buffer_capture.h
- // scoped_buffer_capture
- //
- // Created by Sam Jaffe on 6/2/18.
- //
- #pragma once
- #include <sstream>
- class scoped_buffer_capture_t {
- public:
- scoped_buffer_capture_t(std::ostream & stream)
- : buffer()
- , sbuf(stream.rdbuf())
- , out(&stream) {
- out->rdbuf(buffer.rdbuf());
- }
-
- ~scoped_buffer_capture_t() {
- out->rdbuf(sbuf);
- }
-
- scoped_buffer_capture_t(scoped_buffer_capture_t const &) = delete;
- scoped_buffer_capture_t & operator=(scoped_buffer_capture_t const &) = delete;
- scoped_buffer_capture_t(scoped_buffer_capture_t &&) = delete;
- scoped_buffer_capture_t & operator=(scoped_buffer_capture_t &&) = delete;
- std::string str() const { return buffer.str(); }
- private:
- std::stringstream buffer;
- std::streambuf * sbuf;
- std::ostream * out;
- };
- #define capture_stdout() scoped_buffer_capture_t cap_cout(std::cout)
- #define capture_stderr() scoped_buffer_capture_t cap_cerr(std::cerr)
|