~singpolyma/biboumi

biboumi/tests/io_tester.hpp -rw-r--r-- 835 bytes
12223354Stephen Paul Weber Fix caps hash 2 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma once

#include <ostream>
#include <sstream>

/**
 * Redirects a stream into a streambuf until the object is destroyed.
 */
template <typename StreamType>
class IoTester
{
public:
  IoTester(StreamType& ios):
    stream{},
    ios(ios),
    old_buf(ios.rdbuf())
  {
    // Redirect the given os into our stringstream’s buf
    this->ios.rdbuf(this->stream.rdbuf());
  }
  ~IoTester()
  {
    this->ios.rdbuf(this->old_buf);
  }
  IoTester& operator=(const IoTester&) = delete;
  IoTester& operator=(IoTester&&) = delete;
  IoTester(const IoTester&) = delete;
  IoTester(IoTester&&) = delete;

  std::string str() const
  {
    return this->stream.str();
  }

  void set_string(const std::string& s)
  {
    this->stream.str(s);
  }

private:
  std::stringstream stream;
  StreamType& ios;
  std::streambuf* const old_buf;
};