scoped_buffer_capture.h 928 B

12345678910111213141516171819202122232425262728293031323334353637
  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. class scoped_buffer_capture_t {
  9. public:
  10. scoped_buffer_capture_t(std::ostream & stream)
  11. : buffer()
  12. , sbuf(stream.rdbuf())
  13. , out(&stream) {
  14. out->rdbuf(buffer.rdbuf());
  15. }
  16. ~scoped_buffer_capture_t() {
  17. out->rdbuf(sbuf);
  18. }
  19. scoped_buffer_capture_t(scoped_buffer_capture_t const &) = delete;
  20. scoped_buffer_capture_t & operator=(scoped_buffer_capture_t const &) = delete;
  21. scoped_buffer_capture_t(scoped_buffer_capture_t &&) = delete;
  22. scoped_buffer_capture_t & operator=(scoped_buffer_capture_t &&) = delete;
  23. std::string str() const { return buffer.str(); }
  24. private:
  25. std::stringstream buffer;
  26. std::streambuf * sbuf;
  27. std::ostream * out;
  28. };
  29. #define capture_stdout() scoped_buffer_capture_t cap_cout(std::cout)
  30. #define capture_stderr() scoped_buffer_capture_t cap_cerr(std::cerr)