BioCMAMC-ST
redirection.hpp
1#ifndef __COMMON_REDIRECTION_HPP__
2#define __COMMON_REDIRECTION_HPP__
3#include <memory>
4#include <optional>
5#include <sstream>
6#include <string>
7namespace IO
8{
14
15 class RedirectGuard;
16
18 {
19 public:
20 RedirectHandle(std::shared_ptr<RedirectGuard> owner,
21 std::shared_ptr<bool> active_flag,
22 bool owns,
23 RedirectionType _type);
24
26
29
32
33 private:
34 std::shared_ptr<RedirectGuard> owner_ptr;
35 std::shared_ptr<bool> active_flag;
36 bool owns_guard = false;
37 [[maybe_unused]] RedirectionType type;
38 };
39
40 class RedirectGuard : public std::enable_shared_from_this<RedirectGuard>
41 {
42 public:
44
45 [[nodiscard("Handle must be held")]] RedirectHandle redirect();
46
47 [[nodiscard("Handle must be held")]] RedirectHandle redirect_to_file();
48
49 void restore();
50
51 std::optional<std::string> getCapturedOutput() const;
52
53 private:
54 friend class RedirectHandle;
55
56 bool has_been_redirected = false;
57 std::streambuf* coutbuf = nullptr;
58 std::stringstream buffer;
60
61 std::shared_ptr<bool> active_flag;
62 };
63} // namespace IO
64#endif
std::shared_ptr< bool > active_flag
Definition redirection.hpp:61
RedirectHandle redirect_to_file()
Definition logger.cpp:90
void restore()
Definition logger.cpp:123
bool has_been_redirected
Definition redirection.hpp:56
std::optional< std::string > getCapturedOutput() const
Definition logger.cpp:151
std::stringstream buffer
Definition redirection.hpp:58
RedirectGuard()
Definition logger.cpp:58
int original_stdout_fd
Definition redirection.hpp:59
std::streambuf * coutbuf
Definition redirection.hpp:57
RedirectHandle redirect()
Definition logger.cpp:63
friend class RedirectHandle
Definition redirection.hpp:54
RedirectionType type
Definition redirection.hpp:37
RedirectHandle(RedirectHandle &&)=default
RedirectHandle & operator=(const RedirectHandle &)=delete
std::shared_ptr< RedirectGuard > owner_ptr
Definition redirection.hpp:34
~RedirectHandle()
Definition logger.cpp:161
std::shared_ptr< bool > active_flag
Definition redirection.hpp:35
RedirectHandle(const RedirectHandle &)=delete
bool owns_guard
Definition redirection.hpp:36
RedirectHandle(std::shared_ptr< RedirectGuard > owner, std::shared_ptr< bool > active_flag, bool owns, RedirectionType _type)
Definition logger.cpp:49
RedirectHandle & operator=(RedirectHandle &&)=default
Definition impl_post_process.hpp:11
RedirectionType
Definition redirection.hpp:10
@ File
Definition redirection.hpp:12
@ Buffer
Definition redirection.hpp:11