Toggle navigation
MoMEMta
core
include
logger
stdout_sink.h
1
/*
2
* MoMEMta: a modular implementation of the Matrix Element Method
3
* Copyright (C) 2016 Universite catholique de Louvain (UCL), Belgium
4
*
5
* This program is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
// Heavily inspired by spdlog, Copyright(c) 2015 Gabi Melman
20
21
#pragma once
22
23
#include <logger/base_sink.h>
24
#include <logger/null_mutex.h>
25
26
#include <cstdio>
27
#include <memory>
28
#include <mutex>
29
30
namespace
logger
{
31
32
namespace
sinks {
33
34
template
<
class
Mutex>
35
class
stdout_sink
:
public
base_sink
<Mutex> {
36
using
type
=
stdout_sink<Mutex>
;
37
public
:
38
stdout_sink
() {}
39
static
std::shared_ptr<type> instance() {
40
static
std::shared_ptr<type> instance = std::make_shared<type>();
41
return
instance;
42
}
43
44
void
_sink_it(
const
details::log_msg
& msg)
override
{
45
auto
s = msg.formatted.str();
46
fwrite(s.data(),
sizeof
(char), s.size(), stdout);
47
flush();
48
}
49
50
void
flush()
override
{
51
fflush(stdout);
52
}
53
};
54
55
typedef
stdout_sink<details::null_mutex>
stdout_sink_st
;
56
typedef
stdout_sink<std::mutex>
stdout_sink_mt
;
57
58
59
}
60
61
}
logger::details::log_msg
Definition:
log_msg.h:34
logger::sinks::base_sink
Definition:
base_sink.h:32
logger
Definition:
base_sink.h:27
logger::sinks::stdout_sink
Definition:
stdout_sink.h:35
Generated by
1.8.13