Danny Gratzer avatar Danny Gratzer committed b5e2d98 Draft

Updated more documentation and added rotator.cpp and rotator.hpp.

rotator will be used to support rolling logging handlers.

Comments (0)

Files changed (34)

docs/html/classal_1_1file__handler-members.html

+<!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"/>
+<title>Al: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><b>al</b>      </li>
+      <li class="navelem"><a class="el" href="classal_1_1file__handler.html">file_handler</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">al::file_handler Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classal_1_1file__handler.html">al::file_handler</a>, including all inherited members.<table>
+  <tr class="memlist"><td><a class="el" href="classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664">file_handler</a>(const std::string &amp;file)</td><td><a class="el" href="classal_1_1file__handler.html">al::file_handler</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classal_1_1file__handler.html#a5de57304a22107e403c1ac917001da38">handle</a>(level, const std::string &amp;, const std::string &amp;)</td><td><a class="el" href="classal_1_1file__handler.html">al::file_handler</a></td><td><code> [virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>to_string</b>(level l) (defined in <a class="el" href="classal_1_1handler.html">al::handler</a>)</td><td><a class="el" href="classal_1_1handler.html">al::handler</a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~handler</b>() (defined in <a class="el" href="classal_1_1handler.html">al::handler</a>)</td><td><a class="el" href="classal_1_1handler.html">al::handler</a></td><td><code> [inline, virtual]</code></td></tr>
+</table></div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>

docs/html/classal_1_1file__handler.html

