13#ifndef LUTILS_MSGHANDLER_HPP_
14#define LUTILS_MSGHANDLER_HPP_
18#define LUTILS_MESSAGE_LEVEL_ZERO "lutils_nolevel"
28template<
typename UI,
typename M,
typename T,
typename B>
33 if (m_handler !=
nullptr)
43template<
typename UI,
typename M,
typename T,
typename B>
47 m_have_messages(false)
59template<
typename UI,
typename M,
typename T,
typename B>
71template<
typename UI,
typename M,
typename T,
typename B>
80template<
typename UI,
typename M,
typename T,
typename B>
83 if (m_handler ==
nullptr)
86 if (m_handler ==
nullptr)
98template<
typename UI,
typename M,
typename T,
typename B>
101 typename t_messages::value_type m;
103 while (m_running ==
true)
111 while (!m_messages.empty())
113 m = m_messages.front();
115 if (levelcheck(m.first))
117 if (m_logfile ==
nullptr)
119 post(m.second, m.first);
128 m_have_messages =
false;
139template<
typename UI,
typename M,
typename T,
typename B>
145template<
typename UI,
typename M,
typename T,
typename B>
150 m_messages.push(std::make_pair(level, in));
160template<
typename UI,
typename M,
typename T,
typename B>
161template<
typename TR >
165 std::cerr <<
"[" << l <<
"]:"<< m << std::endl;
174template<
typename UI,
typename M,
typename T,
typename B>
175template<
typename TR >
189template<
typename UI,
typename M,
typename T,
typename B>
192 if (m_levels.empty())
197 typename t_levels::const_iterator minlevel = std::find(m_levels.begin(), m_levels.end(),
199 typename t_levels::const_iterator reqlevel = std::find(m_levels.begin(), m_levels.end(),
202 if (reqlevel == m_levels.end() || reqlevel < minlevel)
216template<
typename UI,
typename M,
typename T,
typename B>
219 *(m_file) << std::endl << m << std::endl;
227template<
typename UI,
typename M,
typename T,
typename B>
234 if (m_file !=
nullptr)
236 while (m_file->is_open())
243 while (!m_file->is_open())
245 m_file->open(logfile);
253template<
typename UI,
typename M,
typename T,
typename B>
265#define HAS_POST typedef void post_ret_type;
266#define DEFAULT_POST typedef void default_post_ret_type;
bool levelcheck(t_str const &level) const
void message(t_str const &messagein)
std::vector< t_str > t_levels
TR::default_post_ret_type post(t_str const &m, t_str const &l)
std::lock_guard< t_mut > t_lock
static msghandler & ref()
std::unique_ptr< t_file > t_file_ptr
void reopen(t_str const &)
void set(t_str const &logfile)
std::shared_ptr< t_str > t_str_ptr
void setlevel(t_str const &level, t_levels levels)
#define CONDITION_BOOL_WAIT_TRYFUN(cond, lock, var, tryfun)
#define CONDITION_STD_SET(cond, lock, var, val)
#define LUTILS_MESSAGE_LEVEL_ZERO