Subversion Repositories Games.Chess Giants

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
99 pmbaty 1
/*
2
    Texel - A UCI chess engine.
3
    Copyright (C) 2013  Peter Ă–sterlund, peterosterlund2@gmail.com
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
/*
20
 * logger.hpp
21
 *
22
 *  Created on: Aug 6, 2013
23
 *      Author: petero
24
 */
25
 
26
#ifndef LOGGER_HPP_
27
#define LOGGER_HPP_
28
 
29
#include "util.hpp"
30
#include "timeUtil.hpp"
31
 
32
#include <sstream>
33
#include <iostream>
34
#include <iomanip>
35
#include <mutex>
36
 
37
 
38
namespace Logger {
39
    /** Get mutex for log synchronization. */
40
    std::mutex& getLogMutex();
41
 
42
 
43
    /** Thread-safe logging to cout. */
44
    template <typename Func> void log(Func func) {
45
        std::stringstream ss;
46
        {
47
            std::stringstream t;
48
            t.precision(6);
49
            t << std::fixed << currentTime() << ' ';
50
            ss << t.str();
51
        }
52
        func(ss);
53
        std::lock_guard<std::mutex> L(getLogMutex());
54
        std::cout << ss.str() << std::endl;
55
    }
56
};
57
 
58
#endif /* LOGGER_HPP_ */