cpp-terminal
1.0.0
Small C++ library for writing multiplatform terminal applications
Loading...
Searching...
No Matches
iostream_initializer.cpp
Go to the documentation of this file.
1
/*
2
* cpp-terminal
3
* C++ library for writing multi-platform terminal applications.
4
*
5
* SPDX-FileCopyrightText: 2019-2025 cpp-terminal
6
*
7
* SPDX-License-Identifier: MIT
8
*/
9
10
#include "
cpp-terminal/iostream_initializer.hpp
"
11
12
#include "
cpp-terminal/iostream.hpp
"
13
#include "
cpp-terminal/private/exception.hpp
"
14
#include "
cpp-terminal/terminal.hpp
"
15
#include "
cpp-terminal/terminal_initializer.hpp
"
16
#include "
cpp-terminal/tty.hpp
"
17
18
#include <cstddef>
19
#include <iostream>
20
21
std::size_t
Term::IOStreamInitializer::m_counter
{0};
22
23
#ifdef _WIN32
24
#pragma warning(push)
25
#pragma warning(disable : 4297)
26
#endif
27
28
Term::IOStreamInitializer::IOStreamInitializer
() noexcept
29
try
30
{
31
if
(0 ==
m_counter
)
32
{
33
static
const
std::ios_base::Init iostreams_init;
// Init std::cout etc...
34
static
const
Term::TerminalInitializer
terminal_init;
// Make sure terminal is set up.
35
new
(&
Term::cout
)
TOstream
(
Term::Buffer::Type::FullBuffered
, BUFSIZ);
36
new
(&
Term::clog
)
TOstream
(
Term::Buffer::Type::LineBuffered
, BUFSIZ);
37
new
(&
Term::cerr
)
TOstream
(
Term::Buffer::Type::Unbuffered
, 0);
38
new
(&
Term::cin
)
TIstream
(
Term::Buffer::Type::FullBuffered
, BUFSIZ);
39
if
(
is_stdin_a_tty
()) { std::cin.rdbuf(
Term::cin
.rdbuf()); }
40
}
41
++
m_counter
;
42
}
43
catch
(...)
44
{
45
ExceptionHandler(
Private::ExceptionDestination::StdErr
);
46
}
47
48
Term::IOStreamInitializer::~IOStreamInitializer
() noexcept
49
try
50
{
51
--
m_counter
;
52
if
(0 ==
m_counter
)
53
{
54
(&
Term::cout
)->~
TOstream
();
55
(&
Term::cerr
)->~
TOstream
();
56
(&
Term::clog
)->~
TOstream
();
57
(&
Term::cin
)->~
TIstream
();
58
}
59
}
60
catch
(...)
61
{
62
ExceptionHandler(
Private::ExceptionDestination::StdErr
);
63
}
64
65
#ifdef _WIN32
66
#pragma warning(pop)
67
#endif
Term::Buffer::Type::LineBuffered
@ LineBuffered
Definition
buffer.hpp:25
Term::Buffer::Type::Unbuffered
@ Unbuffered
Definition
buffer.hpp:24
Term::Buffer::Type::FullBuffered
@ FullBuffered
Definition
buffer.hpp:26
Term::IOStreamInitializer::IOStreamInitializer
IOStreamInitializer() noexcept
Definition
iostream_initializer.cpp:28
Term::IOStreamInitializer::m_counter
static std::size_t m_counter
Definition
iostream_initializer.hpp:21
Term::IOStreamInitializer::~IOStreamInitializer
~IOStreamInitializer() noexcept
Definition
iostream_initializer.cpp:48
Term::TIstream
Definition
stream.hpp:21
Term::TOstream
Definition
stream.hpp:42
Term::TerminalInitializer
Definition
terminal_initializer.hpp:18
iostream.hpp
iostream_initializer.hpp
Term::Private::ExceptionDestination::StdErr
@ StdErr
Definition
exception.hpp:90
Term::clog
TOstream & clog
Definition
iostream.cpp:23
Term::cout
TOstream & cout
Definition
iostream.cpp:22
Term::cerr
TOstream & cerr
Definition
iostream.cpp:24
Term::cin
TIstream & cin
Definition
iostream.cpp:25
Term::is_stdin_a_tty
bool is_stdin_a_tty()
Check if stdin is a tty.
Definition
tty.cpp:32
exception.hpp
terminal.hpp
terminal_initializer.hpp
tty.hpp
cpp-terminal
iostream_initializer.cpp
Generated by
1.13.2