scoped_buffer_capture.h 948 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. //
  2. // scoped_buffer_capture.h
  3. // scoped_buffer_capture
  4. //
  5. // Created by Sam Jaffe on 6/2/18.
  6. //
  7. #pragma once
  8. #include <sstream>
  9. class scoped_buffer_capture_t {
  10. public:
  11. scoped_buffer_capture_t(std::ostream & stream)
  12. : buffer()
  13. , sbuf(stream.rdbuf())
  14. , out(&stream) {
  15. out->rdbuf(buffer.rdbuf());
  16. }
  17. ~scoped_buffer_capture_t() {
  18. out->rdbuf(sbuf);
  19. }
  20. scoped_buffer_capture_t(scoped_buffer_capture_t const &) = delete;
  21. scoped_buffer_capture_t & operator=(scoped_buffer_capture_t const &) = delete;
  22. scoped_buffer_capture_t(scoped_buffer_capture_t &&) = delete;
  23. scoped_buffer_capture_t & operator=(scoped_buffer_capture_t &&) = delete;
  24. std::string str() const { return buffer.str(); }
  25. private:
  26. std::stringstream buffer;
  27. std::streambuf * sbuf;
  28. std::ostream * out;
  29. };
  30. #define capture_stdout() scoped_buffer_capture_t cap_cout(std::cout)
  31. #define capture_stderr() scoped_buffer_capture_t cap_cerr(std::cerr)