+<!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"/>
+<title>Al: al::file_handler Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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"><b>al</b>      </li>
+      <li class="navelem"><a class="el" href="classal_1_1file__handler.html">file_handler</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#pub-methods">Public Member Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">al::file_handler Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<!-- doxytag: class="al::file_handler" --><!-- doxytag: inherits="al::handler" -->
+<p>The classic file logger, based on std::ofstream.  
+ <a href="classal_1_1file__handler.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="file__handler_8hpp_source.html">file_handler.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for al::file_handler:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="classal_1_1file__handler.png" usemap="#al::file_handler_map" alt=""/>
+  <map id="al::file_handler_map" name="al::file_handler_map">
+<area href="classal_1_1handler.html" title="An abstract base class for all handler classes." alt="al::handler" shape="rect" coords="0,0,95,24"/>
+</map>
+ </div></div>
+
+<p><a href="classal_1_1file__handler-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664">file_handler</a> (const std::string &amp;file)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classal_1_1file__handler.html#a5de57304a22107e403c1ac917001da38">handle</a> (level, const std::string &amp;, const std::string &amp;)</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>The classic file logger, based on std::ofstream. </p>
+<p><a class="el" href="classal_1_1file__handler.html" title="The classic file logger, based on std::ofstream.">file_handler</a> </p>
+</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a77f69cc57230734c01c160989c0e3664"></a><!-- doxytag: member="al::file_handler::file_handler" ref="a77f69cc57230734c01c160989c0e3664" args="(const std::string &amp;file)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664">file_handler::file_handler</a> </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>file</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+  <table class="params">
+    <tr><td class="paramname">file</td><td>The file name for the log file. </td></tr>
+  </table>
+  </dd>
+</dl>
+<dl class="exception"><dt><b>Exceptions:</b></dt><dd>
+  <table class="exception">
+    <tr><td class="paramname">std::runtime_error</td><td>If the file is unable to be opened. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="a5de57304a22107e403c1ac917001da38"></a><!-- doxytag: member="al::file_handler::handle" ref="a5de57304a22107e403c1ac917001da38" args="(level, const std::string &amp;, const std::string &amp;)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="classal_1_1file__handler.html#a5de57304a22107e403c1ac917001da38">file_handler::handle</a> </td>
+          <td>(</td>
+          <td class="paramtype">level&#160;</td>
+          <td class="paramname"><em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>message</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Prints the message to the log file in csv form.</p>
+<p>"level,name,message" </p>
+
+<p>Implements <a class="el" href="classal_1_1handler.html#a29a3fb2757d02ed144cb71166aad1dfe">al::handler</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/handlers/<a class="el" href="file__handler_8hpp_source.html">file_handler.hpp</a></li>
+<li>src/handlers/file_handler.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>
Add a comment to this file

docs/html/classal_1_1file__handler.png

Added
New image

docs/html/classal_1_1memory__handler-members.html

+<!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"/>
+<title>Al: Member List</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><b>al</b>      </li>
+      <li class="navelem"><a class="el" href="classal_1_1memory__handler.html">memory_handler</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">al::memory_handler Member List</div>  </div>
+</div><!--header-->
+<div class="contents">
+This is the complete list of members for <a class="el" href="classal_1_1memory__handler.html">al::memory_handler</a>, including all inherited members.<table>
+  <tr class="memlist"><td><a class="el" href="classal_1_1memory__handler.html#ac7d78c5cee952f2934b12e26f4f271eb">handle</a>(level, const std::string &amp;, const std::string &amp;)</td><td><a class="el" href="classal_1_1memory__handler.html">al::memory_handler</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32">memory_handler</a>(size_t bsize, std::shared_ptr&lt; handler &gt; exit)</td><td><a class="el" href="classal_1_1memory__handler.html">al::memory_handler</a></td><td></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>to_string</b>(level l) (defined in <a class="el" href="classal_1_1handler.html">al::handler</a>)</td><td><a class="el" href="classal_1_1handler.html">al::handler</a></td><td><code> [inline, protected, virtual]</code></td></tr>
+  <tr bgcolor="#f0f0f0"><td><b>~handler</b>() (defined in <a class="el" href="classal_1_1handler.html">al::handler</a>)</td><td><a class="el" href="classal_1_1handler.html">al::handler</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c">~memory_handler</a>()</td><td><a class="el" href="classal_1_1memory__handler.html">al::memory_handler</a></td><td></td></tr>
+</table></div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>

docs/html/classal_1_1memory__handler.html

+<!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"/>
+<title>Al: al::memory_handler Class Reference</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
+      <li><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
+      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
+      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
+      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
+    </ul>
+  </div>
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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"><b>al</b>      </li>
+      <li class="navelem"><a class="el" href="classal_1_1memory__handler.html">memory_handler</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> &#124;
+<a href="#pub-methods">Public Member Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">al::memory_handler Class Reference</div>  </div>
+</div><!--header-->
+<div class="contents">
+<!-- doxytag: class="al::memory_handler" --><!-- doxytag: inherits="al::handler" -->
+<p>An in memory handler that flushes its entries to a specified handler on its destruction.  
+ <a href="classal_1_1memory__handler.html#details">More...</a></p>
+
+<p><code>#include &lt;<a class="el" href="memory__handler_8hpp_source.html">memory_handler.hpp</a>&gt;</code></p>
+<div class="dynheader">
+Inheritance diagram for al::memory_handler:</div>
+<div class="dyncontent">
+ <div class="center">
+  <img src="classal_1_1memory__handler.png" usemap="#al::memory_handler_map" alt=""/>
+  <map id="al::memory_handler_map" name="al::memory_handler_map">
+<area href="classal_1_1handler.html" title="An abstract base class for all handler classes." alt="al::handler" shape="rect" coords="0,0,122,24"/>
+</map>
+ </div></div>
+
+<p><a href="classal_1_1memory__handler-members.html">List of all members.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><b>log_entry</b></td></tr>
+<tr><td colspan="2"><h2><a name="pub-methods"></a>
+Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32">memory_handler</a> (size_t bsize, std::shared_ptr&lt; <a class="el" href="classal_1_1handler.html">handler</a> &gt; exit)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classal_1_1memory__handler.html#ac7d78c5cee952f2934b12e26f4f271eb">handle</a> (level, const std::string &amp;, const std::string &amp;)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c">~memory_handler</a> ()</td></tr>
+</table>
+<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
+<div class="textblock"><p>An in memory handler that flushes its entries to a specified handler on its destruction. </p>
+<p><a class="el" href="classal_1_1memory__handler.html" title="An in memory handler that flushes its entries to a specified handler on its destruction.">memory_handler</a> </p>
+</div><hr/><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="a74331eb896c73e46e9d8da1ab8443b32"></a><!-- doxytag: member="al::memory_handler::memory_handler" ref="a74331eb896c73e46e9d8da1ab8443b32" args="(size_t bsize, std::shared_ptr&lt; handler &gt; exit)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32">memory_handler::memory_handler</a> </td>
+          <td>(</td>
+          <td class="paramtype">size_t&#160;</td>
+          <td class="paramname"><em>bsize</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">std::shared_ptr&lt; <a class="el" href="classal_1_1handler.html">handler</a> &gt;&#160;</td>
+          <td class="paramname"><em>exit</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<dl class="params"><dt><b>Parameters:</b></dt><dd>
+  <table class="params">
+    <tr><td class="paramname">bsize</td><td>The maximum number of entries to store in memory. </td></tr>
+    <tr><td class="paramname">exit</td><td>The handler which should be invoked on this objects destruction. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
+<a class="anchor" id="a09887d99cbdaea2db862a92b9d1edd7c"></a><!-- doxytag: member="al::memory_handler::~memory_handler" ref="a09887d99cbdaea2db862a92b9d1edd7c" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c">memory_handler::~memory_handler</a> </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Passes every entry in the buffer to the specified handler.</p>
+<p>If an exception is thrown, it is caught silently and the destructor returns. </p>
+
+</div>
+</div>
+<hr/><h2>Member Function Documentation</h2>
+<a class="anchor" id="ac7d78c5cee952f2934b12e26f4f271eb"></a><!-- doxytag: member="al::memory_handler::handle" ref="ac7d78c5cee952f2934b12e26f4f271eb" args="(level, const std::string &amp;, const std::string &amp;)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void <a class="el" href="classal_1_1memory__handler.html#ac7d78c5cee952f2934b12e26f4f271eb">memory_handler::handle</a> </td>
+          <td>(</td>
+          <td class="paramtype">level&#160;</td>
+          <td class="paramname"><em>l</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>message</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [virtual]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Stores the entry in memory (currently a std::deque). If the number of entries exceeds the expected maximum amount, the oldest is deleted. </p>
+
+<p>Implements <a class="el" href="classal_1_1handler.html#a29a3fb2757d02ed144cb71166aad1dfe">al::handler</a>.</p>
+
+</div>
+</div>
+<hr/>The documentation for this class was generated from the following files:<ul>
+<li>src/handlers/<a class="el" href="memory__handler_8hpp_source.html">memory_handler.hpp</a></li>
+<li>src/handlers/memory_handler.cpp</li>
+</ul>
+</div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>
Add a comment to this file

docs/html/classal_1_1memory__handler.png

Added
New image

docs/html/file__handler_8hpp_source.html

+<!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"/>
+<title>Al: src/handlers/file_handler.hpp Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">src/handlers/file_handler.hpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef FILE_HANDLER_H</span>
+<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define FILE_HANDLER_H</span>
+<a name="l00003"></a>00003 <span class="preprocessor"></span><span class="preprocessor">#include &lt;fstream&gt;</span> <span class="comment">//A simple header which has forward declarations of all streams</span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include &quot;handler.hpp&quot;</span>
+<a name="l00005"></a>00005 
+<a name="l00006"></a>00006 <span class="keyword">namespace </span>al{
+<a name="l00007"></a>00007 
+<a name="l00012"></a><a class="code" href="classal_1_1file__handler.html">00012</a>   <span class="keyword">class </span><a class="code" href="classal_1_1file__handler.html" title="The classic file logger, based on std::ofstream.">file_handler</a> : <span class="keyword">public</span> <a class="code" href="classal_1_1handler.html" title="An abstract base class for all handler classes.">handler</a>{
+<a name="l00013"></a>00013     <span class="keyword">public</span>:
+<a name="l00018"></a>00018       <a class="code" href="classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664">file_handler</a>(<span class="keyword">const</span> std::string&amp; file);
+<a name="l00019"></a>00019 
+<a name="l00025"></a>00025       <span class="keywordtype">void</span> <a class="code" href="classal_1_1file__handler.html#a5de57304a22107e403c1ac917001da38">handle</a>(level, <span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> std::string&amp;);
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027     <span class="keyword">private</span>:
+<a name="l00028"></a>00028       std::ofstream stream;
+<a name="l00029"></a>00029   };
+<a name="l00030"></a>00030 }
+<a name="l00031"></a>00031 
+<a name="l00032"></a>00032 <span class="preprocessor">#endif</span>
+</pre></div></div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>

docs/html/memory__handler_8hpp_source.html

+<!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"/>
+<title>Al: src/handlers/memory_handler.hpp Source File</title>
+
+<link href="tabs.css" rel="stylesheet" type="text/css"/>
+<link href="doxygen.css" rel="stylesheet" type="text/css" />
+
+<link href="search/search.css" rel="stylesheet" type="text/css"/>
+<script type="text/javascript" src="jquery.js"></script>
+<script type="text/javascript" src="search/search.js"></script>
+<script type="text/javascript">
+  $(document).ready(function() { searchBox.OnSelectItem(0); });
+</script>
+
+</head>
+<body>
+<div id="top"><!-- do not remove this div! -->
+
+
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  
+  <td id="projectlogo"><img alt="Logo" src="al.jpg"/></td>
+  
+  
+  <td style="padding-left: 0.5em;">
+   <div id="projectname">Al
+   &#160;<span id="projectnumber">0.1</span>
+   </div>
+   <div id="projectbrief">Al, short for &quot;Another logger&quot; is a simple lightweight logging system in C++. It is designed both for my personal use and for the FIRST robotics competition. It&#39;s designed to feel similar to streams but with much more flexible possibilities.</div>
+  </td>
+  
+  
+  
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<!-- Generated by Doxygen 1.7.6.1 -->
+<script type="text/javascript">
+var searchBox = new SearchBox("searchBox", "search",false,'Search');
+</script>
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li>
+        <div id="MSearchBox" class="MSearchBoxInactive">
+        <span class="left">
+          <img id="MSearchSelect" src="search/mag_sel.png"
+               onmouseover="return searchBox.OnSearchSelectShow()"
+               onmouseout="return searchBox.OnSearchSelectHide()"
+               alt=""/>
+          <input type="text" id="MSearchField" value="Search" accesskey="S"
+               onfocus="searchBox.OnSearchFieldFocus(true)" 
+               onblur="searchBox.OnSearchFieldFocus(false)" 
+               onkeyup="searchBox.OnSearchFieldChange(event)"/>
+          </span><span class="right">
+            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File&#160;List</span></a></li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">src/handlers/memory_handler.hpp</div>  </div>
+</div><!--header-->
+<div class="contents">
+<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="preprocessor">#ifndef MEMORY_HANDLER_H</span>
+<a name="l00002"></a>00002 <span class="preprocessor"></span><span class="preprocessor">#define MEMORY_HANDLER_H</span>
+<a name="l00003"></a>00003 <span class="preprocessor"></span>
+<a name="l00004"></a>00004 <span class="preprocessor">#include &lt;memory&gt;</span>
+<a name="l00005"></a>00005 <span class="preprocessor">#include &lt;deque&gt;</span>
+<a name="l00006"></a>00006 <span class="preprocessor">#include &quot;handler.hpp&quot;</span>
+<a name="l00007"></a>00007 
+<a name="l00008"></a>00008 <span class="keyword">namespace </span>al{
+<a name="l00009"></a>00009 
+<a name="l00014"></a><a class="code" href="classal_1_1memory__handler.html">00014</a>   <span class="keyword">class </span><a class="code" href="classal_1_1memory__handler.html" title="An in memory handler that flushes its entries to a specified handler on its destruction.">memory_handler</a> :<span class="keyword">public</span> <a class="code" href="classal_1_1handler.html" title="An abstract base class for all handler classes.">handler</a>{
+<a name="l00015"></a>00015     <span class="keyword">public</span>:
+<a name="l00020"></a>00020       <a class="code" href="classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32">memory_handler</a>(<span class="keywordtype">size_t</span> bsize,std::shared_ptr&lt;handler&gt; exit);
+<a name="l00021"></a>00021 
+<a name="l00026"></a>00026       <span class="keywordtype">void</span> <a class="code" href="classal_1_1memory__handler.html#ac7d78c5cee952f2934b12e26f4f271eb">handle</a>(level,<span class="keyword">const</span> std::string&amp;,<span class="keyword">const</span> std::string&amp;);
+<a name="l00027"></a>00027 
+<a name="l00033"></a>00033       <a class="code" href="classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c">~memory_handler</a>();
+<a name="l00034"></a>00034     <span class="keyword">private</span>:
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036       <span class="keyword">struct </span>log_entry{
+<a name="l00037"></a>00037         log_entry(level lev, <span class="keyword">const</span> std::string&amp; n, <span class="keyword">const</span> std::string&amp; m)
+<a name="l00038"></a>00038           :l(lev), name(n), message(m) {}
+<a name="l00039"></a>00039         level l;
+<a name="l00040"></a>00040         <span class="keyword">const</span> std::string name;
+<a name="l00041"></a>00041         <span class="keyword">const</span> std::string message;
+<a name="l00042"></a>00042       };
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044       std::shared_ptr&lt;handler&gt; exit_handler;
+<a name="l00045"></a>00045       <span class="keywordtype">size_t</span> size;
+<a name="l00046"></a>00046       std::deque&lt;log_entry&gt; buffer;
+<a name="l00047"></a>00047   };
+<a name="l00048"></a>00048 }
+<a name="l00049"></a>00049 <span class="preprocessor">#endif</span>
+</pre></div></div><!-- contents -->
+<!-- window showing the filter options -->
+<div id="MSearchSelectWindow"
+     onmouseover="return searchBox.OnSearchSelectShow()"
+     onmouseout="return searchBox.OnSearchSelectHide()"
+     onkeydown="return searchBox.OnSearchSelectKey(event)">
+<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Functions</a></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>
+
+
+
+<hr class="footer"/><address class="footer"><small>
+Generated on Sat Nov 10 2012 14:13:31 for Al by &#160;<a href="http://www.doxygen.org/index.html">
+<img class="footer" src="doxygen.png" alt="doxygen"/>
+</a> 1.7.6.1
+</small></address>
+
+</body>
+</html>

docs/html/search/all_66.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_66.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/all_66.js

+var searchData=
+[
+  ['file_5fhandler',['file_handler',['../classal_1_1file__handler.html',1,'al']]],
+  ['file_5fhandler',['file_handler',['../classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664',1,'al::file_handler']]]
+];

docs/html/search/all_6d.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/all_6d.js

+var searchData=
+[
+  ['memory_5fhandler',['memory_handler',['../classal_1_1memory__handler.html',1,'al']]],
+  ['memory_5fhandler',['memory_handler',['../classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32',1,'al::memory_handler']]]
+];

docs/html/search/all_7e.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="all_7e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/all_7e.js

+var searchData=
+[
+  ['_7ememory_5fhandler',['~memory_handler',['../classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c',1,'al::memory_handler']]]
+];

docs/html/search/classes_66.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_66.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/classes_66.js

+var searchData=
+[
+  ['file_5fhandler',['file_handler',['../classal_1_1file__handler.html',1,'al']]]
+];

docs/html/search/classes_6d.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="classes_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/classes_6d.js

+var searchData=
+[
+  ['memory_5fhandler',['memory_handler',['../classal_1_1memory__handler.html',1,'al']]]
+];

docs/html/search/functions_66.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_66.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/functions_66.js

+var searchData=
+[
+  ['file_5fhandler',['file_handler',['../classal_1_1file__handler.html#a77f69cc57230734c01c160989c0e3664',1,'al::file_handler']]]
+];

docs/html/search/functions_6d.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_6d.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/functions_6d.js

+var searchData=
+[
+  ['memory_5fhandler',['memory_handler',['../classal_1_1memory__handler.html#a74331eb896c73e46e9d8da1ab8443b32',1,'al::memory_handler']]]
+];

docs/html/search/functions_7e.html

+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html><head><title></title>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<link rel="stylesheet" type="text/css" href="search.css"/>
+<script type="text/javascript" src="functions_7e.js"></script>
+<script type="text/javascript" src="search.js"></script>
+</head>
+<body class="SRPage">
+<div id="SRIndex">
+<div class="SRStatus" id="Loading">Loading...</div>
+<div id="SRResults"></div>
+<script type="text/javascript"><!--
+createResults();
+--></script>
+<div class="SRStatus" id="Searching">Searching...</div>
+<div class="SRStatus" id="NoMatches">No Matches</div>
+<script type="text/javascript"><!--
+document.getElementById("Loading").style.display="none";
+document.getElementById("NoMatches").style.display="none";
+var searchResults = new SearchResults("searchResults");
+searchResults.Search();
+--></script>
+</div>
+</body>
+</html>

docs/html/search/functions_7e.js

+var searchData=
+[
+  ['_7ememory_5fhandler',['~memory_handler',['../classal_1_1memory__handler.html#a09887d99cbdaea2db862a92b9d1edd7c',1,'al::memory_handler']]]
+];

docs/latex/classal_1_1file__handler.eps

+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For: 
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 388.349515
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 1.287500 def  % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid  { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+  /a exch def
+  /b exch def
+  a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+  0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+  /str exch def
+  /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+  2 setlinewidth
+  newpath
+  exch xspacing mul xoffset add
+  exch yspacing mul
+  moveto
+  boxwidth 0 rlineto 
+  0 boxheight rlineto 
+  boxwidth neg 0 rlineto 
+  0 boxheight neg rlineto 
+  closepath
+  dup stringwidth pop neg boxwidth add 2 div
+  boxheight fontheight 2 div sub 2 div
+  rmoveto show stroke
+  grestore
+} def  
+
+/mark
+{ newpath
+  exch xspacing mul xoffset add boxwidth add
+  exch yspacing mul
+  moveto
+  0 boxheight 4 div rlineto
+  boxheight neg 4 div boxheight neg 4 div rlineto
+  closepath
+  eofill
+  stroke
+} def
+
+/arrow
+{ newpath
+  moveto
+  3 -8 rlineto
+  -6 0 rlineto
+  3 8 rlineto
+  closepath
+  eofill
+  stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+  newpath
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul boxheight add
+  /y exch def
+  /x exch def
+  x y moveto
+  0 disty 2 div rlineto 
+  stroke
+  1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+  newpath
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul disty 2 div sub
+  /y exch def
+  /x exch def
+  x y moveto
+  0 disty 2 div rlineto
+  stroke
+  1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul boxheight 2 div sub
+  /y exch def
+  /x exch def
+  newpath
+  x y moveto
+  boxwidth 2 div distx add 0 rlineto
+  stroke
+  1 eq
+  { newpath x boxwidth 2 div distx add add y moveto
+    -8 3 rlineto
+    0 -6 rlineto
+    8 3 rlineto
+    closepath
+    eofill
+    stroke
+  } if
+} def
+
+/vedge
+{
+  /ye exch def
+  /ys exch def
+  /xs exch def
+  newpath
+  xs xspacing mul xoffset add boxwidth 2 div add dup
+  ys yspacing mul boxheight 2 div sub
+  moveto
+  ye yspacing mul boxheight 2 div sub
+  lineto
+  stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+  /ys exch def
+  /xe exch def
+  /xs exch def
+  newpath
+  xs xspacing mul xoffset add boxwidth 2 div add
+  ys yspacing mul disty 2 div sub
+  moveto
+  xspacing xe xs sub mul 0
+  rlineto
+  stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(al::file_handler) cw
+(al::handler) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor 
+  boxwidth cols mul distx cols 1 sub mul add
+  boxheight rows mul disty rows 1 sub mul add boundaspect mul 
+  max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (al::file_handler) 0.000000 0.000000 box
+ (al::handler) 0.000000 1.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
Add a comment to this file

docs/latex/classal_1_1file__handler.pdf

Binary file added.

docs/latex/classal_1_1file__handler.tex

+\hypertarget{classal_1_1file__handler}{\section{al\-:\-:file\-\_\-handler \-Class \-Reference}
+\label{classal_1_1file__handler}\index{al\-::file\-\_\-handler@{al\-::file\-\_\-handler}}
+}
+
+
+\-The classic file logger, based on std\-::ofstream.  
+
+
+
+
+{\ttfamily \#include $<$file\-\_\-handler.\-hpp$>$}
+
+\-Inheritance diagram for al\-:\-:file\-\_\-handler\-:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classal_1_1file__handler}
+\end{center}
+\end{figure}
+\subsection*{\-Public \-Member \-Functions}
+\begin{DoxyCompactItemize}
+\item 
+\hyperlink{classal_1_1file__handler_a77f69cc57230734c01c160989c0e3664}{file\-\_\-handler} (const std\-::string \&file)
+\item 
+void \hyperlink{classal_1_1file__handler_a5de57304a22107e403c1ac917001da38}{handle} (level, const std\-::string \&, const std\-::string \&)
+\end{DoxyCompactItemize}
+
+
+\subsection{\-Detailed \-Description}
+\-The classic file logger, based on std\-::ofstream. 
+
+\hyperlink{classal_1_1file__handler}{file\-\_\-handler} 
+
+\subsection{\-Constructor \& \-Destructor \-Documentation}
+\hypertarget{classal_1_1file__handler_a77f69cc57230734c01c160989c0e3664}{\index{al\-::file\-\_\-handler@{al\-::file\-\_\-handler}!file\-\_\-handler@{file\-\_\-handler}}
+\index{file\-\_\-handler@{file\-\_\-handler}!al::file_handler@{al\-::file\-\_\-handler}}
+\subsubsection[{file\-\_\-handler}]{\setlength{\rightskip}{0pt plus 5cm}{\bf file\-\_\-handler\-::file\-\_\-handler} (
+\begin{DoxyParamCaption}
+\item[{const std\-::string \&}]{file}
+\end{DoxyParamCaption}
+)}}\label{classal_1_1file__handler_a77f69cc57230734c01c160989c0e3664}
+
+\begin{DoxyParams}{\-Parameters}
+{\em file} & \-The file name for the log file. \\
+\hline
+\end{DoxyParams}
+
+\begin{DoxyExceptions}{\-Exceptions}
+{\em std\-::runtime\-\_\-error} & \-If the file is unable to be opened. \\
+\hline
+\end{DoxyExceptions}
+
+
+\subsection{\-Member \-Function \-Documentation}
+\hypertarget{classal_1_1file__handler_a5de57304a22107e403c1ac917001da38}{\index{al\-::file\-\_\-handler@{al\-::file\-\_\-handler}!handle@{handle}}
+\index{handle@{handle}!al::file_handler@{al\-::file\-\_\-handler}}
+\subsubsection[{handle}]{\setlength{\rightskip}{0pt plus 5cm}void {\bf file\-\_\-handler\-::handle} (
+\begin{DoxyParamCaption}
+\item[{level}]{l, }
+\item[{const std\-::string \&}]{name, }
+\item[{const std\-::string \&}]{message}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}\label{classal_1_1file__handler_a5de57304a22107e403c1ac917001da38}
+\-Prints the message to the log file in csv form.
+
+\char`\"{}level,name,message\char`\"{} 
+
+\-Implements \hyperlink{classal_1_1handler_a29a3fb2757d02ed144cb71166aad1dfe}{al\-::handler}.
+
+
+
+\-The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+src/handlers/file\-\_\-handler.\-hpp\item 
+src/handlers/file\-\_\-handler.\-cpp\end{DoxyCompactItemize}

docs/latex/classal_1_1memory__handler.eps

+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: ClassName
+%%Creator: Doxygen
+%%CreationDate: Time
+%%For: 
+%Magnification: 1.00
+%%Orientation: Portrait
+%%BoundingBox: 0 0 500 307.692308
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%EndComments
+
+% ----- variables -----
+
+/boxwidth 0 def
+/boxheight 40 def
+/fontheight 24 def
+/marginwidth 10 def
+/distx 20 def
+/disty 40 def
+/boundaspect 1.625000 def  % aspect ratio of the BoundingBox (width/height)
+/boundx 500 def
+/boundy boundx boundaspect div def
+/xspacing 0 def
+/yspacing 0 def
+/rows 2 def
+/cols 1 def
+/scalefactor 0 def
+/boxfont /Times-Roman findfont fontheight scalefont def
+
+% ----- procedures -----
+
+/dotted { [1 4] 0 setdash } def
+/dashed { [5] 0 setdash } def
+/solid  { [] 0 setdash } def
+
+/max % result = MAX(arg1,arg2)
+{
+  /a exch def
+  /b exch def
+  a b gt {a} {b} ifelse
+} def
+
+/xoffset % result = MAX(0,(scalefactor-(boxwidth*cols+distx*(cols-1)))/2)
+{
+  0 scalefactor boxwidth cols mul distx cols 1 sub mul add sub 2 div max
+} def
+
+/cw % boxwidth = MAX(boxwidth, stringwidth(arg1))
+{
+  /str exch def
+  /boxwidth boxwidth str stringwidth pop max def
+} def
+
+/box % draws a box with text `arg1' at grid pos (arg2,arg3)
+{ gsave
+  2 setlinewidth
+  newpath
+  exch xspacing mul xoffset add
+  exch yspacing mul
+  moveto
+  boxwidth 0 rlineto 
+  0 boxheight rlineto 
+  boxwidth neg 0 rlineto 
+  0 boxheight neg rlineto 
+  closepath
+  dup stringwidth pop neg boxwidth add 2 div
+  boxheight fontheight 2 div sub 2 div
+  rmoveto show stroke
+  grestore
+} def  
+
+/mark
+{ newpath
+  exch xspacing mul xoffset add boxwidth add
+  exch yspacing mul
+  moveto
+  0 boxheight 4 div rlineto
+  boxheight neg 4 div boxheight neg 4 div rlineto
+  closepath
+  eofill
+  stroke
+} def
+
+/arrow
+{ newpath
+  moveto
+  3 -8 rlineto
+  -6 0 rlineto
+  3 8 rlineto
+  closepath
+  eofill
+  stroke
+} def
+
+/out % draws an output connector for the block at (arg1,arg2)
+{
+  newpath
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul boxheight add
+  /y exch def
+  /x exch def
+  x y moveto
+  0 disty 2 div rlineto 
+  stroke
+  1 eq { x y disty 2 div add arrow } if
+} def
+
+/in % draws an input connector for the block at (arg1,arg2)
+{
+  newpath
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul disty 2 div sub
+  /y exch def
+  /x exch def
+  x y moveto
+  0 disty 2 div rlineto
+  stroke
+  1 eq { x y disty 2 div add arrow } if
+} def
+
+/hedge
+{
+  exch xspacing mul xoffset add boxwidth 2 div add
+  exch yspacing mul boxheight 2 div sub
+  /y exch def
+  /x exch def
+  newpath
+  x y moveto
+  boxwidth 2 div distx add 0 rlineto
+  stroke
+  1 eq
+  { newpath x boxwidth 2 div distx add add y moveto
+    -8 3 rlineto
+    0 -6 rlineto
+    8 3 rlineto
+    closepath
+    eofill
+    stroke
+  } if
+} def
+
+/vedge
+{
+  /ye exch def
+  /ys exch def
+  /xs exch def
+  newpath
+  xs xspacing mul xoffset add boxwidth 2 div add dup
+  ys yspacing mul boxheight 2 div sub
+  moveto
+  ye yspacing mul boxheight 2 div sub
+  lineto
+  stroke
+} def
+
+/conn % connections the blocks from col `arg1' to `arg2' of row `arg3'
+{
+  /ys exch def
+  /xe exch def
+  /xs exch def
+  newpath
+  xs xspacing mul xoffset add boxwidth 2 div add
+  ys yspacing mul disty 2 div sub
+  moveto
+  xspacing xe xs sub mul 0
+  rlineto
+  stroke
+} def
+
+% ----- main ------
+
+boxfont setfont
+1 boundaspect scale
+(al::memory_handler) cw
+(al::handler) cw
+/boxwidth boxwidth marginwidth 2 mul add def
+/xspacing boxwidth distx add def
+/yspacing boxheight disty add def
+/scalefactor 
+  boxwidth cols mul distx cols 1 sub mul add
+  boxheight rows mul disty rows 1 sub mul add boundaspect mul 
+  max def
+boundx scalefactor div boundy scalefactor div scale
+
+% ----- classes -----
+
+ (al::memory_handler) 0.000000 0.000000 box
+ (al::handler) 0.000000 1.000000 box
+
+% ----- relations -----
+
+solid
+0 0.000000 0.000000 out
+solid
+1 0.000000 1.000000 in
Add a comment to this file

docs/latex/classal_1_1memory__handler.pdf

Binary file added.

docs/latex/classal_1_1memory__handler.tex

+\hypertarget{classal_1_1memory__handler}{\section{al\-:\-:memory\-\_\-handler \-Class \-Reference}
+\label{classal_1_1memory__handler}\index{al\-::memory\-\_\-handler@{al\-::memory\-\_\-handler}}
+}
+
+
+\-An in memory handler that flushes its entries to a specified handler on its destruction.  
+
+
+
+
+{\ttfamily \#include $<$memory\-\_\-handler.\-hpp$>$}
+
+\-Inheritance diagram for al\-:\-:memory\-\_\-handler\-:\begin{figure}[H]
+\begin{center}
+\leavevmode
+\includegraphics[height=2.000000cm]{classal_1_1memory__handler}
+\end{center}
+\end{figure}
+\subsection*{\-Classes}
+\begin{DoxyCompactItemize}
+\item 
+struct {\bfseries log\-\_\-entry}
+\end{DoxyCompactItemize}
+\subsection*{\-Public \-Member \-Functions}
+\begin{DoxyCompactItemize}
+\item 
+\hyperlink{classal_1_1memory__handler_a74331eb896c73e46e9d8da1ab8443b32}{memory\-\_\-handler} (size\-\_\-t bsize, std\-::shared\-\_\-ptr$<$ \hyperlink{classal_1_1handler}{handler} $>$ exit)
+\item 
+void \hyperlink{classal_1_1memory__handler_ac7d78c5cee952f2934b12e26f4f271eb}{handle} (level, const std\-::string \&, const std\-::string \&)
+\item 
+\hyperlink{classal_1_1memory__handler_a09887d99cbdaea2db862a92b9d1edd7c}{$\sim$memory\-\_\-handler} ()
+\end{DoxyCompactItemize}
+
+
+\subsection{\-Detailed \-Description}
+\-An in memory handler that flushes its entries to a specified handler on its destruction. 
+
+\hyperlink{classal_1_1memory__handler}{memory\-\_\-handler} 
+
+\subsection{\-Constructor \& \-Destructor \-Documentation}
+\hypertarget{classal_1_1memory__handler_a74331eb896c73e46e9d8da1ab8443b32}{\index{al\-::memory\-\_\-handler@{al\-::memory\-\_\-handler}!memory\-\_\-handler@{memory\-\_\-handler}}
+\index{memory\-\_\-handler@{memory\-\_\-handler}!al::memory_handler@{al\-::memory\-\_\-handler}}
+\subsubsection[{memory\-\_\-handler}]{\setlength{\rightskip}{0pt plus 5cm}{\bf memory\-\_\-handler\-::memory\-\_\-handler} (
+\begin{DoxyParamCaption}
+\item[{size\-\_\-t}]{bsize, }
+\item[{std\-::shared\-\_\-ptr$<$ {\bf handler} $>$}]{exit}
+\end{DoxyParamCaption}
+)}}\label{classal_1_1memory__handler_a74331eb896c73e46e9d8da1ab8443b32}
+
+\begin{DoxyParams}{\-Parameters}
+{\em bsize} & \-The maximum number of entries to store in memory. \\
+\hline
+{\em exit} & \-The handler which should be invoked on this objects destruction. \\
+\hline
+\end{DoxyParams}
+\hypertarget{classal_1_1memory__handler_a09887d99cbdaea2db862a92b9d1edd7c}{\index{al\-::memory\-\_\-handler@{al\-::memory\-\_\-handler}!$\sim$memory\-\_\-handler@{$\sim$memory\-\_\-handler}}
+\index{$\sim$memory\-\_\-handler@{$\sim$memory\-\_\-handler}!al::memory_handler@{al\-::memory\-\_\-handler}}
+\subsubsection[{$\sim$memory\-\_\-handler}]{\setlength{\rightskip}{0pt plus 5cm}{\bf memory\-\_\-handler\-::$\sim$memory\-\_\-handler} (
+\begin{DoxyParamCaption}
+{}
+\end{DoxyParamCaption}
+)}}\label{classal_1_1memory__handler_a09887d99cbdaea2db862a92b9d1edd7c}
+\-Passes every entry in the buffer to the specified handler.
+
+\-If an exception is thrown, it is caught silently and the destructor returns. 
+
+\subsection{\-Member \-Function \-Documentation}
+\hypertarget{classal_1_1memory__handler_ac7d78c5cee952f2934b12e26f4f271eb}{\index{al\-::memory\-\_\-handler@{al\-::memory\-\_\-handler}!handle@{handle}}
+\index{handle@{handle}!al::memory_handler@{al\-::memory\-\_\-handler}}
+\subsubsection[{handle}]{\setlength{\rightskip}{0pt plus 5cm}void {\bf memory\-\_\-handler\-::handle} (
+\begin{DoxyParamCaption}
+\item[{level}]{l, }
+\item[{const std\-::string \&}]{name, }
+\item[{const std\-::string \&}]{message}
+\end{DoxyParamCaption}
+)\hspace{0.3cm}{\ttfamily  \mbox{[}virtual\mbox{]}}}}\label{classal_1_1memory__handler_ac7d78c5cee952f2934b12e26f4f271eb}
+\-Stores the entry in memory (currently a std\-::deque). \-If the number of entries exceeds the expected maximum amount, the oldest is deleted. 
+
+\-Implements \hyperlink{classal_1_1handler_a29a3fb2757d02ed144cb71166aad1dfe}{al\-::handler}.
+
+
+
+\-The documentation for this class was generated from the following files\-:\begin{DoxyCompactItemize}
+\item 
+src/handlers/memory\-\_\-handler.\-hpp\item 
+src/handlers/memory\-\_\-handler.\-cpp\end{DoxyCompactItemize}
Add a comment to this file

docs/rtf/classal_1_1file__handler.png

Added
New image
Add a comment to this file

docs/rtf/classal_1_1memory__handler.png

Added
New image

src/handlers/file_manipulators/rotator.cpp

+#include "rotator.hpp"
+#include <string>
+#include <stdexcept>
+#include <cstdio> //Awaiting std::file_system
+#include <sstream>
+
+using namespace al::file_manipulator;
+
+rotator::rotator(const std::string& name, size_t max_e, size_t max_f)
+  :file_root(name), entries(max_e), files(max_f), curr_entry(0),
+   curr_file(0), stream(name.c_str()){
+
+    if(!stream)
+      throw std::runtime_error("Unable to open file " +file_root);
+  }
+
+void rotator::write(const std::string& entry){
+  if(++curr_entry>=entries){
+    curr_entry = 0;
+    rotate();
+  }
+    stream<<entry;
+}
+
+void rotator::rotate(){
+  using std::string; //Saving some finger work
+  using std::rename;
+  using std::remove;
+  using std::to_string;
+  using std::runtime_error;
+
+  stream.close();
+
+  ++curr_file;
+  curr_file = (curr_file>files-1) ? (files-1) : curr_file;
+
+  for(size_t file_n=curr_file-1; file_n>0; --file_n){
+    string future = file_root + to_string(file_n+1);
+
+    if(file_n == files){
+      future = file_root;
+    }
+
+    string original = file_root+to_string(file_n);
+    if( rename(original.c_str(), future.c_str()) )//A zero return is success.
+      throw runtime_error("Unable to rename "+original+" to "+future);
+  }
+
+  string future = file_root + to_string(1);
+
+  if( rename(file_root.c_str(), future.c_str()) ) 
+    throw runtime_error("Unable to rename "+file_root+" to "+future);
+
+  stream.open(file_root);
+}

src/handlers/file_manipulators/rotator.hpp

+#ifndef ROTATOR_H
+#define ROTATOR_H
+#include <string>
+#include <fstream>
+
+namespace al{
+  namespace file_manipulator{
+
+    /**
+     * @Class rotator
+     * @brief A simple class designed so that a circular buffer can be imitated with reasonable speed.
+     *
+     * This takes in strings and writes them into the files
+     * name name1 name2 ... namen
+     * such that if enough elements are written everything will be renamed and namen will be overwritten with new entries.
+     */
+    class rotator{
+      public:
+        /**
+         * @param name The name that files will formed on.
+         * @param max_e The maximum number of entries in 1 file.
+         * @param max_f The maximum number of files.
+         */
+        rotator(const std::string& name, size_t max_e, size_t max_f);
+
+        /**
+         * Takes in a string and writes it to the correct file. Renaming files as needed.
+         * @param entry The string which will be written to the appropriate file.
+         */
+        void write(const std::string& entry);
+
+
+      private: