\doxysection{/home/chr/devel/\+Ph\+D/\+Environment/pub/\+PCBEnv/pcbenv/cxx/\+Log.hpp File Reference}
\hypertarget{Log_8hpp}{}\label{Log_8hpp}\index{/home/chr/devel/PhD/Environment/pub/PCBEnv/pcbenv/cxx/Log.hpp@{/home/chr/devel/PhD/Environment/pub/PCBEnv/pcbenv/cxx/Log.hpp}}
{\ttfamily \#include $<$iomanip$>$}\newline
{\ttfamily \#include $<$chrono$>$}\newline
{\ttfamily \#include $<$fstream$>$}\newline
{\ttfamily \#include $<$sstream$>$}\newline
{\ttfamily \#include $<$set$>$}\newline
{\ttfamily \#include $<$string$>$}\newline
{\ttfamily \#include $<$thread$>$}\newline
\doxysubsubsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
class \mbox{\hyperlink{classLogFile}{Log\+File}}
\item 
class \mbox{\hyperlink{classLogger}{Logger}}
\end{DoxyCompactItemize}
\doxysubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{Log_8hpp_afbf5bed849ed6f6eb3da6a3908fa1d8c}{GYM\+\_\+\+PCB\+\_\+\+MAX\+\_\+\+LOG\+\_\+\+LEVEL}}~3
\item 
\#define \mbox{\hyperlink{Log_8hpp_af10f195f11036360aa71cd3f68158703}{GYM\+\_\+\+PCB\+\_\+\+LOG\+\_\+\+SHOW\+\_\+\+THREAD}}~0
\item 
\#define \mbox{\hyperlink{Log_8hpp_ad02eb8931732ae036bac48a59ad8ec5c}{GYM\+\_\+\+PCB\+\_\+\+LOG\+\_\+\+FORMAT\+\_\+\+TIME}}~1
\item 
\#define \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\+\_\+\+PCB\+\_\+\+GYM\+\_\+\+LOG\+\_\+\+IF}}(v,  func,  args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a9353f2a78a36a4afbe139e3a2ff3d0c4}{ERROR}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a98069aba2bb721df9985b0b1bfcf934a}{WARN}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_afffcecdbe7cb5064b6f8bf06c2eba840}{INFO}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a16e3dcf6c105b031c2e81e90d4961e7e}{NOTICE}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a90ef26fa95fdee371fa95c372d7d6966}{DEBUG}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a8923548305a4aa77c58515ddad1c4d98}{TRACE}}(args...)
\item 
\#define \mbox{\hyperlink{Log_8hpp_a91d5ffd55b2f1a28755cea8fb47d69fb}{RETURN\+\_\+\+ERROR}}(rv,  args...)
\end{DoxyCompactItemize}
\doxysubsubsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum class \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9}{Log\+Level}} \{ \newline
\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9abb1ca97ec761fc37101737ba0aa2e7c5}{ERROR}} = 0
, \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a059e9861e0400dfbe05c98a841f3f96b}{WARNING}} = 1
, \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9aaa14599dc3fdfa9cc81a7c3c247b77b9}{NOTICE}} = 2
, \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a551b723eafd6a31d444fcb2f5920fbd3}{INFO}} = 3
, \newline
\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9adc30ec20708ef7b0f641ef78b7880a15}{DEBUG}} = 4
, \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a2d3e4144aa384b18849ab9a8abad74d6}{TRACE}} = 5
, \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a4905ac9d6a22bdfc1ae096094ce6248d}{COUNT}} = 6
 \}
\end{DoxyCompactItemize}


