clutchlog/docs/clutchlog_8h_source.html
2020-10-18 17:20:14 +02:00

114 lines
137 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>clutchlog: clutchlog/clutchlog.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">clutchlog
&#160;<span id="projectnumber">0.5.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_c318bd5cf14aaa5601e6029e0b5b4048.html">clutchlog</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">clutchlog.h</div> </div>
</div><!--header-->
<div class="contents">
<a href="clutchlog_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="preprocessor">#ifndef __CLUTCHLOG_H__</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="preprocessor">#define __CLUTCHLOG_H__</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#include &lt;filesystem&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstdlib&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;regex&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#if __has_include(&lt;execinfo.h&gt;) &amp;&amp; __has_include(&lt;stdlib.h&gt;) &amp;&amp; __has_include(&lt;libgen.h&gt;)</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;execinfo.h&gt;</span> <span class="comment">// execinfo</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span> <span class="comment">// getenv</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;libgen.h&gt;</span> <span class="comment">// basename</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#define CLUTCHLOG_HAVE_UNIX_SYSINFO 1</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#define CLUTCHLOG_HAVE_UNIX_SYSINFO 0</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">/**********************************************************************</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * Enable by default in Debug builds.</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> **********************************************************************/</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef WITH_CLUTCHLOG</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#define WITH_CLUTCHLOG</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment">/**********************************************************************</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> * Macros definitions</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> **********************************************************************/</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#ifdef WITH_CLUTCHLOG</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#ifndef CLUTCHLOG_DEFAULT_FORMAT</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#define CLUTCHLOG_DEFAULT_FORMAT &quot;[{name}] {level_letter}:{depth_marks} {msg}\t\t\t\t\t{func} @ {file}:{line}\n&quot;</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="group__DefaultConfigMacros.html#ga524c16f280d92ee8ab683162c9ce01fa"> 49</a></span>&#160;<span class="preprocessor">#define CLUTCHLOG_DEFAULT_FORMAT &quot;{level_letter} {msg}\t\t\t\t\t{func} @ {file}:{line}\n&quot;</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="preprocessor">#endif // CLUTCHLOG_DEFAULT_FORMAT</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#ifndef CLUTCHDUMP_DEFAULT_FORMAT</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#define CLUTCHDUMP_DEFAULT_FORMAT &quot;# [{name}] {level} in {func} (at depth {depth}) @ {file}:{line}&quot;</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="group__DefaultConfigMacros.html#ga27b613c6727857a7cbcd0165d862034e"> 58</a></span>&#160;<span class="preprocessor">#define CLUTCHDUMP_DEFAULT_FORMAT &quot;# {level} in {func} @ {file}:{line}&quot;</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#endif // CLUTCHDUMP_DEFAULT_FORMAT</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="preprocessor">#ifndef CLUTCHDUMP_DEFAULT_SEP</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#define CLUTCHDUMP_DEFAULT_SEP &quot;\n&quot;</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif // CLUTCHDUMP_DEFAULT_SEP</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#ifndef CLUTCHLOG_DEFAULT_DEPTH_MARK</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#define CLUTCHLOG_DEFAULT_DEPTH_MARK &quot;&gt;&quot;</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#endif // CLUTCHLOG_DEFAULT_DEPTH_MARK</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#ifndef CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#define CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG clutchlog::level::progress</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif // CLUTCHLOG_DEFAULT_DEPTH_BUILT</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#define CLUTCHLOC __FILE__, __FUNCTION__, __LINE__</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="group__UseMacros.html#ga6f86187e2b35e7e1907d688f504a197d"> 85</a></span>&#160;<span class="preprocessor">#define CLUTCHLOG( LEVEL, WHAT ) { \</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor"> std::ostringstream msg ; msg &lt;&lt; WHAT; \</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="preprocessor"> logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">}</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#define CLUTCHLOG( LEVEL, WHAT ) { \</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="preprocessor"> std::ostringstream msg ; msg &lt;&lt; WHAT; \</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor"> logger.log(clutchlog::level::LEVEL, msg.str(), CLUTCHLOC); \</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="preprocessor">}</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif // NDEBUG</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="preprocessor">#ifndef NDEBUG</span></div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="group__UseMacros.html#ga572e3aa19d8b39e3ed0b9e91961104c2"> 102</a></span>&#160;<span class="preprocessor">#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="preprocessor"> logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="preprocessor"> CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="preprocessor">}</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="preprocessor">#else // not Debug build.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="preprocessor">#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { \</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="preprocessor"> if(clutchlog::level::LEVEL &lt;= CLUTCHLOG_DEFAULT_DEPTH_BUILT_NODEBUG) { \</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor"> auto&amp; logger = clutchlog::logger(); \</span></div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor"> logger.dump(clutchlog::level::LEVEL, std::begin(CONTAINER), std::end(CONTAINER), \</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor"> CLUTCHLOC, FILENAME, CLUTCHDUMP_DEFAULT_SEP); \</span></div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor"> } \</span></div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="preprocessor">}</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="preprocessor">#endif // NDEBUG</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;<span class="preprocessor">#else // not WITH_CLUTCHLOG</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="comment">// Disabled macros can still be used in Release builds.</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#define CLUTCHLOG( LEVEL, WHAT ) { do {</span><span class="comment">/*nothing*/</span><span class="preprocessor">} while(false); }</span></div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;<span class="preprocessor">#define CLUTCHDUMP( LEVEL, CONTAINER, FILENAME ) { do {</span><span class="comment">/*nothing*/</span><span class="preprocessor">} while(false); }</span></div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="preprocessor">#endif // WITH_CLUTCHLOG</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;<span class="comment">/**********************************************************************</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="comment"> * Implementation</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="comment"> **********************************************************************/</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#ifdef WITH_CLUTCHLOG</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classclutchlog.html"> 137</a></span>&#160;<span class="keyword">class </span><a class="code" href="classclutchlog.html">clutchlog</a></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;{</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa"> 149</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classclutchlog.html">clutchlog</a>&amp; <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">logger</a>()</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; {</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keyword">static</span> <a class="code" href="classclutchlog.html">clutchlog</a> instance;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> instance;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928"> 156</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> {critical=0, error=1, warning=2, progress=3, note=4, info=5, debug=6, xdebug=7};</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html"> 170</a></span>&#160; <span class="keyword">class </span><a class="code" href="classclutchlog_1_1fmt.html">fmt</a> {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0"> 173</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; black = 30,</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; red = 31,</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; green = 32,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; yellow = 33,</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; blue = 34,</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; magenta = 35,</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; cyan = 36,</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; white = 37,</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; none</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; } fore;</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e"> 186</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; black = 40,</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; red = 41,</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; green = 42,</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; yellow = 43,</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; blue = 44,</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; magenta = 45,</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; cyan = 46,</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; white = 47,</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; none</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; } back;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89"> 199</a></span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; reset = 0,</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; bold = 1,</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; underline = 4,</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; inverse = 7,</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; none</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; } style;</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959"> 208</a></span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>() : fore(<a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a>::none), back(<a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a>::none), style(<a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a>::none) { }</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s = typo::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s , <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b, <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s = typo::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s , <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(<a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s, <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(<a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b , <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0"> 222</a></span>&#160; std::ostream&amp; <a class="code" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">print_on</a>( std::ostream&amp; os)<span class="keyword"> const</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; std::vector&lt;int&gt; codes; codes.reserve(3);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span>(this-&gt;fore != fg::none) { codes.push_back(static_cast&lt;int&gt;(this-&gt;fore ));}</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(this-&gt;back != bg::none) { codes.push_back(static_cast&lt;int&gt;(this-&gt;back ));}</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span>(this-&gt;style != typo::none) { codes.push_back(static_cast&lt;int&gt;(this-&gt;style));}</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span>(codes.size() == 0) {<span class="keywordflow">return</span> os;}</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;\033[&quot;</span>;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; assert(codes.size() &gt; 0);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; os &lt;&lt; codes[0];</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i=1; i &lt; codes.size(); ++i) {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;;&quot;</span> &lt;&lt; codes[i];</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; os &lt;&lt; <span class="stringliteral">&quot;m&quot;</span>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> os;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#a96849ba427feac3a2eeaa1165e3845da"> 252</a></span>&#160; <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classclutchlog_1_1fmt.html#a96849ba427feac3a2eeaa1165e3845da">operator&lt;&lt;</a>(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classclutchlog_1_1fmt.html">fmt</a>&amp; <a class="code" href="classclutchlog_1_1fmt.html">fmt</a>)</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; {</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> fmt.<a class="code" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">print_on</a>(os);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="classclutchlog_1_1fmt.html#afeaedd18298498d1dcfcc15f5f17ac3c"> 267</a></span>&#160; std::string <a class="code" href="classclutchlog_1_1fmt.html#afeaedd18298498d1dcfcc15f5f17ac3c">operator()</a>( <span class="keyword">const</span> std::string&amp; msg )<span class="keyword"> const</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; std::ostringstream os;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; this-&gt;<a class="code" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">print_on</a>(os);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html">fmt</a> reset(fmt::typo::reset);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; os &lt;&lt; msg;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; reset.<a class="code" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">print_on</a>(os);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> os.str();</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }; <span class="comment">// fmt class</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classclutchlog.html">clutchlog</a>(<a class="code" href="classclutchlog.html">clutchlog</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordtype">void</span> operator=(<a class="code" href="classclutchlog.html">clutchlog</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classclutchlog.html">clutchlog</a>() :</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// system, main, log</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; _strip_calls(5),</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; _level_word({</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {level::critical,<span class="stringliteral">&quot;Critical&quot;</span>},</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {level::error ,<span class="stringliteral">&quot;Error&quot;</span>},</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {level::warning ,<span class="stringliteral">&quot;Warning&quot;</span>},</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {level::progress,<span class="stringliteral">&quot;Progress&quot;</span>},</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {level::note ,<span class="stringliteral">&quot;Note&quot;</span>},</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; {level::info ,<span class="stringliteral">&quot;Info&quot;</span>},</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; {level::debug ,<span class="stringliteral">&quot;Debug&quot;</span>},</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {level::xdebug ,<span class="stringliteral">&quot;XDebug&quot;</span>}</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }),</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; _level_fmt({</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; {level::critical,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(fmt::fg::red, fmt::typo::underline)},</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {level::error ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(fmt::fg::red, fmt::typo::bold)},</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; {level::warning ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(fmt::fg::magenta, fmt::typo::bold)},</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; {level::progress,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>()},</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {level::note ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>()},</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {level::info ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>()},</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {level::debug ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>()},</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {level::xdebug ,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>()}</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }),</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; _format_log(<a class="code" href="group__DefaultConfigMacros.html#ga524c16f280d92ee8ab683162c9ce01fa">CLUTCHLOG_DEFAULT_FORMAT</a>),</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; _format_dump(<a class="code" href="group__DefaultConfigMacros.html#ga27b613c6727857a7cbcd0165d862034e">CLUTCHDUMP_DEFAULT_FORMAT</a>),</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; _out(&amp;std::clog),</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; _depth(std::numeric_limits&lt;size_t&gt;::max() - _strip_calls),</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; _depth_mark(CLUTCHLOG_DEFAULT_DEPTH_MARK),</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; _stage(level::error),</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; _in_file(<span class="stringliteral">&quot;.*&quot;</span>),</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; _in_func(<span class="stringliteral">&quot;.*&quot;</span>),</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; _in_line(<span class="stringliteral">&quot;.*&quot;</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// Reverse the level-&gt;word map into a word-&gt;level map.</span></div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span>&amp; lw : _level_word) {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; _word_level[lw.second] = lw.first;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> _strip_calls;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">const</span> std::map&lt;level,std::string&gt; _level_word;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; std::map&lt;std::string,level&gt; _word_level;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; std::map&lt;level,fmt&gt; _level_fmt;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; std::string _format_log;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; std::string _format_dump;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; std::ostream* _out;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordtype">size_t</span> _depth;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; std::string _depth_mark;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> _stage;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; std::regex _in_file;</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; std::regex _in_func;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; std::regex _in_line;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="structclutchlog_1_1scope__t.html"> 348</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">bool</span> matches; <span class="comment">// everything is compatible</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> stage; <span class="comment">// current log level</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">size_t</span> depth; <span class="comment">// current depth</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">bool</span> there; <span class="comment">// location is compatible</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a>() :</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; matches(<span class="keyword">false</span>),</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; stage(level::xdebug),</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; depth(0),</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; there(<span class="keyword">false</span>)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; {}</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; };</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96"> 366</a></span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> <a class="code" href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96">locate</a>(</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp; stage,</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>,</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>,</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a></div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> scope; <span class="comment">// False scope by default.</span></div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="comment">/***** Log level stage *****/</span></div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// Test stage first, because it&#39;s fastest.</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; scope.stage = stage;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span>(not (scope.stage &lt;= _stage)) {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// Bypass useless computations if no match</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// because of the stage.</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">return</span> scope;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="comment">/***** Stack depth *****/</span></div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="comment">// Backtrace in second, quite fast.</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> max_buffer = 4096;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordtype">size_t</span> stack_depth;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">void</span> *buffer[max_buffer];</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; stack_depth = backtrace(buffer, max_buffer);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; scope.depth = stack_depth;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">if</span>(not (scope.depth &lt;= _depth + _strip_calls)) {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Bypass if no match.</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">return</span> scope;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="comment">/***** Location *****/</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="comment">// Location last, slowest.</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; std::ostringstream sline; sline &lt;&lt; <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; scope.there =</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; std::regex_search(file, _in_file)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; and std::regex_search(func, _in_func)</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; and std::regex_search(sline.str(), _in_line);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="comment">// No need to retest stage and depth, which are true here.</span></div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; scope.matches = scope.there;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span> scope;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(<span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>) {_format_log = <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>;}</div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80"> 422</a></span>&#160; std::string <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _format_log;}</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00425"></a><span class="lineno"><a class="line" href="classclutchlog.html#a2144abe4ec6f630126b6490908b5f924"> 425</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a2144abe4ec6f630126b6490908b5f924">format_comment</a>(<span class="keyword">const</span> std::string&amp; format) {_format_dump = <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>;}</div><div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classclutchlog.html#aa8d0a569ed3623ce36c5e567ec2d1ad5"> 427</a></span>&#160; std::string <a class="code" href="classclutchlog.html#aa8d0a569ed3623ce36c5e567ec2d1ad5">format_comment</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _format_dump;}</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;</div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classclutchlog.html#a7fd7c7bd3668c537061c314a619a336d"> 430</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a7fd7c7bd3668c537061c314a619a336d">out</a>(std::ostream&amp; <a class="code" href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266">out</a>) {_out = &amp;<a class="code" href="classclutchlog.html#a7fd7c7bd3668c537061c314a619a336d">out</a>;}</div><div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266"> 432</a></span>&#160; std::ostream&amp; <a class="code" href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266">out</a>() {<span class="keywordflow">return</span> *_out;}</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">void</span> depth(<span class="keywordtype">size_t</span> d) {_depth = d;}</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">size_t</span> depth()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _depth;}</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="keywordtype">void</span> depth_mark(std::string mark) {_depth_mark = mark;}</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; std::string depth_mark()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _depth_mark;}</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;</div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classclutchlog.html#a3cb0e4f43a4cadf1966001ad7c9861f4"> 447</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a3cb0e4f43a4cadf1966001ad7c9861f4">threshold</a>(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> l) {_stage = l;}</div><div class="line"><a name="l00449"></a><span class="lineno"><a class="line" href="classclutchlog.html#ab45287cc9c14217904a13aff49573732"> 449</a></span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> <a class="code" href="classclutchlog.html#ab45287cc9c14217904a13aff49573732">threshold</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> _stage;}</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c"> 452</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>(std::string <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>) {_in_file = <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>;}</div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447"> 454</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>(std::string <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>) {_in_func = <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>;}</div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9"> 456</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>(std::string <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>) {_in_line = <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>;}</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno"><a class="line" href="classclutchlog.html#a6666106b9e5c239b6ae5e0d1091648e3"> 459</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a6666106b9e5c239b6ae5e0d1091648e3">location</a>(</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keyword">const</span> std::string&amp; in_file,</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keyword">const</span> std::string&amp; in_function=<span class="stringliteral">&quot;.*&quot;</span>,</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">const</span> std::string&amp; in_line=<span class="stringliteral">&quot;.*&quot;</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; )</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>(in_file);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>(in_function);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>(in_line);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class </span>... FMT&gt;</div><div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classclutchlog.html#ac3ec55057b9c734b66f169bf43dbd591"> 475</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ac3ec55057b9c734b66f169bf43dbd591">style</a>(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> stage, FMT... styles) { this-&gt;<a class="code" href="classclutchlog.html#ac3ec55057b9c734b66f169bf43dbd591">style</a>(stage,<a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(styles...)); }</div><div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classclutchlog.html#ad1cfa9945c3f7f98fe8ce724c627d0d6"> 477</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ad1cfa9945c3f7f98fe8ce724c627d0d6">style</a>(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> stage, <a class="code" href="classclutchlog_1_1fmt.html">fmt</a> style) { _level_fmt.at(stage) = <a class="code" href="classclutchlog.html#ad1cfa9945c3f7f98fe8ce724c627d0d6">style</a>; }</div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classclutchlog.html#a4831f44fd5ade102e57320632095934d"> 479</a></span>&#160; <a class="code" href="classclutchlog_1_1fmt.html">fmt</a> <a class="code" href="classclutchlog.html#a4831f44fd5ade102e57320632095934d">style</a>(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> stage)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> _level_fmt.at(stage); }</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="classclutchlog.html#acebed8c9df9204f22bf8488e62e1cedd"> 485</a></span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> <a class="code" href="classclutchlog.html#acebed8c9df9204f22bf8488e62e1cedd">level_of</a>(<span class="keyword">const</span> std::string name)</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> ilevel = _word_level.find(name);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keywordflow">if</span>( ilevel != std::end(_word_level)) {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> ilevel-&gt;second;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">throw</span> std::out_of_range(<span class="stringliteral">&quot;&#39;&quot;</span> + name + <span class="stringliteral">&quot;&#39; is not a valid log level name&quot;</span>);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160;</div><div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e"> 509</a></span>&#160; std::string <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keyword">const</span> std::string&amp; form,</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">const</span> std::string&amp; mark,</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keyword">const</span> std::string&amp; tag</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// Useless debug code, unless something fancy would be done with name tags.</span></div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// std::regex re;</span></div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="comment">// try {</span></div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// re = std::regex(mark);</span></div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="comment">//</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="comment">// } catch(const std::regex_error&amp; e) {</span></div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;ERROR with a regular expression \&quot;&quot; &lt;&lt; mark &lt;&lt; &quot;\&quot;: &quot;;</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="comment">// switch(e.code()) {</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// case std::regex_constants::error_collate:</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid collating element name&quot;;</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="comment">// case std::regex_constants::error_ctype:</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid character class name&quot;;</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// case std::regex_constants::error_escape:</span></div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid escaped character or a trailing escape&quot;;</span></div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="comment">// case std::regex_constants::error_backref:</span></div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid back reference&quot;;</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="comment">// case std::regex_constants::error_brack:</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains mismatched square brackets (&#39;[&#39; and &#39;]&#39;)&quot;;</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="comment">// case std::regex_constants::error_paren:</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains mismatched parentheses (&#39;(&#39; and &#39;)&#39;)&quot;;</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="comment">// case std::regex_constants::error_brace:</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains mismatched curly braces (&#39;{&#39; and &#39;}&#39;)&quot;;</span></div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="comment">// case std::regex_constants::error_badbrace:</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid range in a {} expression&quot;;</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="comment">// case std::regex_constants::error_range:</span></div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the expression contains an invalid character range (e.g. [b-a])&quot;;</span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">// case std::regex_constants::error_space:</span></div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;there was not enough memory to convert the expression into a finite state machine&quot;;</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="comment">// case std::regex_constants::error_badrepeat:</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;one of *?+{ was not preceded by a valid regular expression&quot;;</span></div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <span class="comment">// case std::regex_constants::error_complexity:</span></div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;the complexity of an attempted match exceeded a predefined level&quot;;</span></div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="comment">// case std::regex_constants::error_stack:</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;there was not enough memory to perform a match&quot;;</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">// break;</span></div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="comment">// default:</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;unknown error&quot;;</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="comment">// }</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <span class="comment">// std::cerr &lt;&lt; std::endl;</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="comment">// throw;</span></div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="comment">// } // catch</span></div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keyword">const</span> std::regex re(mark);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">return</span> std::regex_replace(form, re, tag);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"><a class="line" href="classclutchlog.html#ae90d5a1a428587ad67b38b2ea4ca9fa2"> 574</a></span>&#160; std::string <a class="code" href="classclutchlog.html#ae90d5a1a428587ad67b38b2ea4ca9fa2">replace</a>(</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <span class="keyword">const</span> std::string&amp; form,</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keyword">const</span> std::string&amp; mark,</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> tag</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; std::ostringstream stag; stag &lt;&lt; tag;</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(form, mark, stag.str());</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classclutchlog.html#af1219599b1361562c802779572aa669f"> 585</a></span>&#160; std::string <a class="code" href="classclutchlog.html#af1219599b1361562c802779572aa669f">format</a>(</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; std::string format,</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <span class="keyword">const</span> std::string&amp; what,</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160;#<span class="keywordflow">if</span> CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">const</span> std::string&amp; name,</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160;#endif</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp; stage,</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>,</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>,</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;#<span class="keywordflow">if</span> CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; ,</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> depth</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;#endif</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{msg\\}&quot;</span>, what);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{file\\}&quot;</span>, file);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{func\\}&quot;</span>, func);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{line\\}&quot;</span>, <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{level\\}&quot;</span>, _level_word.at(stage));</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; std::string letter(1, _level_word.at(stage).at(0)); <span class="comment">// char -&gt; string</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{level_letter\\}&quot;</span>, letter);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{name\\}&quot;</span>, name);</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{depth\\}&quot;</span>, depth);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; std::ostringstream chevrons;</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">for</span>(<span class="keywordtype">size_t</span> i = _strip_calls; i &lt; depth; ++i) {</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; chevrons &lt;&lt; _depth_mark;</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; format = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(format, <span class="stringliteral">&quot;\\{depth_marks\\}&quot;</span>, chevrons.str());</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keywordflow">return</span> _level_fmt.at(stage)(<a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; }</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="classclutchlog.html#a23dbb98f0d3c5cc21c232cde16cf317a"> 625</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a23dbb98f0d3c5cc21c232cde16cf317a">log</a>(</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp; stage,</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">const</span> std::string&amp; what,</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>, <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>, <span class="keywordtype">size_t</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> scope = <a class="code" href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96">locate</a>(stage, file, func, line);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">if</span>(scope.matches) {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; *_out &lt;&lt; <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(_format_log, what, basename(getenv(<span class="stringliteral">&quot;_&quot;</span>)),</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; stage, file, func,</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; line, scope.depth );</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; *_out &lt;&lt; <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(_format_log, what,</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; stage, file, func,</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; line );</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; _out-&gt;flush();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; } <span class="comment">// if scopes.matches</span></div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> In&gt;</div><div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="classclutchlog.html#ae7edb2e14f3d55b201b834255aa4bce9"> 650</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ae7edb2e14f3d55b201b834255aa4bce9">dump</a>(</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp; stage,</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keyword">const</span> In container_begin, <span class="keyword">const</span> In container_end,</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>, <span class="keyword">const</span> std::string&amp; <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>, <span class="keywordtype">size_t</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>,</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> std::string&amp; filename_template=<span class="stringliteral">&quot;dump_{n}.dat&quot;</span>,</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keyword">const</span> std::string sep=<a class="code" href="group__DefaultConfigMacros.html#ga54d29e956575e1c731eab5406135c5df">CLUTCHDUMP_DEFAULT_SEP</a></div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> scope = <a class="code" href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96">locate</a>(stage, file, func, line);</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; <span class="keywordflow">if</span>(scope.matches) {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keyword">const</span> std::string tag = <span class="stringliteral">&quot;\\{n\\}&quot;</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keyword">const</span> std::regex re(tag);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; std::string outfile = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="comment">// If the file name template has the {n} tag.</span></div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">if</span>(std::regex_search(filename_template, re)) {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="comment">// Increment n until a free one is found.</span></div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordtype">size_t</span> n = 0;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keywordflow">do</span> {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; outfile = <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(filename_template, tag, n);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; n++;</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; } <span class="keywordflow">while</span>( std::filesystem::exists( outfile ) );</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="comment">// Use the parameter as is.</span></div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; outfile = filename_template;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; }</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; std::ofstream fd(outfile);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">if</span>(_format_dump.size() &gt; 0) {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; fd &lt;&lt; <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(_format_dump, <span class="stringliteral">&quot;&quot;</span>, basename(getenv(<span class="stringliteral">&quot;_&quot;</span>)),</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; stage, file, func,</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; line, scope.depth );</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; fd &lt;&lt; <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(_format_dump, <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; stage, file, func,</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; line );</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; fd &lt;&lt; sep; <span class="comment">// sep after comment line.</span></div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; std::copy(container_begin, container_end,</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; std::ostream_iterator&lt;typename In::value_type&gt;(fd, sep.c_str()));</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; fd.close();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; } <span class="comment">// if scopes.matches</span></div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;};</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;<span class="preprocessor">#else // not WITH_CLUTCHLOG</span></div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;<span class="comment">/**********************************************************************</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;<span class="comment"> * Fake implementation</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="comment"> **********************************************************************/</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;<span class="comment">// Equivalent class with empty methods, will be optimized out</span></div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160;<span class="comment">// while allowing to actually have calls implemented without WITH_CLUTCHLOG guards.</span></div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;<span class="preprocessor">#pragma GCC diagnostic push</span></div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160;<span class="preprocessor">#pragma GCC diagnostic ignored &quot;-Wreturn-type&quot;</span></div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160;<span class="keyword">class </span><a class="code" href="classclutchlog.html">clutchlog</a></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;{</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keyword">static</span> <a class="code" href="classclutchlog.html">clutchlog</a>&amp; <a class="code" href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">logger</a>() { }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">enum</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> {critical=0, error=1, warning=2, progress=3, note=4, info=5, debug=6, xdebug=7};</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keyword">class </span><a class="code" href="classclutchlog_1_1fmt.html">fmt</a> {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> { black, red, green, yellow, blue, magenta, cyan, white, none } fore;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> { black, red, green, yellow, blue, magenta, cyan, white, none } back;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keyword">enum class</span> <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> { reset, bold, underline, inverse, none } style;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>() : fore(fg::none), back(bg::none), style(typo::none) { }</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s = typo::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s , <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b, <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s = typo::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>( <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b, <a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s , <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(<a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s, <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b = bg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">fmt</a>(<a class="code" href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">typo</a> s, <a class="code" href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">bg</a> b , <a class="code" href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">fg</a> f = fg::none) : fore(f), back(b), style(s) { }</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; std::ostream&amp; <a class="code" href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">print_on</a>(std::ostream&amp;)<span class="keyword"> const </span>{ }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">friend</span> std::ostream&amp; <a class="code" href="classclutchlog_1_1fmt.html#a96849ba427feac3a2eeaa1165e3845da">operator&lt;&lt;</a>(std::ostream&amp;, <span class="keyword">const</span> <a class="code" href="classclutchlog_1_1fmt.html">fmt</a>&amp;) { }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; std::string <a class="code" href="classclutchlog_1_1fmt.html#afeaedd18298498d1dcfcc15f5f17ac3c">operator()</a>(<span class="keyword">const</span> std::string&amp;)<span class="keyword"> const </span>{ }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; };</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="classclutchlog.html">clutchlog</a>(<a class="code" href="classclutchlog.html">clutchlog</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <span class="keywordtype">void</span> operator=(<a class="code" href="classclutchlog.html">clutchlog</a> <span class="keyword">const</span>&amp;) = <span class="keyword">delete</span>;</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="classclutchlog.html">clutchlog</a>() {}</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <span class="keyword">protected</span>:</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keyword">struct </span><a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> {};</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="structclutchlog_1_1scope__t.html">scope_t</a> <a class="code" href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96">locate</a>(</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp;,</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span></div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(<span class="keyword">const</span> std::string&amp;) {}</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; std::string <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>()<span class="keyword"> const </span>{}</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#aa8d0a569ed3623ce36c5e567ec2d1ad5">format_comment</a>(<span class="keyword">const</span> std::string&amp;) {}</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; std::string <a class="code" href="classclutchlog.html#aa8d0a569ed3623ce36c5e567ec2d1ad5">format_comment</a>()<span class="keyword"> const </span>{}</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266">out</a>(std::ostream&amp;) {}</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; std::ostream&amp; <a class="code" href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266">out</a>() {}</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160;<span class="preprocessor">#if CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</span></div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordtype">void</span> depth(<span class="keywordtype">size_t</span>) {}</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordtype">size_t</span> depth()<span class="keyword"> const </span>{}</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160;</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <span class="keywordtype">void</span> depth_mark(std::string) {}</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; std::string depth_mark()<span class="keyword"> const </span>{}</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ab45287cc9c14217904a13aff49573732">threshold</a>(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>) {}</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> <a class="code" href="classclutchlog.html#ab45287cc9c14217904a13aff49573732">threshold</a>()<span class="keyword"> const </span>{}</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">file</a>(std::string) {}</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">func</a>(std::string) {}</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">line</a>(std::string) {}</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;<span class="preprocessor">#pragma GCC diagnostic push</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160;<span class="preprocessor">#pragma GCC diagnostic ignored &quot;-Wunused-parameter&quot;</span></div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a6666106b9e5c239b6ae5e0d1091648e3">location</a>(</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keyword">const</span> std::string&amp; in_function=<span class="stringliteral">&quot;.*&quot;</span>,</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keyword">const</span> std::string&amp; in_line=<span class="stringliteral">&quot;.*&quot;</span></div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; )</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; { }</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;<span class="preprocessor">#pragma GCC diagnostic pop</span></div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordtype">void</span> style(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>, <a class="code" href="classclutchlog_1_1fmt.html">fmt</a>) { }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <a class="code" href="classclutchlog_1_1fmt.html">fmt</a> style(<a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>)<span class="keyword"> const </span>{ }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a> <a class="code" href="classclutchlog.html#acebed8c9df9204f22bf8488e62e1cedd">level_of</a>(<span class="keyword">const</span> std::string) { }</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; std::string <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keyword">const</span> std::string&amp;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; std::string <a class="code" href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">replace</a>(</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span></div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; std::string <a class="code" href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">format</a>(</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; std::string,</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;#<span class="keywordflow">if</span> CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160;#endif</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160; <span class="keyword">const</span> <a class="code" href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">level</a>&amp;,</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span></div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160;#<span class="keywordflow">if</span> CLUTCHLOG_HAVE_UNIX_SYSINFO == 1</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; ,</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span></div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;#endif</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#a23dbb98f0d3c5cc21c232cde16cf317a">log</a>(</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <span class="keyword">const</span> level&amp;,</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> std::string&amp;, <span class="keywordtype">size_t</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">class</span> In&gt;</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classclutchlog.html#ae7edb2e14f3d55b201b834255aa4bce9">dump</a>(</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keyword">const</span> level&amp;,</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <span class="keyword">const</span> In, <span class="keyword">const</span> In,</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> std::string&amp;, <span class="keywordtype">size_t</span>,</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keyword">const</span> std::string&amp;,</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <span class="keyword">const</span> std::string</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; )<span class="keyword"> const</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160;<span class="keyword"> </span>{ }</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;};</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160;<span class="preprocessor">#pragma GCC diagnostic pop</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160;<span class="preprocessor">#endif // WITH_CLUTCHLOG</span></div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160;<span class="preprocessor">#endif // __CLUTCHLOG_H__</span></div><div class="ttc" id="classclutchlog_html_a3cb0e4f43a4cadf1966001ad7c9861f4"><div class="ttname"><a href="classclutchlog.html#a3cb0e4f43a4cadf1966001ad7c9861f4">clutchlog::threshold</a></div><div class="ttdeci">void threshold(level l)</div><div class="ttdoc">Set the log level below which logs are not printed. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:447</div></div>
<div class="ttc" id="classclutchlog_html_a7fd7c7bd3668c537061c314a619a336d"><div class="ttname"><a href="classclutchlog.html#a7fd7c7bd3668c537061c314a619a336d">clutchlog::out</a></div><div class="ttdeci">void out(std::ostream &amp;out)</div><div class="ttdoc">Set the output stream on which to print. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:430</div></div>
<div class="ttc" id="classclutchlog_html"><div class="ttname"><a href="classclutchlog.html">clutchlog</a></div><div class="ttdef"><b>Definition:</b> clutchlog.h:137</div></div>
<div class="ttc" id="classclutchlog_html_a23dbb98f0d3c5cc21c232cde16cf317a"><div class="ttname"><a href="classclutchlog.html#a23dbb98f0d3c5cc21c232cde16cf317a">clutchlog::log</a></div><div class="ttdeci">void log(const level &amp;stage, const std::string &amp;what, const std::string &amp;file, const std::string &amp;func, size_t line) const</div><div class="ttdoc">Print a log message IF the location matches the given one. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:625</div></div>
<div class="ttc" id="classclutchlog_html_a972f895c70edc335f3018a2c8971d59e"><div class="ttname"><a href="classclutchlog.html#a972f895c70edc335f3018a2c8971d59e">clutchlog::replace</a></div><div class="ttdeci">std::string replace(const std::string &amp;form, const std::string &amp;mark, const std::string &amp;tag) const</div><div class="ttdoc">Replace mark by tag in form. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:509</div></div>
<div class="ttc" id="classclutchlog_html_ad32b5a0274dc03ee0004f67ba58b2447"><div class="ttname"><a href="classclutchlog.html#ad32b5a0274dc03ee0004f67ba58b2447">clutchlog::func</a></div><div class="ttdeci">void func(std::string func)</div><div class="ttdoc">Set the regular expression filtering the function location. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:454</div></div>
<div class="ttc" id="classclutchlog_html_afc53dbca51d0e2322a21899d0c571a80"><div class="ttname"><a href="classclutchlog.html#afc53dbca51d0e2322a21899d0c571a80">clutchlog::format</a></div><div class="ttdeci">std::string format() const</div><div class="ttdoc">Get the template string. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:422</div></div>
<div class="ttc" id="classclutchlog_html_aa26c6b81ebaeb9e9daa3457e3a3d17c9"><div class="ttname"><a href="classclutchlog.html#aa26c6b81ebaeb9e9daa3457e3a3d17c9">clutchlog::line</a></div><div class="ttdeci">void line(std::string line)</div><div class="ttdoc">Set the regular expression filtering the line location. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:456</div></div>
<div class="ttc" id="classclutchlog_html_a6666106b9e5c239b6ae5e0d1091648e3"><div class="ttname"><a href="classclutchlog.html#a6666106b9e5c239b6ae5e0d1091648e3">clutchlog::location</a></div><div class="ttdeci">void location(const std::string &amp;in_file, const std::string &amp;in_function=&quot;.*&quot;, const std::string &amp;in_line=&quot;.*&quot;)</div><div class="ttdoc">Set the regular expressions filtering the location. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:459</div></div>
<div class="ttc" id="classclutchlog_html_a2144abe4ec6f630126b6490908b5f924"><div class="ttname"><a href="classclutchlog.html#a2144abe4ec6f630126b6490908b5f924">clutchlog::format_comment</a></div><div class="ttdeci">void format_comment(const std::string &amp;format)</div><div class="ttdoc">Set the template string for dumps. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:425</div></div>
<div class="ttc" id="classclutchlog_html_aa8d0a569ed3623ce36c5e567ec2d1ad5"><div class="ttname"><a href="classclutchlog.html#aa8d0a569ed3623ce36c5e567ec2d1ad5">clutchlog::format_comment</a></div><div class="ttdeci">std::string format_comment() const</div><div class="ttdoc">Get the template string for dumps. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:427</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a407506bc02ed3f91d88b3df630e54959"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a407506bc02ed3f91d88b3df630e54959">clutchlog::fmt::fmt</a></div><div class="ttdeci">fmt()</div><div class="ttdoc"> Empty constructor, only useful for a no-op formatter. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:208</div></div>
<div class="ttc" id="classclutchlog_html_af1219599b1361562c802779572aa669f"><div class="ttname"><a href="classclutchlog.html#af1219599b1361562c802779572aa669f">clutchlog::format</a></div><div class="ttdeci">std::string format(std::string format, const std::string &amp;what, const level &amp;stage, const std::string &amp;file, const std::string &amp;func, const size_t line) const</div><div class="ttdoc">Substitute all tags in the format string with the corresponding information and apply the style corre...</div><div class="ttdef"><b>Definition:</b> clutchlog.h:585</div></div>
<div class="ttc" id="structclutchlog_1_1scope__t_html"><div class="ttname"><a href="structclutchlog_1_1scope__t.html">clutchlog::scope_t</a></div><div class="ttdoc">Structure holding a location matching. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:348</div></div>
<div class="ttc" id="classclutchlog_html_a4ebdfcded6c56262676bf6926d63fc96"><div class="ttname"><a href="classclutchlog.html#a4ebdfcded6c56262676bf6926d63fc96">clutchlog::locate</a></div><div class="ttdeci">scope_t locate(const level &amp;stage, const std::string &amp;file, const std::string &amp;func, const size_t line) const</div><div class="ttdoc">Gather information on the current location of the call. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:366</div></div>
<div class="ttc" id="group__DefaultConfigMacros_html_ga524c16f280d92ee8ab683162c9ce01fa"><div class="ttname"><a href="group__DefaultConfigMacros.html#ga524c16f280d92ee8ab683162c9ce01fa">CLUTCHLOG_DEFAULT_FORMAT</a></div><div class="ttdeci">#define CLUTCHLOG_DEFAULT_FORMAT</div><div class="ttdoc">Default format of the messages. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:49</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a4662a3ec3577c6a575a2c734636ed8a0"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a4662a3ec3577c6a575a2c734636ed8a0">clutchlog::fmt::fg</a></div><div class="ttdeci">fg</div><div class="ttdoc">Foreground color codes. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:173</div></div>
<div class="ttc" id="classclutchlog_html_a10fd25a1b51c8c95bd6d876ce1b4b928"><div class="ttname"><a href="classclutchlog.html#a10fd25a1b51c8c95bd6d876ce1b4b928">clutchlog::level</a></div><div class="ttdeci">level</div><div class="ttdoc">Available log levels. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:156</div></div>
<div class="ttc" id="group__DefaultConfigMacros_html_ga27b613c6727857a7cbcd0165d862034e"><div class="ttname"><a href="group__DefaultConfigMacros.html#ga27b613c6727857a7cbcd0165d862034e">CLUTCHDUMP_DEFAULT_FORMAT</a></div><div class="ttdeci">#define CLUTCHDUMP_DEFAULT_FORMAT</div><div class="ttdoc">Default format of the comment line in file dump. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:58</div></div>
<div class="ttc" id="classclutchlog_html_a6c6ab42a1df147e6c2d115bc36ec8266"><div class="ttname"><a href="classclutchlog.html#a6c6ab42a1df147e6c2d115bc36ec8266">clutchlog::out</a></div><div class="ttdeci">std::ostream &amp; out()</div><div class="ttdoc">Get the output stream on which to print. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:432</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a96849ba427feac3a2eeaa1165e3845da"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a96849ba427feac3a2eeaa1165e3845da">clutchlog::fmt::operator&lt;&lt;</a></div><div class="ttdeci">friend std::ostream &amp; operator&lt;&lt;(std::ostream &amp;os, const fmt &amp;fmt)</div><div class="ttdoc">Output stream overload. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:252</div></div>
<div class="ttc" id="classclutchlog_html_acebed8c9df9204f22bf8488e62e1cedd"><div class="ttname"><a href="classclutchlog.html#acebed8c9df9204f22bf8488e62e1cedd">clutchlog::level_of</a></div><div class="ttdeci">level level_of(const std::string name)</div><div class="ttdoc">Return the log level tag corresponding to the given pre-configured name. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:485</div></div>
<div class="ttc" id="classclutchlog_html_ac3ec55057b9c734b66f169bf43dbd591"><div class="ttname"><a href="classclutchlog.html#ac3ec55057b9c734b66f169bf43dbd591">clutchlog::style</a></div><div class="ttdeci">void style(level stage, FMT... styles)</div><div class="ttdoc">Set the style (color and typo) of the given log level. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:475</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_afeaedd18298498d1dcfcc15f5f17ac3c"><div class="ttname"><a href="classclutchlog_1_1fmt.html#afeaedd18298498d1dcfcc15f5f17ac3c">clutchlog::fmt::operator()</a></div><div class="ttdeci">std::string operator()(const std::string &amp;msg) const</div><div class="ttdoc">Format the given string with the currently encoded format. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:267</div></div>
<div class="ttc" id="classclutchlog_html_ad1cfa9945c3f7f98fe8ce724c627d0d6"><div class="ttname"><a href="classclutchlog.html#ad1cfa9945c3f7f98fe8ce724c627d0d6">clutchlog::style</a></div><div class="ttdeci">void style(level stage, fmt style)</div><div class="ttdoc">Set the style (color and typo) of the given log level, passing a fmt instance. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:477</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a0b607e343b6813b99eafca1fdfec9cd0"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a0b607e343b6813b99eafca1fdfec9cd0">clutchlog::fmt::print_on</a></div><div class="ttdeci">std::ostream &amp; print_on(std::ostream &amp;os) const</div><div class="ttdoc">Print the currently encoded format escape code on the given output stream. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:222</div></div>
<div class="ttc" id="classclutchlog_html_acfaceb77da01503b432644a3efaee4fa"><div class="ttname"><a href="classclutchlog.html#acfaceb77da01503b432644a3efaee4fa">clutchlog::logger</a></div><div class="ttdeci">static clutchlog &amp; logger()</div><div class="ttdoc">Get the logger instance. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:149</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a932f47b78fb7b10590d5613a1c4eab89"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a932f47b78fb7b10590d5613a1c4eab89">clutchlog::fmt::typo</a></div><div class="ttdeci">typo</div><div class="ttdoc">Typographic style codes. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:199</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html_a1cf3e27e4041250ffea0a6d58010da1e"><div class="ttname"><a href="classclutchlog_1_1fmt.html#a1cf3e27e4041250ffea0a6d58010da1e">clutchlog::fmt::bg</a></div><div class="ttdeci">bg</div><div class="ttdoc">Background color codes. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:186</div></div>
<div class="ttc" id="classclutchlog_html_ae7edb2e14f3d55b201b834255aa4bce9"><div class="ttname"><a href="classclutchlog.html#ae7edb2e14f3d55b201b834255aa4bce9">clutchlog::dump</a></div><div class="ttdeci">void dump(const level &amp;stage, const In container_begin, const In container_end, const std::string &amp;file, const std::string &amp;func, size_t line, const std::string &amp;filename_template=&quot;dump_{n}.dat&quot;, const std::string sep=CLUTCHDUMP_DEFAULT_SEP) const</div><div class="ttdoc">Dump a serializable container after a comment line with log information. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:650</div></div>
<div class="ttc" id="classclutchlog_html_a10064493c22f5c03b502a42d814c5c5c"><div class="ttname"><a href="classclutchlog.html#a10064493c22f5c03b502a42d814c5c5c">clutchlog::file</a></div><div class="ttdeci">void file(std::string file)</div><div class="ttdoc">Set the regular expression filtering the file location. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:452</div></div>
<div class="ttc" id="classclutchlog_html_ae90d5a1a428587ad67b38b2ea4ca9fa2"><div class="ttname"><a href="classclutchlog.html#ae90d5a1a428587ad67b38b2ea4ca9fa2">clutchlog::replace</a></div><div class="ttdeci">std::string replace(const std::string &amp;form, const std::string &amp;mark, const size_t tag) const</div><div class="ttdoc">Replace mark by tag in form, converting tag to its string representation first. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:574</div></div>
<div class="ttc" id="classclutchlog_html_a4831f44fd5ade102e57320632095934d"><div class="ttname"><a href="classclutchlog.html#a4831f44fd5ade102e57320632095934d">clutchlog::style</a></div><div class="ttdeci">fmt style(level stage) const</div><div class="ttdoc">Get the configured fmt instance of the given log level. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:479</div></div>
<div class="ttc" id="group__DefaultConfigMacros_html_ga54d29e956575e1c731eab5406135c5df"><div class="ttname"><a href="group__DefaultConfigMacros.html#ga54d29e956575e1c731eab5406135c5df">CLUTCHDUMP_DEFAULT_SEP</a></div><div class="ttdeci">#define CLUTCHDUMP_DEFAULT_SEP</div><div class="ttdoc">Default item separator for dump. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:64</div></div>
<div class="ttc" id="classclutchlog_html_ab45287cc9c14217904a13aff49573732"><div class="ttname"><a href="classclutchlog.html#ab45287cc9c14217904a13aff49573732">clutchlog::threshold</a></div><div class="ttdeci">level threshold() const</div><div class="ttdoc">Get the log level below which logs are not printed. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:449</div></div>
<div class="ttc" id="classclutchlog_1_1fmt_html"><div class="ttname"><a href="classclutchlog_1_1fmt.html">clutchlog::fmt</a></div><div class="ttdoc">Color and style formatter for ANSI terminal escape sequences. </div><div class="ttdef"><b>Definition:</b> clutchlog.h:170</div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>