\label{doc-define-members}
\Hypertarget{Log_8hpp_doc-define-members}
\doxysubsection{Macro Definition Documentation}
\Hypertarget{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}\index{Log.hpp@{Log.hpp}!\_PCB\_GYM\_LOG\_IF@{\_PCB\_GYM\_LOG\_IF}}
\index{\_PCB\_GYM\_LOG\_IF@{\_PCB\_GYM\_LOG\_IF}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{\_PCB\_GYM\_LOG\_IF}{\_PCB\_GYM\_LOG\_IF}}
{\footnotesize\ttfamily \label{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d} 
\#define \+\_\+\+PCB\+\_\+\+GYM\+\_\+\+LOG\+\_\+\+IF(\begin{DoxyParamCaption}\item[{}]{v}{, }\item[{}]{func}{, }\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{if}\ (\textcolor{keywordtype}{int}(v)\ <=\ \mbox{\hyperlink{Log_8hpp_afbf5bed849ed6f6eb3da6a3908fa1d8c}{GYM\_PCB\_MAX\_LOG\_LEVEL}}\ \&\&\ \mbox{\hyperlink{classLogger_ab3b5dc051b86e83c921a59d0a622bf71}{Logger::get}}().visible(v))\ \{\ std::stringstream\ \_\_\_ss;\ \_\_\_ss\ <<\ args;\ \mbox{\hyperlink{classLogger_ab3b5dc051b86e83c921a59d0a622bf71}{Logger::get}}().func(\_\_\_ss.str());\ \}}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a90ef26fa95fdee371fa95c372d7d6966}\index{Log.hpp@{Log.hpp}!DEBUG@{DEBUG}}
\index{DEBUG@{DEBUG}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{DEBUG}{DEBUG}}
{\footnotesize\ttfamily \label{Log_8hpp_a90ef26fa95fdee371fa95c372d7d6966} 
\#define DEBUG(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9adc30ec20708ef7b0f641ef78b7880a15}{LogLevel::DEBUG}},\ Debug,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a9353f2a78a36a4afbe139e3a2ff3d0c4}\index{Log.hpp@{Log.hpp}!ERROR@{ERROR}}
\index{ERROR@{ERROR}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{ERROR}{ERROR}}
{\footnotesize\ttfamily \label{Log_8hpp_a9353f2a78a36a4afbe139e3a2ff3d0c4} 
\#define ERROR(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9abb1ca97ec761fc37101737ba0aa2e7c5}{LogLevel::ERROR}},\ Error,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_ad02eb8931732ae036bac48a59ad8ec5c}\index{Log.hpp@{Log.hpp}!GYM\_PCB\_LOG\_FORMAT\_TIME@{GYM\_PCB\_LOG\_FORMAT\_TIME}}
\index{GYM\_PCB\_LOG\_FORMAT\_TIME@{GYM\_PCB\_LOG\_FORMAT\_TIME}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{GYM\_PCB\_LOG\_FORMAT\_TIME}{GYM\_PCB\_LOG\_FORMAT\_TIME}}
{\footnotesize\ttfamily \label{Log_8hpp_ad02eb8931732ae036bac48a59ad8ec5c} 
\#define GYM\+\_\+\+PCB\+\_\+\+LOG\+\_\+\+FORMAT\+\_\+\+TIME~1}

\Hypertarget{Log_8hpp_af10f195f11036360aa71cd3f68158703}\index{Log.hpp@{Log.hpp}!GYM\_PCB\_LOG\_SHOW\_THREAD@{GYM\_PCB\_LOG\_SHOW\_THREAD}}
\index{GYM\_PCB\_LOG\_SHOW\_THREAD@{GYM\_PCB\_LOG\_SHOW\_THREAD}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{GYM\_PCB\_LOG\_SHOW\_THREAD}{GYM\_PCB\_LOG\_SHOW\_THREAD}}
{\footnotesize\ttfamily \label{Log_8hpp_af10f195f11036360aa71cd3f68158703} 
\#define GYM\+\_\+\+PCB\+\_\+\+LOG\+\_\+\+SHOW\+\_\+\+THREAD~0}

\Hypertarget{Log_8hpp_afbf5bed849ed6f6eb3da6a3908fa1d8c}\index{Log.hpp@{Log.hpp}!GYM\_PCB\_MAX\_LOG\_LEVEL@{GYM\_PCB\_MAX\_LOG\_LEVEL}}
\index{GYM\_PCB\_MAX\_LOG\_LEVEL@{GYM\_PCB\_MAX\_LOG\_LEVEL}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{GYM\_PCB\_MAX\_LOG\_LEVEL}{GYM\_PCB\_MAX\_LOG\_LEVEL}}
{\footnotesize\ttfamily \label{Log_8hpp_afbf5bed849ed6f6eb3da6a3908fa1d8c} 
\#define GYM\+\_\+\+PCB\+\_\+\+MAX\+\_\+\+LOG\+\_\+\+LEVEL~3}

\Hypertarget{Log_8hpp_afffcecdbe7cb5064b6f8bf06c2eba840}\index{Log.hpp@{Log.hpp}!INFO@{INFO}}
\index{INFO@{INFO}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{INFO}{INFO}}
{\footnotesize\ttfamily \label{Log_8hpp_afffcecdbe7cb5064b6f8bf06c2eba840} 
\#define INFO(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a551b723eafd6a31d444fcb2f5920fbd3}{LogLevel::INFO}},\ Info,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a16e3dcf6c105b031c2e81e90d4961e7e}\index{Log.hpp@{Log.hpp}!NOTICE@{NOTICE}}
\index{NOTICE@{NOTICE}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{NOTICE}{NOTICE}}
{\footnotesize\ttfamily \label{Log_8hpp_a16e3dcf6c105b031c2e81e90d4961e7e} 
\#define NOTICE(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9aaa14599dc3fdfa9cc81a7c3c247b77b9}{LogLevel::NOTICE}},\ Notice,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a91d5ffd55b2f1a28755cea8fb47d69fb}\index{Log.hpp@{Log.hpp}!RETURN\_ERROR@{RETURN\_ERROR}}
\index{RETURN\_ERROR@{RETURN\_ERROR}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{RETURN\_ERROR}{RETURN\_ERROR}}
{\footnotesize\ttfamily \label{Log_8hpp_a91d5ffd55b2f1a28755cea8fb47d69fb} 
\#define RETURN\+\_\+\+ERROR(\begin{DoxyParamCaption}\item[{}]{rv}{, }\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9353f2a78a36a4afbe139e3a2ff3d0c4}{ERROR}}(args);\ \textcolor{keywordflow}{return}\ rv;\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a8923548305a4aa77c58515ddad1c4d98}\index{Log.hpp@{Log.hpp}!TRACE@{TRACE}}
\index{TRACE@{TRACE}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{TRACE}{TRACE}}
{\footnotesize\ttfamily \label{Log_8hpp_a8923548305a4aa77c58515ddad1c4d98} 
\#define TRACE(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a2d3e4144aa384b18849ab9a8abad74d6}{LogLevel::TRACE}},\ Trace,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}
\Hypertarget{Log_8hpp_a98069aba2bb721df9985b0b1bfcf934a}\index{Log.hpp@{Log.hpp}!WARN@{WARN}}
\index{WARN@{WARN}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{WARN}{WARN}}
{\footnotesize\ttfamily \label{Log_8hpp_a98069aba2bb721df9985b0b1bfcf934a} 
\#define WARN(\begin{DoxyParamCaption}\item[{}]{args...}{}\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do}\ \{\ \mbox{\hyperlink{Log_8hpp_a9ee97e4fa43469e6fb643da1897b193d}{\_PCB\_GYM\_LOG\_IF}}(\mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a059e9861e0400dfbe05c98a841f3f96b}{LogLevel::WARNING}},\ Warn,\ args)\ \}\ \textcolor{keywordflow}{while}\ (0)}

\end{DoxyCode}


\label{doc-enum-members}
\Hypertarget{Log_8hpp_doc-enum-members}
\doxysubsection{Enumeration Type Documentation}
\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9}\index{Log.hpp@{Log.hpp}!LogLevel@{LogLevel}}
\index{LogLevel@{LogLevel}!Log.hpp@{Log.hpp}}
\doxysubsubsection{\texorpdfstring{LogLevel}{LogLevel}}
{\footnotesize\ttfamily \label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9} 
enum class \mbox{\hyperlink{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9}{Log\+Level}}\hspace{0.3cm}{\ttfamily [strong]}}

\begin{DoxyEnumFields}[2]{Enumerator}
\raisebox{\heightof{T}}[0pt][0pt]{\index{ERROR@{ERROR}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!ERROR@{ERROR}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9abb1ca97ec761fc37101737ba0aa2e7c5}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9abb1ca97ec761fc37101737ba0aa2e7c5} 
ERROR&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{WARNING@{WARNING}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!WARNING@{WARNING}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a059e9861e0400dfbe05c98a841f3f96b}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a059e9861e0400dfbe05c98a841f3f96b} 
WARNING&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{NOTICE@{NOTICE}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!NOTICE@{NOTICE}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9aaa14599dc3fdfa9cc81a7c3c247b77b9}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9aaa14599dc3fdfa9cc81a7c3c247b77b9} 
NOTICE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{INFO@{INFO}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!INFO@{INFO}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a551b723eafd6a31d444fcb2f5920fbd3}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a551b723eafd6a31d444fcb2f5920fbd3} 
INFO&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{DEBUG@{DEBUG}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!DEBUG@{DEBUG}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9adc30ec20708ef7b0f641ef78b7880a15}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9adc30ec20708ef7b0f641ef78b7880a15} 
DEBUG&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{TRACE@{TRACE}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!TRACE@{TRACE}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a2d3e4144aa384b18849ab9a8abad74d6}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a2d3e4144aa384b18849ab9a8abad74d6} 
TRACE&\\
\hline

\raisebox{\heightof{T}}[0pt][0pt]{\index{COUNT@{COUNT}!Log.hpp@{Log.hpp}}\index{Log.hpp@{Log.hpp}!COUNT@{COUNT}}}\Hypertarget{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a4905ac9d6a22bdfc1ae096094ce6248d}\label{Log_8hpp_aca1fd1d8935433e6ba2e3918214e07f9a4905ac9d6a22bdfc1ae096094ce6248d} 
COUNT&\\
\hline

\end{DoxyEnumFields}
