Add API docs for v1.4.33

This commit is contained in:
Alexey Rybalchenko
2021-03-23 14:11:44 +01:00
parent 6101a6678e
commit 6d82d305b9
1791 changed files with 88009 additions and 1 deletions

2
latest
View File

@@ -1 +1 @@
v1.4.14
v1.4.33

View File

@@ -0,0 +1,274 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/AsioAsyncOp.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AsioAsyncOp.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_ASIOASYNCOP_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_ASIOASYNCOP_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;asio/associated_allocator.hpp&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;asio/associated_executor.hpp&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;asio/executor_work_guard.hpp&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;asio/dispatch.hpp&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;asio/system_executor.hpp&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;exception&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Error.h&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Traits.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;system_error&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</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="preprocessor">#include &lt;fairlogger/Logger.h&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#ifndef FAIR_LOG</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#define FAIR_LOG LOG</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* ifndef FAIR_LOG */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span>... SignatureArgTypes&gt;</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html"> 36</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">AsioAsyncOpImplBase</a></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keyword">auto</span> Complete(std::error_code, SignatureArgTypes...) -&gt; <span class="keywordtype">void</span> = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keyword">auto</span> IsCompleted() <span class="keyword">const</span> -&gt; <span class="keywordtype">bool</span> = 0;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Executor1, <span class="keyword">typename</span> Allocator1, <span class="keyword">typename</span> Handler, <span class="keyword">typename</span>... SignatureArgTypes&gt;</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html"> 47</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html">AsioAsyncOpImpl</a> : <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">AsioAsyncOpImplBase</a>&lt;SignatureArgTypes...&gt;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a820a239d34fbcf405ba17a34ad1f44ed"> 50</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a820a239d34fbcf405ba17a34ad1f44ed">Allocator2</a> = <span class="keyword">typename</span> asio::associated_allocator&lt;Handler, Allocator1&gt;::type;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a4b1a39b8b234928a75c78d71a3c29774"> 53</a></span>&#160; <span class="keyword">using</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a4b1a39b8b234928a75c78d71a3c29774">Executor2</a> = <span class="keyword">typename</span> asio::associated_executor&lt;Handler, Executor1&gt;::type;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a26eb6b7a6579693bd95fa1feff298a78"> 56</a></span>&#160; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a26eb6b7a6579693bd95fa1feff298a78">AsioAsyncOpImpl</a>(<span class="keyword">const</span> Executor1&amp; ex1, Allocator1 alloc1, Handler&amp;&amp; handler)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; : fWork1(ex1)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; , fWork2(asio::get_associated_executor(handler, ex1))</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; , fHandler(std::move(handler))</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; , fAlloc1(std::move(alloc1))</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; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">auto</span> GetAlloc2() const -&gt; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a820a239d34fbcf405ba17a34ad1f44ed">Allocator2</a> { <span class="keywordflow">return</span> asio::get_associated_allocator(fHandler, fAlloc1); }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">auto</span> GetEx2() const -&gt; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a4b1a39b8b234928a75c78d71a3c29774">Executor2</a> { <span class="keywordflow">return</span> asio::get_associated_executor(fWork2); }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">auto</span> Complete(std::error_code ec, SignatureArgTypes... args) -&gt; <span class="keywordtype">void</span> <span class="keyword">override</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">if</span> (IsCompleted()) {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">throw</span> RuntimeError(<span class="stringliteral">&quot;Async operation already completed&quot;</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; </div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; asio::dispatch(GetEx2(),</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; [=, handler = std::move(fHandler)]() <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; handler(ec, args...);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::exception&amp; e) {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; FAIR_LOG(error) &lt;&lt; <span class="stringliteral">&quot;Uncaught exception in AsioAsyncOp completion handler: &quot;</span> &lt;&lt; e.what();</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; } <span class="keywordflow">catch</span> (...) {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; FAIR_LOG(error) &lt;&lt; <span class="stringliteral">&quot;Unknown uncaught exception in AsioAsyncOp completion handler.&quot;</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; });</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; fWork1.reset();</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; fWork2.reset();</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">auto</span> IsCompleted() const -&gt; <span class="keywordtype">bool</span><span class="keyword"> override</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> !fWork1.owns_work() &amp;&amp; !fWork2.owns_work();</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; asio::executor_work_guard&lt;Executor1&gt; fWork1;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; asio::executor_work_guard&lt;Executor2&gt; fWork2;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; Handler fHandler;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; Allocator1 fAlloc1;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;};</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Executor, <span class="keyword">typename</span> Allocator, <span class="keyword">typename</span> CompletionSignature&gt;</div>
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html"> 114</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">AsioAsyncOp</a></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;};</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Executor,</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">typename</span> Allocator,</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">typename</span> SignatureReturnType,</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">typename</span> SignatureFirstArgType,</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keyword">typename</span>... SignatureArgTypes&gt;</div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html"> 132</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">AsioAsyncOp</a>&lt;Executor,</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; Allocator,</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;{</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; static_assert(std::is_void&lt;SignatureReturnType&gt;::value,</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="stringliteral">&quot;return value of CompletionSignature must be void&quot;</span>);</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; static_assert(std::is_same&lt;SignatureFirstArgType, std::error_code&gt;::value,</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="stringliteral">&quot;first argument of CompletionSignature must be std::error_code&quot;</span>);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">using</span> Duration = std::chrono::milliseconds;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">using</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">Impl</a> = <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">AsioAsyncOpImplBase</a>&lt;SignatureArgTypes...&gt;;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keyword">using</span> ImplPtr = std::unique_ptr&lt;<a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">Impl</a>, std::function&lt;void(<a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">Impl</a>*)&gt;&gt;;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; ImplPtr fImpl;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#ad62e4a9633bd1f012fc022dd52f8153d"> 149</a></span>&#160; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#ad62e4a9633bd1f012fc022dd52f8153d">AsioAsyncOp</a>()</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; : fImpl(nullptr)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {}</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Handler&gt;</div>
<div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a11a13917dc6e83e4815523e6603c7463"> 155</a></span>&#160; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a11a13917dc6e83e4815523e6603c7463">AsioAsyncOp</a>(Executor ex1, Allocator alloc1, Handler&amp;&amp; handler)</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">AsioAsyncOp</a>()</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="comment">// Async operation type to be allocated and constructed</span></div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keyword">using</span> Op = <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html">AsioAsyncOpImpl</a>&lt;Executor, Allocator, Handler, SignatureArgTypes...&gt;;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; <span class="comment">// Create allocator for concrete op type</span></div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// Allocator2, see https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/reference/asynchronous_operations.html#boost_asio.reference.asynchronous_operations.allocation_of_intermediate_storage</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">using</span> OpAllocator =</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">typename</span> std::allocator_traits&lt;typename Op::Allocator2&gt;::template rebind_alloc&lt;Op&gt;;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; OpAllocator opAlloc;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// Allocate memory</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keyword">auto</span> mem(std::allocator_traits&lt;OpAllocator&gt;::allocate(opAlloc, 1));</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="comment">// Construct object</span></div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keyword">auto</span> ptr(<span class="keyword">new</span> (mem) Op(std::move(ex1),</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; std::move(alloc1),</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; std::forward&lt;Handler&gt;(handler)));</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="comment">// Assign ownership to this object</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; fImpl = ImplPtr(ptr, [opAlloc](<a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">Impl</a>* p) <span class="keyword">mutable</span> {</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; std::allocator_traits&lt;OpAllocator&gt;::deallocate(opAlloc, <span class="keyword">static_cast&lt;</span>Op*<span class="keyword">&gt;</span>(p), 1);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; });</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Handler&gt;</div>
<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a5157440e65748510a879b0ea4430ed95"> 183</a></span>&#160; <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a5157440e65748510a879b0ea4430ed95">AsioAsyncOp</a>(Executor ex1, Handler&amp;&amp; handler)</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">AsioAsyncOp</a>(std::move(ex1), Allocator(), std::forward&lt;Handler&gt;(handler))</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {}</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Handler&gt;</div>
<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#aeb131dbcf485df823d5fd4bc787361a3"> 189</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#aeb131dbcf485df823d5fd4bc787361a3">AsioAsyncOp</a>(Handler&amp;&amp; handler)</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">AsioAsyncOp</a>(asio::system_executor(), std::forward&lt;Handler&gt;(handler))</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {}</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">auto</span> IsCompleted() -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> (fImpl == <span class="keyword">nullptr</span>) || fImpl-&gt;IsCompleted(); }</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">auto</span> Complete(std::error_code ec, SignatureArgTypes... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; {</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span>(IsCompleted()) {</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">throw</span> RuntimeError(<span class="stringliteral">&quot;Async operation already completed&quot;</span>);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; fImpl-&gt;Complete(ec, args...);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; fImpl.reset(<span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">auto</span> Complete(SignatureArgTypes... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; Complete(std::error_code(), args...);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keyword">auto</span> Cancel(SignatureArgTypes... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; Complete(MakeErrorCode(ErrorCode::OperationCanceled), args...);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keyword">auto</span> Timeout(SignatureArgTypes... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; Complete(MakeErrorCode(ErrorCode::OperationTimeout), args...);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;};</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_ASIOASYNCOP_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644_html_ad62e4a9633bd1f012fc022dd52f8153d"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#ad62e4a9633bd1f012fc022dd52f8153d">fair::mq::sdk::AsioAsyncOp&lt; Executor, Allocator, SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;::AsioAsyncOp</a></div><div class="ttdeci">AsioAsyncOp()</div><div class="ttdoc">Default Ctor.</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:149</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOp_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html">fair::mq::sdk::AsioAsyncOp</a></div><div class="ttdoc">Interface for Asio-compliant asynchronous operation, see https://www.boost.org/doc/libs/1_70_0/doc/ht...</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:115</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html">fair::mq::sdk::AsioAsyncOpImpl</a></div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:48</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl_html_a820a239d34fbcf405ba17a34ad1f44ed"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a820a239d34fbcf405ba17a34ad1f44ed">fair::mq::sdk::AsioAsyncOpImpl::Allocator2</a></div><div class="ttdeci">typename asio::associated_allocator&lt; Handler, Allocator1 &gt;::type Allocator2</div><div class="ttdoc">See https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/reference/asynchronous_operations....</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:50</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644_html_a5157440e65748510a879b0ea4430ed95"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a5157440e65748510a879b0ea4430ed95">fair::mq::sdk::AsioAsyncOp&lt; Executor, Allocator, SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;::AsioAsyncOp</a></div><div class="ttdeci">AsioAsyncOp(Executor ex1, Handler &amp;&amp;handler)</div><div class="ttdoc">Ctor with handler #2.</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:183</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl_html_a4b1a39b8b234928a75c78d71a3c29774"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a4b1a39b8b234928a75c78d71a3c29774">fair::mq::sdk::AsioAsyncOpImpl::Executor2</a></div><div class="ttdeci">typename asio::associated_executor&lt; Handler, Executor1 &gt;::type Executor2</div><div class="ttdoc">See https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/reference/asynchronous_operations....</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:53</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644_html_aeb131dbcf485df823d5fd4bc787361a3"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#aeb131dbcf485df823d5fd4bc787361a3">fair::mq::sdk::AsioAsyncOp&lt; Executor, Allocator, SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;::AsioAsyncOp</a></div><div class="ttdeci">AsioAsyncOp(Handler &amp;&amp;handler)</div><div class="ttdoc">Ctor with handler #3.</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:189</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644_html_a11a13917dc6e83e4815523e6603c7463"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html#a11a13917dc6e83e4815523e6603c7463">fair::mq::sdk::AsioAsyncOp&lt; Executor, Allocator, SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;::AsioAsyncOp</a></div><div class="ttdeci">AsioAsyncOp(Executor ex1, Allocator alloc1, Handler &amp;&amp;handler)</div><div class="ttdoc">Ctor with handler.</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:155</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl_html_a26eb6b7a6579693bd95fa1feff298a78"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html#a26eb6b7a6579693bd95fa1feff298a78">fair::mq::sdk::AsioAsyncOpImpl::AsioAsyncOpImpl</a></div><div class="ttdeci">AsioAsyncOpImpl(const Executor1 &amp;ex1, Allocator1 alloc1, Handler &amp;&amp;handler)</div><div class="ttdoc">Ctor.</div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:56</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html">fair::mq::sdk::AsioAsyncOpImplBase</a></div><div class="ttdef"><b>Definition:</b> AsioAsyncOp.h:37</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/AsioBase.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">AsioBase.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_ASIOBASE_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_ASIOBASE_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;asio/any_io_executor.hpp&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Traits.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">using</span> DefaultExecutor = asio::any_io_executor;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> DefaultAllocator = std::allocator&lt;int&gt;;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Executor, <span class="keyword">typename</span> Allocator&gt;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">class </span>AsioBase</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="keyword">public</span>:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">using</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aea0e9ea2a6883595ee4a9170e7eb54a1">ExecutorType</a> = Executor;</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html"> 40</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aa4a40d98197b0ca731b855f811761741">GetExecutor</a>() const noexcept -&gt; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aea0e9ea2a6883595ee4a9170e7eb54a1">ExecutorType</a> { <span class="keywordflow">return</span> fExecutor; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">using</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#ae82b8f9a1053d039542074a6538f51a9">AllocatorType</a> = Allocator;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a10c8108cd520e7a1ec2bced4b80df69d">GetAllocator</a>() const noexcept -&gt; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#ae82b8f9a1053d039542074a6538f51a9">AllocatorType</a> { <span class="keywordflow">return</span> fAllocator; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aa4a40d98197b0ca731b855f811761741"> 46</a></span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a4321936e4a92d3e977dff807f0cb3d3f">AsioBase</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#ae82b8f9a1053d039542074a6538f51a9"> 49</a></span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a10c8108cd520e7a1ec2bced4b80df69d"> 51</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a4321936e4a92d3e977dff807f0cb3d3f">AsioBase</a>(Executor ex, Allocator alloc)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; : fExecutor(std::move(ex))</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; , fAllocator(std::move(alloc))</div>
<div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a4321936e4a92d3e977dff807f0cb3d3f"> 54</a></span>&#160; {}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a2711eada1efbf39cba390bdd39427e91"> 57</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a2711eada1efbf39cba390bdd39427e91">AsioBase</a>(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp; operator=(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a4321936e4a92d3e977dff807f0cb3d3f">AsioBase</a>(<a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp;&amp;) noexcept = default;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp; operator=(<a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>&amp;&amp;) noexcept = default;</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a271de7ef84469fd2650cec9dc5098d75"> 63</a></span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ~<a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">AsioBase</a>() = default;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; private:</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a21170be420f2b42843736e497f10a692"> 67</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aea0e9ea2a6883595ee4a9170e7eb54a1">ExecutorType</a> fExecutor;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#ae82b8f9a1053d039542074a6538f51a9">AllocatorType</a> fAllocator;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</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="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_ASIOBASE_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_a2711eada1efbf39cba390bdd39427e91"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a2711eada1efbf39cba390bdd39427e91">fair::mq::sdk::AsioBase::AsioBase</a></div><div class="ttdeci">AsioBase(Executor ex, Allocator alloc)</div><div class="ttdoc">Construct with associated I/O executor.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:57</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html">fair::mq::sdk::AsioBase</a></div><div class="ttdoc">Base for creating Asio-enabled I/O objects.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:41</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_aa4a40d98197b0ca731b855f811761741"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aa4a40d98197b0ca731b855f811761741">fair::mq::sdk::AsioBase::GetExecutor</a></div><div class="ttdeci">auto GetExecutor() const noexcept -&gt; ExecutorType</div><div class="ttdoc">Get associated I/O executor.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:46</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_a10c8108cd520e7a1ec2bced4b80df69d"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a10c8108cd520e7a1ec2bced4b80df69d">fair::mq::sdk::AsioBase::GetAllocator</a></div><div class="ttdeci">auto GetAllocator() const noexcept -&gt; AllocatorType</div><div class="ttdoc">Get associated default allocator.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:51</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_ae82b8f9a1053d039542074a6538f51a9"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#ae82b8f9a1053d039542074a6538f51a9">fair::mq::sdk::AsioBase::AllocatorType</a></div><div class="ttdeci">Allocator AllocatorType</div><div class="ttdoc">Member type of associated default allocator.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:49</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_a4321936e4a92d3e977dff807f0cb3d3f"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#a4321936e4a92d3e977dff807f0cb3d3f">fair::mq::sdk::AsioBase::AsioBase</a></div><div class="ttdeci">AsioBase()=delete</div><div class="ttdoc">NO default ctor.</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1AsioBase_html_aea0e9ea2a6883595ee4a9170e7eb54a1"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1AsioBase.html#aea0e9ea2a6883595ee4a9170e7eb54a1">fair::mq::sdk::AsioBase::ExecutorType</a></div><div class="ttdeci">Executor ExecutorType</div><div class="ttdoc">Member type of associated I/O executor.</div><div class="ttdef"><b>Definition:</b> AsioBase.h:44</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,87 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/Builtin.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Builtin.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// List of all builtin plugin headers (the ones which call REGISTER_FAIRMQ_PLUGIN macro)</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;fairmq/plugins/config/Config.h&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/plugins/Control.h&gt;</span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,495 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/commands/Commands.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li><li class="navelem"><a class="el" href="dir_c928bc5e390579a009bbb603e219018d.html">commands</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Commands.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_COMMANDFACTORY</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_COMMANDFACTORY</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/States.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk::cmd</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">enum class</span> Format : int {</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; Binary,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; JSON</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; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">enum class</span> Result : int {</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Ok,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; Failure</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;};</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">enum class</span> Type : int</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; check_state, <span class="comment">// args: { }</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; change_state, <span class="comment">// args: { transition }</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; dump_config, <span class="comment">// args: { }</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; subscribe_to_state_change, <span class="comment">// args: { }</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; unsubscribe_from_state_change, <span class="comment">// args: { }</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; state_change_exiting_received, <span class="comment">// args: { }</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; get_properties, <span class="comment">// args: { request_id, property_query }</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; set_properties, <span class="comment">// args: { request_id, properties }</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; subscription_heartbeat, <span class="comment">// args: { interval }</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; current_state, <span class="comment">// args: { device_id, current_state }</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; transition_status, <span class="comment">// args: { device_id, task_id, Result, transition, current_state }</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; config, <span class="comment">// args: { device_id, config_string }</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; state_change_subscription, <span class="comment">// args: { device_id, task_id, Result }</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; state_change_unsubscription, <span class="comment">// args: { device_id, task_id, Result }</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; state_change, <span class="comment">// args: { device_id, task_id, last_state, current_state }</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; properties, <span class="comment">// args: { device_id, request_id, Result, properties }</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; properties_set <span class="comment">// args: { device_id, request_id, Result }</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">struct </span>Cmd</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">explicit</span> Cmd(<span class="keyword">const</span> Type type) : fType(type) {}</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> ~Cmd() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; Type GetType()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fType; }</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html"> 61</a></span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; Type fType;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState.html">CheckState</a> : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;{</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState.html">CheckState</a>() : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a>(Type::check_state) {}</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</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="keyword">struct </span>ChangeState : Cmd</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState.html"> 72</a></span>&#160;{</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1ChangeState.html">ChangeState</a>(Transition transition)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a>(Type::change_state)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; , fTransition(transition)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {}</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1ChangeState.html"> 77</a></span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; Transition GetTransition()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTransition; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordtype">void</span> SetTransition(Transition transition) { fTransition = transition; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; Transition fTransition;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;};</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">struct </span>DumpConfig : Cmd</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">explicit</span> DumpConfig() : Cmd(Type::dump_config) {}</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;};</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">struct </span>SubscribeToStateChange : Cmd</div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1DumpConfig.html"> 91</a></span>&#160;{</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscribeToStateChange.html">SubscribeToStateChange</a>(int64_t interval)</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a>(Type::subscribe_to_state_change)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; , fInterval(interval)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {}</div>
<div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscribeToStateChange.html"> 96</a></span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; int64_t GetInterval()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fInterval; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> SetInterval(int64_t interval) { fInterval = interval; }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; int64_t fInterval;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;};</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">struct </span>UnsubscribeFromStateChange : Cmd</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;{</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">explicit</span> UnsubscribeFromStateChange() : Cmd(Type::unsubscribe_from_state_change) {}</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;};</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;<span class="keyword">struct </span>StateChangeExitingReceived : Cmd</div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1UnsubscribeFromStateChange.html"> 110</a></span>&#160;{</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeExitingReceived.html">StateChangeExitingReceived</a>() : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a>(Type::state_change_exiting_received) {}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;};</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties.html">GetProperties</a> : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a></div>
<div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeExitingReceived.html"> 115</a></span>&#160;{</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties.html">GetProperties</a>(std::size_t request_id, std::string query)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; : <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">Cmd</a>(Type::get_properties)</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; , fRequestId(request_id)</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; , fQuery(std::move(query))</div>
<div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties.html"> 120</a></span>&#160; {}</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">auto</span> GetRequestId() const -&gt; std::<span class="keywordtype">size_t</span> { <span class="keywordflow">return</span> fRequestId; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">auto</span> SetRequestId(std::size_t requestId) -&gt; <span class="keywordtype">void</span> { fRequestId = requestId; }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">auto</span> GetQuery() const -&gt; std::<span class="keywordtype">string</span> { <span class="keywordflow">return</span> fQuery; }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">auto</span> SetQuery(std::string query) -&gt; <span class="keywordtype">void</span> { fQuery = std::move(query); }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; std::size_t fRequestId;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; std::string fQuery;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;};</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="keyword">struct </span>SetProperties : Cmd</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;{</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; SetProperties(std::size_t request_id, std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; properties)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; : Cmd(Type::set_properties)</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; , fRequestId(request_id)</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; , fProperties(std::move(properties))</div>
<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SetProperties.html"> 138</a></span>&#160; {}</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">auto</span> GetRequestId() const -&gt; std::<span class="keywordtype">size_t</span> { <span class="keywordflow">return</span> fRequestId; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">auto</span> SetRequestId(std::size_t requestId) -&gt; <span class="keywordtype">void</span> { fRequestId = requestId; }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">auto</span> GetProps() const -&gt; std::vector&lt;std::pair&lt;std::<span class="keywordtype">string</span>, std::<span class="keywordtype">string</span>&gt;&gt; { <span class="keywordflow">return</span> fProperties; }</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">auto</span> SetProps(std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; properties) -&gt; <span class="keywordtype">void</span> { fProperties = std::move(properties); }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; std::size_t fRequestId;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; fProperties;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;};</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="keyword">struct </span>SubscriptionHeartbeat : Cmd</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;{</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">explicit</span> SubscriptionHeartbeat(int64_t interval)</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; : Cmd(Type::subscription_heartbeat)</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; , fInterval(interval)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {}</div>
<div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscriptionHeartbeat.html"> 156</a></span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; int64_t GetInterval()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fInterval; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordtype">void</span> SetInterval(int64_t interval) { fInterval = interval; }</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; int64_t fInterval;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;};</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="keyword">struct </span>CurrentState : Cmd</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;{</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keyword">explicit</span> CurrentState(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>, State currentState)</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; : Cmd(Type::current_state)</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; , fDeviceId(id)</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; , fCurrentState(currentState)</div>
<div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CurrentState.html"> 170</a></span>&#160; {}</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; fair::mq::State GetCurrentState()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fCurrentState; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordtype">void</span> SetCurrentState(fair::mq::State state) { fCurrentState = state; }</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; fair::mq::State fCurrentState;</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;};</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="keyword">struct </span>TransitionStatus : Cmd</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;{</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">explicit</span> TransitionStatus(<span class="keyword">const</span> std::string&amp; deviceId, <span class="keyword">const</span> uint64_t taskId, <span class="keyword">const</span> Result result, <span class="keyword">const</span> Transition transition, State currentState)</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; : Cmd(Type::transition_status)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; , fDeviceId(deviceId)</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; , fTaskId(taskId)</div>
<div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1TransitionStatus.html"> 188</a></span>&#160; , fResult(result)</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; , fTransition(transition)</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; , fCurrentState(currentState)</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {}</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; uint64_t GetTaskId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTaskId; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> SetTaskId(<span class="keyword">const</span> uint64_t taskId) { fTaskId = taskId; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; Result GetResult()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fResult; }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordtype">void</span> SetResult(<span class="keyword">const</span> Result result) { fResult = result; }</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; Transition GetTransition()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTransition; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordtype">void</span> SetTransition(<span class="keyword">const</span> Transition transition) { fTransition = transition; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; fair::mq::State GetCurrentState()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fCurrentState; }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">void</span> SetCurrentState(fair::mq::State state) { fCurrentState = state; }</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; uint64_t fTaskId;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; Result fResult;</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; Transition fTransition;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; fair::mq::State fCurrentState;</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;};</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">struct </span>Config : Cmd</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;{</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keyword">explicit</span> Config(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>, <span class="keyword">const</span> std::string&amp; config)</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; : Cmd(Type::config)</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; , fDeviceId(id)</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; , fConfig(config)</div>
<div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Config.html"> 218</a></span>&#160; {}</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; std::string GetConfig()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig; }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordtype">void</span> SetConfig(<span class="keyword">const</span> std::string&amp; config) { fConfig = config; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; std::string fConfig;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;};</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;<span class="keyword">struct </span>StateChangeSubscription : Cmd</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160;{</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keyword">explicit</span> StateChangeSubscription(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>, <span class="keyword">const</span> uint64_t taskId, <span class="keyword">const</span> Result result)</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; : Cmd(Type::state_change_subscription)</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; , fDeviceId(id)</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; , fTaskId(taskId)</div>
<div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeSubscription.html"> 236</a></span>&#160; , fResult(result)</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; {}</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; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; uint64_t GetTaskId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTaskId; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">void</span> SetTaskId(<span class="keyword">const</span> uint64_t taskId) { fTaskId = taskId; }</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; Result GetResult()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fResult; }</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordtype">void</span> SetResult(<span class="keyword">const</span> Result result) { fResult = result; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; uint64_t fTaskId;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; Result fResult;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160;};</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="keyword">struct </span>StateChangeUnsubscription : Cmd</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="keyword">explicit</span> StateChangeUnsubscription(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>, <span class="keyword">const</span> uint64_t taskId, <span class="keyword">const</span> Result result)</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; : Cmd(Type::state_change_unsubscription)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; , fDeviceId(id)</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; , fTaskId(taskId)</div>
<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeUnsubscription.html"> 258</a></span>&#160; , fResult(result)</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; {}</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; uint64_t GetTaskId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTaskId; }</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordtype">void</span> SetTaskId(<span class="keyword">const</span> uint64_t taskId) { fTaskId = taskId; }</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; Result GetResult()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fResult; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordtype">void</span> SetResult(<span class="keyword">const</span> Result result) { fResult = result; }</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; uint64_t fTaskId;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; Result fResult;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;};</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="keyword">struct </span>StateChange : Cmd</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="keyword">explicit</span> StateChange(<span class="keyword">const</span> std::string&amp; deviceId, <span class="keyword">const</span> uint64_t taskId, <span class="keyword">const</span> State lastState, <span class="keyword">const</span> State currentState)</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; : Cmd(Type::state_change)</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; , fDeviceId(deviceId)</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; , fTaskId(taskId)</div>
<div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChange.html"> 280</a></span>&#160; , fLastState(lastState)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; , fCurrentState(currentState)</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {}</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::string GetDeviceId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">void</span> SetDeviceId(<span class="keyword">const</span> std::string&amp; deviceId) { fDeviceId = deviceId; }</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; uint64_t GetTaskId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTaskId; }</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">void</span> SetTaskId(<span class="keyword">const</span> uint64_t taskId) { fTaskId = taskId; }</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; fair::mq::State GetLastState()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fLastState; }</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordtype">void</span> SetLastState(<span class="keyword">const</span> fair::mq::State state) { fLastState = state; }</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; fair::mq::State GetCurrentState()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fCurrentState; }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordtype">void</span> SetCurrentState(<span class="keyword">const</span> fair::mq::State state) { fCurrentState = state; }</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; uint64_t fTaskId;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; fair::mq::State fLastState;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; fair::mq::State fCurrentState;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;};</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;<span class="keyword">struct </span>Properties : Cmd</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; Properties(std::string deviceId, std::size_t requestId, <span class="keyword">const</span> Result result, std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; properties)</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; : Cmd(Type::properties)</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; , fDeviceId(std::move(deviceId))</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; , fRequestId(requestId)</div>
<div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Properties.html"> 306</a></span>&#160; , fResult(result)</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; , fProperties(std::move(properties))</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {}</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keyword">auto</span> GetDeviceId() const -&gt; std::<span class="keywordtype">string</span> { <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">auto</span> SetDeviceId(std::string deviceId) -&gt; <span class="keywordtype">void</span> { fDeviceId = std::move(deviceId); }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keyword">auto</span> GetRequestId() const -&gt; std::<span class="keywordtype">size_t</span> { <span class="keywordflow">return</span> fRequestId; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keyword">auto</span> SetRequestId(std::size_t requestId) -&gt; <span class="keywordtype">void</span> { fRequestId = requestId; }</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keyword">auto</span> GetResult() const -&gt; Result { <span class="keywordflow">return</span> fResult; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">auto</span> SetResult(Result result) -&gt; <span class="keywordtype">void</span> { fResult = result; }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">auto</span> GetProps() const -&gt; std::vector&lt;std::pair&lt;std::<span class="keywordtype">string</span>, std::<span class="keywordtype">string</span>&gt;&gt; { <span class="keywordflow">return</span> fProperties; }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> SetProps(std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; properties) -&gt; <span class="keywordtype">void</span> { fProperties = std::move(properties); }</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; std::size_t fRequestId;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; Result fResult;</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; fProperties;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160;};</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160;<span class="keyword">struct </span>PropertiesSet : Cmd {</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; PropertiesSet(std::string deviceId, std::size_t requestId, Result result)</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; : Cmd(Type::properties_set)</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; , fDeviceId(std::move(deviceId))</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; , fRequestId(requestId)</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; , fResult(result)</div>
<div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1PropertiesSet.html"> 332</a></span>&#160; {}</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; </div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keyword">auto</span> GetDeviceId() const -&gt; std::<span class="keywordtype">string</span> { <span class="keywordflow">return</span> fDeviceId; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="keyword">auto</span> SetDeviceId(std::string deviceId) -&gt; <span class="keywordtype">void</span> { fDeviceId = std::move(deviceId); }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">auto</span> GetRequestId() const -&gt; std::<span class="keywordtype">size_t</span> { <span class="keywordflow">return</span> fRequestId; }</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keyword">auto</span> SetRequestId(std::size_t requestId) -&gt; <span class="keywordtype">void</span> { fRequestId = requestId; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">auto</span> GetResult() const -&gt; Result { <span class="keywordflow">return</span> fResult; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">auto</span> SetResult(Result result) -&gt; <span class="keywordtype">void</span> { fResult = result; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; std::size_t fRequestId;</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; Result fResult;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160;};</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; </div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;std::unique_ptr&lt;Cmd&gt; make(Args&amp;&amp;... args)</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;{</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">return</span> std::make_unique&lt;C&gt;(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;}</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; </div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;<span class="keyword">struct </span>Cmds</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;{</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">using</span> container = std::vector&lt;std::unique_ptr&lt;Cmd&gt;&gt;;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">struct </span>CommandFormatError : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">explicit</span> Cmds() {}</div>
<div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds.html"> 359</a></span>&#160; </div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Rest&gt;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds.html">Cmds</a>(std::unique_ptr&lt;Cmd&gt;&amp;&amp; first, Rest&amp;&amp;... rest)</div>
<div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds_1_1CommandFormatError.html"> 362</a></span>&#160; {</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; Unpack(std::forward&lt;std::unique_ptr&lt;Cmd&gt;&amp;&amp;&gt;(first), std::forward&lt;Rest&gt;(rest)...);</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; </div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keywordtype">void</span> Add(std::unique_ptr&lt;Cmd&gt;&amp;&amp; cmd) { fCmds.emplace_back(std::move(cmd)); }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; </div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> C, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordtype">void</span> Add(Args&amp;&amp;... args)</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; static_assert(std::is_base_of&lt;Cmd, C&gt;::value, <span class="stringliteral">&quot;Only types derived from fair::mq::cmd::Cmd are allowed&quot;</span>);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; Add(make&lt;C&gt;(std::forward&lt;Args&gt;(args)...));</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</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; Cmd&amp; At(<span class="keywordtype">size_t</span> i) { <span class="keywordflow">return</span> *(fCmds.at(i)); }</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordtype">size_t</span> Size()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fCmds.size(); }</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">void</span> Reset() { fCmds.clear(); }</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; std::string Serialize(<span class="keyword">const</span> Format type = Format::Binary) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordtype">void</span> Deserialize(<span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> Format type = Format::Binary);</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; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; container fCmds;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; </div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordtype">void</span> Unpack() {}</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">class</span>... Rest&gt;</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordtype">void</span> Unpack(std::unique_ptr&lt;Cmd&gt;&amp;&amp; first, Rest&amp;&amp;... rest)</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; fCmds.emplace_back(std::move(first));</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; Unpack(std::forward&lt;Rest&gt;(rest)...);</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; </div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">using</span> iterator = container::iterator;</div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keyword">using</span> const_iterator = container::const_iterator;</div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keyword">auto</span> begin() -&gt; decltype(fCmds.begin()) { <span class="keywordflow">return</span> fCmds.begin(); }</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">auto</span> end() -&gt; decltype(fCmds.end()) { <span class="keywordflow">return</span> fCmds.end(); }</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">auto</span> cbegin() -&gt; decltype(fCmds.cbegin()) { <span class="keywordflow">return</span> fCmds.cbegin(); }</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">auto</span> cend() -&gt; decltype(fCmds.cend()) { <span class="keywordflow">return</span> fCmds.cend(); }</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;};</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;std::string GetResultName(<span class="keyword">const</span> Result result);</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;std::string GetTypeName(<span class="keyword">const</span> Type type);</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;<span class="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> Result&amp; result) { <span class="keywordflow">return</span> os &lt;&lt; GetResultName(result); }</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> Type&amp; type) { <span class="keywordflow">return</span> os &lt;&lt; GetTypeName(type); }</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;} <span class="comment">// namespace fair::mq::sdk::cmd</span></div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_COMMANDFACTORY */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1ChangeState_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1ChangeState.html">fair::mq::sdk::cmd::ChangeState</a></div><div class="ttdef"><b>Definition:</b> Commands.h:78</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">fair::mq::sdk::cmd::Cmd</a></div><div class="ttdef"><b>Definition:</b> Commands.h:62</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1SubscribeToStateChange_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscribeToStateChange.html">fair::mq::sdk::cmd::SubscribeToStateChange</a></div><div class="ttdef"><b>Definition:</b> Commands.h:97</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties.html">fair::mq::sdk::cmd::GetProperties</a></div><div class="ttdef"><b>Definition:</b> Commands.h:121</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState.html">fair::mq::sdk::cmd::CheckState</a></div><div class="ttdef"><b>Definition:</b> Commands.h:73</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds.html">fair::mq::sdk::cmd::Cmds</a></div><div class="ttdef"><b>Definition:</b> Commands.h:360</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeExitingReceived_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeExitingReceived.html">fair::mq::sdk::cmd::StateChangeExitingReceived</a></div><div class="ttdef"><b>Definition:</b> Commands.h:116</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,405 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/shmem/Common.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_6475741fe3587c0a949798307da6131d.html">shmem</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Common.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SHMEM_COMMON_H_</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define FAIR_MQ_SHMEM_COMMON_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;picosha2.h&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// std::equal_to</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">#include &lt;boost/functional/hash.hpp&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/allocators/allocator.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/containers/map.hpp&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/containers/string.hpp&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/containers/vector.hpp&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/indexes/null_index.hpp&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/managed_shared_memory.hpp&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/mem_algo/simple_seq_fit.hpp&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;boost/unordered_map.hpp&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;boost/variant.hpp&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="namespacefair_1_1mq_1_1shmem.html"> 32</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SharedMemoryError.html">SharedMemoryError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">using</span> SimpleSeqFitSegment = boost::interprocess::basic_managed_shared_memory&lt;char,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; boost::interprocess::simple_seq_fit&lt;boost::interprocess::mutex_family&gt;,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; boost::interprocess::null_index&gt;;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// boost::interprocess::iset_index&gt;;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SharedMemoryError.html"> 41</a></span>&#160;<span class="keyword">using</span> RBTreeBestFitSegment = boost::interprocess::basic_managed_shared_memory&lt;char,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; boost::interprocess::rbtree_best_fit&lt;boost::interprocess::mutex_family&gt;,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; boost::interprocess::null_index&gt;;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="comment">// boost::interprocess::iset_index&gt;;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">using</span> SegmentManager = boost::interprocess::managed_shared_memory::segment_manager;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">using</span> VoidAlloc = boost::interprocess::allocator&lt;void, SegmentManager&gt;;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword">using</span> CharAlloc = boost::interprocess::allocator&lt;char, SegmentManager&gt;;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">using</span> Str = boost::interprocess::basic_string&lt;char, std::char_traits&lt;char&gt;, CharAlloc&gt;;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">using</span> StrAlloc = boost::interprocess::allocator&lt;Str, SegmentManager&gt;;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">using</span> StrVector = boost::interprocess::vector&lt;Str, StrAlloc&gt;;</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="keyword">enum class</span> AllocationAlgorithm : int</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; rbtree_best_fit,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; simple_seq_fit</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;};</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html">RegionInfo</a></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;{</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html">RegionInfo</a>(<span class="keyword">const</span> VoidAlloc&amp; alloc)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : fPath(<span class="stringliteral">&quot;&quot;</span>, alloc)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; , fFlags(0)</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; , fUserFlags(0)</div>
<div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html"> 65</a></span>&#160; , fDestroyed(false)</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; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html">RegionInfo</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* path, <span class="keyword">const</span> <span class="keywordtype">int</span> flags, <span class="keyword">const</span> uint64_t userFlags, <span class="keyword">const</span> VoidAlloc&amp; alloc)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; : fPath(path, alloc)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; , fFlags(flags)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; , fUserFlags(userFlags)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; , fDestroyed(false)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {}</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; Str fPath;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordtype">int</span> fFlags;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; uint64_t fUserFlags;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">bool</span> fDestroyed;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;};</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword">using</span> Uint16RegionInfoPairAlloc = boost::interprocess::allocator&lt;std::pair&lt;const uint16_t, RegionInfo&gt;, SegmentManager&gt;;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword">using</span> Uint16RegionInfoMap = boost::interprocess::map&lt;uint16_t, RegionInfo, std::less&lt;uint16_t&gt;, Uint16RegionInfoPairAlloc&gt;;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="keyword">using</span> Uint16RegionInfoHashMap = boost::unordered_map&lt;uint16_t, RegionInfo, boost::hash&lt;uint16_t&gt;, std::equal_to&lt;uint16_t&gt;, Uint16RegionInfoPairAlloc&gt;;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">struct </span>SegmentInfo</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;{</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; SegmentInfo(AllocationAlgorithm aa)</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; : fAllocationAlgorithm(aa)</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; {}</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentInfo.html"> 91</a></span>&#160; AllocationAlgorithm fAllocationAlgorithm;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;};</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">using</span> Uint16SegmentInfoPairAlloc = boost::interprocess::allocator&lt;std::pair&lt;const uint16_t, SegmentInfo&gt;, SegmentManager&gt;;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="keyword">using</span> Uint16SegmentInfoHashMap = boost::unordered_map&lt;uint16_t, SegmentInfo, boost::hash&lt;uint16_t&gt;, std::equal_to&lt;uint16_t&gt;, Uint16SegmentInfoPairAlloc&gt;;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">// using Uint16SegmentInfoMap = boost::interprocess::map&lt;uint16_t, SegmentInfo, std::less&lt;uint16_t&gt;, Uint16SegmentInfoPairAlloc&gt;;</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">DeviceCounter</a></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;{</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">DeviceCounter</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c)</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; : fCount(c)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {}</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html"> 104</a></span>&#160; std::atomic&lt;unsigned int&gt; fCount;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;};</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">EventCounter</a></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">EventCounter</a>(uint64_t c)</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; : fCount(c)</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {}</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html"> 113</a></span>&#160; std::atomic&lt;uint64_t&gt; fCount;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;};</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionCounter.html">RegionCounter</a></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;{</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionCounter.html">RegionCounter</a>(uint16_t c)</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; : fCount(c)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {}</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; </div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1RegionCounter.html"> 122</a></span>&#160; std::atomic&lt;uint16_t&gt; fCount;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;};</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="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1MetaHeader.html">MetaHeader</a></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">size_t</span> fSize;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">size_t</span> fHint;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; uint16_t fRegionId;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; uint16_t fSegmentId;</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1MetaHeader.html"> 131</a></span>&#160; boost::interprocess::managed_shared_memory::handle_t fHandle;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;};</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="keyword">struct </span>MsgCounter</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; MsgCounter()</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; : fCount(0)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {}</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; MsgCounter(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c)</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; : fCount(c)</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {}</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; std::atomic&lt;unsigned int&gt; fCount;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;};</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="keyword">using</span> Uint16MsgCounterPairAlloc = boost::interprocess::allocator&lt;std::pair&lt;const uint16_t, MsgCounter&gt;, SegmentManager&gt;;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="keyword">using</span> Uint16MsgCounterHashMap = boost::unordered_map&lt;uint16_t, MsgCounter, boost::hash&lt;uint16_t&gt;, std::equal_to&lt;uint16_t&gt;, Uint16MsgCounterPairAlloc&gt;;</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">struct </span>MsgDebug</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;{</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; MsgDebug()</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; : fPid(0)</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; , fSize(0)</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; , fCreationTime(0)</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {}</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; MsgDebug(pid_t pid, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> uint64_t creationTime)</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; : fPid(pid)</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; , fSize(size)</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; , fCreationTime(creationTime)</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {}</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; pid_t fPid;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">size_t</span> fSize;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; uint64_t fCreationTime;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;};</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160;<span class="keyword">using</span> SizetMsgDebugPairAlloc = boost::interprocess::allocator&lt;std::pair&lt;const size_t, MsgDebug&gt;, SegmentManager&gt;;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="comment">// using SizetMsgDebugHashMap = boost::unordered_map&lt;size_t, MsgDebug, boost::hash&lt;size_t&gt;, std::equal_to&lt;size_t&gt;, SizetMsgDebugPairAlloc&gt;;</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;<span class="keyword">using</span> SizetMsgDebugMap = boost::interprocess::map&lt;size_t, MsgDebug, std::less&lt;size_t&gt;, SizetMsgDebugPairAlloc&gt;;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;<span class="keyword">using</span> Uint16MsgDebugMapPairAlloc = boost::interprocess::allocator&lt;std::pair&lt;const uint16_t, SizetMsgDebugMap&gt;, SegmentManager&gt;;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="keyword">using</span> Uint16MsgDebugMapHashMap = boost::unordered_map&lt;uint16_t, SizetMsgDebugMap, boost::hash&lt;uint16_t&gt;, std::equal_to&lt;uint16_t&gt;, Uint16MsgDebugMapPairAlloc&gt;;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="keyword">struct </span>RegionBlock</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160;{</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; RegionBlock()</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; : fHandle()</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; , fSize(0)</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; , fHint(0)</div>
<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1RegionBlock.html"> 183</a></span>&#160; {}</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1RegionBlock.html">RegionBlock</a>(boost::interprocess::managed_shared_memory::handle_t handle, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> hint)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; : fHandle(handle)</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; , fSize(size)</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; , fHint(hint)</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {}</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; boost::interprocess::managed_shared_memory::handle_t fHandle;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordtype">size_t</span> fSize;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordtype">size_t</span> fHint;</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;};</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="comment">// find id for unique shmem name:</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="comment">// a hash of user id + session id, truncated to 8 characters (to accommodate for name size limit on some systems (MacOS)).</span></div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="keyword">inline</span> std::string makeShmIdStr(<span class="keyword">const</span> std::string&amp; sessionId)</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;{</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; std::string seed((std::to_string(geteuid()) + sessionId));</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="comment">// generate a 8-digit hex value out of sha256 hash</span></div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; std::vector&lt;unsigned char&gt; hash(4);</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; picosha2::hash256(seed.begin(), seed.end(), hash.begin(), hash.end());</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">return</span> picosha2::bytes_to_hex_string(hash.begin(), hash.end());</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="keyword">inline</span> uint64_t makeShmIdUint64(<span class="keyword">const</span> std::string&amp; sessionId)</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; std::string shmId = makeShmIdStr(sessionId);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; uint64_t <span class="keywordtype">id</span> = 0;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; ss &lt;&lt; std::hex &lt;&lt; shmId;</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; ss &gt;&gt; id;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> id;</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;}</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;<span class="keyword">struct </span>SegmentSize : <span class="keyword">public</span> boost::static_visitor&lt;size_t&gt;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;{</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">size_t</span> operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.get_size(); }</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;};</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentSize.html"> 225</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html">SegmentAddress</a> : <span class="keyword">public</span> boost::static_visitor&lt;void*&gt;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;{</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">void</span>* operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.get_address(); }</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; </div>
<div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html"> 231</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html">SegmentMemoryZeroer</a> : <span class="keyword">public</span> boost::static_visitor&lt;&gt;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160;{</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordtype">void</span> operator()(S&amp; s)<span class="keyword"> const </span>{ s.zero_free_memory(); }</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; </div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html"> 237</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html">SegmentFreeMemory</a> : <span class="keyword">public</span> boost::static_visitor&lt;size_t&gt;</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; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">size_t</span> operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.get_free_memory(); }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;};</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html"> 243</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress.html">SegmentHandleFromAddress</a> : <span class="keyword">public</span> boost::static_visitor&lt;boost::interprocess::managed_shared_memory::handle_t&gt;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;{</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress.html">SegmentHandleFromAddress</a>(<span class="keyword">const</span> <span class="keywordtype">void</span>* _ptr) : ptr(_ptr) {}</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; </div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; boost::interprocess::managed_shared_memory::handle_t operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.get_handle_from_address(ptr); }</div>
<div class="line"><a name="l00249"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress.html"> 249</a></span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">const</span> <span class="keywordtype">void</span>* ptr;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;};</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle.html">SegmentAddressFromHandle</a> : <span class="keyword">public</span> boost::static_visitor&lt;void*&gt;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;{</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle.html">SegmentAddressFromHandle</a>(<span class="keyword">const</span> boost::interprocess::managed_shared_memory::handle_t _handle) : handle(_handle) {}</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordtype">void</span>* operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.get_address_from_handle(handle); }</div>
<div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle.html"> 259</a></span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keyword">const</span> boost::interprocess::managed_shared_memory::handle_t handle;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;};</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocate.html">SegmentAllocate</a> : <span class="keyword">public</span> boost::static_visitor&lt;void*&gt;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;{</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocate.html">SegmentAllocate</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> _size) : size(_size) {}</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">void</span>* operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.allocate(size); }</div>
<div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocate.html"> 269</a></span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> size;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;};</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned.html">SegmentAllocateAligned</a> : <span class="keyword">public</span> boost::static_visitor&lt;void*&gt;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;{</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned.html">SegmentAllocateAligned</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> _size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> _alignment) : size(_size), alignment(_alignment) {}</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">void</span>* operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.allocate_aligned(size, alignment); }</div>
<div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned.html"> 279</a></span>&#160; </div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> size;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> alignment;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;};</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentBufferShrink.html">SegmentBufferShrink</a> : <span class="keyword">public</span> boost::static_visitor&lt;char*&gt;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;{</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentBufferShrink.html">SegmentBufferShrink</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> _new_size, <span class="keywordtype">char</span>* _local_ptr)</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; : new_size(_new_size)</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; , local_ptr(_local_ptr)</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; {}</div>
<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentBufferShrink.html"> 290</a></span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordtype">char</span>* operator()(S&amp; s)<span class="keyword"> const</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; boost::interprocess::managed_shared_memory::size_type shrunk_size = new_size;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">return</span> s.template allocation_command&lt;char&gt;(boost::interprocess::shrink_in_place, new_size + 128, shrunk_size, local_ptr);</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keyword">const</span> <span class="keywordtype">size_t</span> new_size;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">mutable</span> <span class="keywordtype">char</span>* local_ptr;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;};</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;<span class="keyword">struct </span>SegmentDeallocate : <span class="keyword">public</span> boost::static_visitor&lt;&gt;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160;{</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; SegmentDeallocate(<span class="keywordtype">void</span>* _ptr) : ptr(_ptr) {}</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> S&gt;</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordtype">void</span> operator()(S&amp; s)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> s.deallocate(ptr); }</div>
<div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SegmentDeallocate.html"> 308</a></span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordtype">void</span>* ptr;</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;};</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;} <span class="comment">// namespace fair::mq::shmem</span></div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SHMEM_COMMON_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1DeviceCounter_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">fair::mq::shmem::DeviceCounter</a></div><div class="ttdef"><b>Definition:</b> Common.h:105</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1EventCounter_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">fair::mq::shmem::EventCounter</a></div><div class="ttdef"><b>Definition:</b> Common.h:114</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentAllocate_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentAllocate.html">fair::mq::shmem::SegmentAllocate</a></div><div class="ttdef"><b>Definition:</b> Common.h:270</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1RegionBlock_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1RegionBlock.html">fair::mq::shmem::RegionBlock</a></div><div class="ttdef"><b>Definition:</b> Common.h:184</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress.html">fair::mq::shmem::SegmentHandleFromAddress</a></div><div class="ttdef"><b>Definition:</b> Common.h:250</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html">fair::mq::shmem::SegmentMemoryZeroer</a></div><div class="ttdef"><b>Definition:</b> Common.h:238</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1RegionCounter_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1RegionCounter.html">fair::mq::shmem::RegionCounter</a></div><div class="ttdef"><b>Definition:</b> Common.h:123</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentFreeMemory_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html">fair::mq::shmem::SegmentFreeMemory</a></div><div class="ttdef"><b>Definition:</b> Common.h:244</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned.html">fair::mq::shmem::SegmentAllocateAligned</a></div><div class="ttdef"><b>Definition:</b> Common.h:280</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle.html">fair::mq::shmem::SegmentAddressFromHandle</a></div><div class="ttdef"><b>Definition:</b> Common.h:260</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1RegionInfo_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html">fair::mq::shmem::RegionInfo</a></div><div class="ttdef"><b>Definition:</b> Common.h:66</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentAddress_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html">fair::mq::shmem::SegmentAddress</a></div><div class="ttdef"><b>Definition:</b> Common.h:232</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1MetaHeader_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1MetaHeader.html">fair::mq::shmem::MetaHeader</a></div><div class="ttdef"><b>Definition:</b> Common.h:132</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SharedMemoryError_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SharedMemoryError.html">fair::mq::shmem::SharedMemoryError</a></div><div class="ttdef"><b>Definition:</b> Common.h:41</div></div>
<div class="ttc" id="anamespacefair_1_1mq_1_1shmem_html"><div class="ttname"><a href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div><div class="ttdef"><b>Definition:</b> Common.h:33</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentBufferShrink_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentBufferShrink.html">fair::mq::shmem::SegmentBufferShrink</a></div><div class="ttdef"><b>Definition:</b> Common.h:291</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,118 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/config/Config.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li><li class="navelem"><a class="el" href="dir_03b58dd72b9fe3b82bb9fbfaef770022.html">config</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Config.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINS_CONFIG</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINS_CONFIG</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/Plugin.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/Version.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>fair::mq::plugins</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">class </span>Config : <span class="keyword">public</span> Plugin</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; Config(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> Plugin::Version version, <span class="keyword">const</span> std::string&amp; maintainer, <span class="keyword">const</span> std::string&amp; homepage, PluginServices* pluginServices);</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; ~Config();</div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1plugins_1_1Config.html"> 26</a></span>&#160;};</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;Plugin::ProgOptions ConfigPluginProgramOptions();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;REGISTER_FAIRMQ_PLUGIN(</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classfair_1_1mq_1_1plugins_1_1Config.html">Config</a>, <span class="comment">// Class name</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; config, <span class="comment">// Plugin name</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; (<a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Plugin::Version</a>{FAIRMQ_VERSION_MAJOR, FAIRMQ_VERSION_MINOR, FAIRMQ_VERSION_PATCH}),</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="stringliteral">&quot;FairRootGroup &lt;fairroot@gsi.de&gt;&quot;</span>,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="stringliteral">&quot;https://github.com/FairRootGroup/FairRoot&quot;</span>,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; ConfigPluginProgramOptions</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;} <span class="comment">// namespace fair::mq::plugins</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINS_CONFIG */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1plugins_1_1Config_html"><div class="ttname"><a href="classfair_1_1mq_1_1plugins_1_1Config.html">fair::mq::plugins::Config</a></div><div class="ttdef"><b>Definition:</b> Config.h:27</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,192 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/ofi/ControlMessages.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_5bbe8f428ccaffea9370922019c81a71.html">ofi</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ControlMessages.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_OFI_CONTROLMESSAGES_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_OFI_CONTROLMESSAGES_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;boost/asio/buffer.hpp&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;boost/container/pmr/memory_resource.hpp&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span>boost::asio</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> PodType&gt;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">auto</span> buffer(<span class="keyword">const</span> PodType&amp; obj) -&gt; boost::asio::const_buffer</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordflow">return</span> boost::asio::const_buffer(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(&amp;obj), <span class="keyword">sizeof</span>(PodType));</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;}</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;} <span class="comment">// namespace boost::asio</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">namespace </span>fair::mq::ofi</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;{</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">enum class</span> ControlMessageType</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; Empty = 1,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; PostBuffer,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; PostMultiPartStartBuffer</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;};</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ofi_1_1Empty.html"> 41</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1ofi_1_1Empty.html">Empty</a></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{};</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html"> 44</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html">PostBuffer</a></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint64_t size; <span class="comment">// buffer size (size_t)</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer.html"> 49</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer.html">PostMultiPartStartBuffer</a></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; uint32_t numParts; <span class="comment">// buffer size (size_t)</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; uint64_t size; <span class="comment">// buffer size (size_t)</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="unionfair_1_1mq_1_1ofi_1_1ControlMessageContent.html"> 55</a></span>&#160;<span class="keyword">union </span><a class="code" href="unionfair_1_1mq_1_1ofi_1_1ControlMessageContent.html">ControlMessageContent</a></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html">PostBuffer</a> postBuffer;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="structfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer.html">PostMultiPartStartBuffer</a> postMultiPartStartBuffer;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html"> 61</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html">ControlMessage</a></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; ControlMessageType type;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="unionfair_1_1mq_1_1ofi_1_1ControlMessageContent.html">ControlMessageContent</a> msg;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;};</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="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">using</span> unique_ptr = std::unique_ptr&lt;T, std::function&lt;void(T*)&gt;&gt;;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="keyword">auto</span> MakeControlMessageWithPmr(boost::container::pmr::memory_resource&amp; pmr, Args&amp;&amp;... args)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; -&gt; ofi::unique_ptr&lt;ControlMessage&gt;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;{</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">void</span>* mem = pmr.allocate(<span class="keyword">sizeof</span>(<a class="code" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html">ControlMessage</a>));</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html">ControlMessage</a>* ctrl = <span class="keyword">new</span> (mem) <a class="code" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html">ControlMessage</a>();</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (std::is_same&lt;T, PostBuffer&gt;::value) {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; ctrl-&gt;type = ControlMessageType::PostBuffer;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; ctrl-&gt;msg.postBuffer = <a class="code" href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html">PostBuffer</a>(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::is_same&lt;T, PostMultiPartStartBuffer&gt;::value) {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; ctrl-&gt;type = ControlMessageType::PostMultiPartStartBuffer;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; ctrl-&gt;msg.postMultiPartStartBuffer = PostMultiPartStartBuffer(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::is_same&lt;T, Empty&gt;::value) {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; ctrl-&gt;type = ControlMessageType::Empty;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> ofi::unique_ptr&lt;ControlMessage&gt;(ctrl, [&amp;pmr](ControlMessage* p) {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; p-&gt;~ControlMessage();</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; pmr.deallocate(p, <span class="keyword">sizeof</span>(T));</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; });</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;}</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="keyword">auto</span> MakeControlMessage(Args&amp;&amp;... args) -&gt; ControlMessage</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;{</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; ControlMessage ctrl;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (std::is_same&lt;T, PostBuffer&gt;::value) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; ctrl.type = ControlMessageType::PostBuffer;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::is_same&lt;T, PostMultiPartStartBuffer&gt;::value) {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; ctrl.type = ControlMessageType::PostMultiPartStartBuffer;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (std::is_same&lt;T, Empty&gt;::value) {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; ctrl.type = ControlMessageType::Empty;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; ctrl.msg = T(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">return</span> ctrl;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;}</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;} <span class="comment">// namespace fair::mq::ofi</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_OFI_CONTROLMESSAGES_H */</span><span class="preprocessor"> </span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1ofi_1_1ControlMessage_html"><div class="ttname"><a href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html">fair::mq::ofi::ControlMessage</a></div><div class="ttdef"><b>Definition:</b> ControlMessages.h:62</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1ofi_1_1Empty_html"><div class="ttname"><a href="structfair_1_1mq_1_1ofi_1_1Empty.html">fair::mq::ofi::Empty</a></div><div class="ttdef"><b>Definition:</b> ControlMessages.h:42</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer_html"><div class="ttname"><a href="structfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer.html">fair::mq::ofi::PostMultiPartStartBuffer</a></div><div class="ttdef"><b>Definition:</b> ControlMessages.h:50</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1ofi_1_1PostBuffer_html"><div class="ttname"><a href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html">fair::mq::ofi::PostBuffer</a></div><div class="ttdef"><b>Definition:</b> ControlMessages.h:45</div></div>
<div class="ttc" id="aunionfair_1_1mq_1_1ofi_1_1ControlMessageContent_html"><div class="ttname"><a href="unionfair_1_1mq_1_1ofi_1_1ControlMessageContent.html">fair::mq::ofi::ControlMessageContent</a></div><div class="ttdef"><b>Definition:</b> ControlMessages.h:56</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,147 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/Control.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Control.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINS_CONTROL</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINS_CONTROL</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/Plugin.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/Version.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/StateQueue.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;queue&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">namespace </span>fair::mq::plugins</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</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="keyword">class </span>Control : <span class="keyword">public</span> Plugin</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; Control(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> Plugin::Version version, <span class="keyword">const</span> std::string&amp; maintainer, <span class="keyword">const</span> std::string&amp; homepage, PluginServices* pluginServices);</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; ~Control();</div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1plugins_1_1Control.html"> 33</a></span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> InteractiveMode() -&gt; void;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> PrintInteractiveHelpColor() -&gt; void;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> PrintInteractiveHelp() -&gt; void;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> PrintStateMachineColor() -&gt; void;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> PrintStateMachine() -&gt; void;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> StaticMode() -&gt; void;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">auto</span> SignalHandler() -&gt; void;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">auto</span> RunShutdownSequence() -&gt; void;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">auto</span> RunStartupSequence() -&gt; void;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::thread fControllerThread;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::thread fSignalHandlerThread;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::mutex fControllerMutex;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::atomic&lt;bool&gt; fDeviceShutdownRequested;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::atomic&lt;bool&gt; fDeviceHasShutdown;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::atomic&lt;bool&gt; fPluginShutdownRequested;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classfair_1_1mq_1_1StateQueue.html">fair::mq::StateQueue</a> fStateQueue;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;}; <span class="comment">/* class Control */</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">auto</span> ControlPluginProgramOptions() -&gt; Plugin::ProgOptions;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;REGISTER_FAIRMQ_PLUGIN(</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classfair_1_1mq_1_1plugins_1_1Control.html">Control</a>, <span class="comment">// Class name</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; control, <span class="comment">// Plugin name (string, lower case chars only)</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; (<a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Plugin::Version</a>{FAIRMQ_VERSION_MAJOR, FAIRMQ_VERSION_MINOR, FAIRMQ_VERSION_PATCH}), <span class="comment">// Version</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot;FairRootGroup &lt;fairroot@gsi.de&gt;&quot;</span>, <span class="comment">// Maintainer</span></div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="stringliteral">&quot;https://github.com/FairRootGroup/FairMQ&quot;</span>, <span class="comment">// Homepage</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; ControlPluginProgramOptions <span class="comment">// Free function which declares custom program options for the</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// plugin signature: () -&gt;</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// boost::optional&lt;boost::program_options::options_description&gt;</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;)</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="comment">// namespace fair::mq::plugins</span></div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINS_CONTROL */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1plugins_1_1Control_html"><div class="ttname"><a href="classfair_1_1mq_1_1plugins_1_1Control.html">fair::mq::plugins::Control</a></div><div class="ttdef"><b>Definition:</b> Control.h:34</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1StateQueue_html"><div class="ttname"><a href="classfair_1_1mq_1_1StateQueue.html">fair::mq::StateQueue</a></div><div class="ttdef"><b>Definition:</b> StateQueue.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,94 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/CppSTL.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">CppSTL.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_CPPSTL_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_CPPSTL_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_CPPSTL_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,151 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSAgent.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSAgent.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSSAGENT_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSSAGENT_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSSession.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">class </span>DDSAgent</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">using</span> Id = uint64_t;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">using</span> Pid = uint32_t;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSAgent.html"> 32</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSAgent.html">DDSAgent</a>(<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a> session,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; Id <span class="keywordtype">id</span>,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; Pid pid,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string path,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; std::string host,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::chrono::milliseconds startupTime,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string username)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; : fSession(std::move(session))</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; , fId(id)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; , fPid(pid)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; , fDDSPath(std::move(path))</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; , fHost(std::move(host))</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , fStartupTime(startupTime)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; , fUsername(std::move(username))</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a> GetSession()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSession; }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; Id GetId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fId; }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; Pid GetPid()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPid; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; std::string GetHost()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fHost; }</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::string GetDDSPath()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fDDSPath; }</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::chrono::milliseconds GetStartupTime()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fStartupTime; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::string GetUsername()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fUsername; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> DDSAgent&amp; agent) -&gt; std::ostream&amp;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;DDSAgent id: &quot;</span> &lt;&lt; agent.fId</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, pid: &quot;</span> &lt;&lt; agent.fPid</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, path: &quot;</span> &lt;&lt; agent.fDDSPath</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, host: &quot;</span> &lt;&lt; agent.fHost</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, startupTime: &quot;</span> &lt;&lt; agent.fStartupTime.count()</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, username: &quot;</span> &lt;&lt; agent.fUsername;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; DDSSession fSession;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; Id fId;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; Pid fPid;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::string fDDSPath;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; std::string fHost;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; std::chrono::milliseconds fStartupTime;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; std::string fUsername;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;};</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSSAGENT_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSSession_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">fair::mq::sdk::DDSSession</a></div><div class="ttdoc">Represents a DDS session.</div><div class="ttdef"><b>Definition:</b> DDSSession.h:62</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSAgent_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSAgent.html">fair::mq::sdk::DDSAgent</a></div><div class="ttdoc">Represents a DDS agent.</div><div class="ttdef"><b>Definition:</b> DDSAgent.h:33</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,117 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSCollection.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSCollection.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSCOLLECTION_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSCOLLECTION_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// #include &lt;fairmq/sdk/DDSAgent.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">class </span>DDSCollection</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">using</span> Id = std::uint64_t;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">explicit</span> DDSCollection(Id <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSCollection.html"> 30</a></span>&#160; : fId(id)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {}</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; Id GetId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fId; }</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> DDSCollection&amp; collection) -&gt; std::ostream&amp;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; {</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;DDSCollection id: &quot;</span> &lt;&lt; collection.fId;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; }</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; Id fId;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;};</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSCOLLECTION_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,117 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSEnvironment.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSEnvironment.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSENVIRONMENT_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSENVIRONMENT_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</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; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">class </span>DDSEnvironment</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">using</span> Path = boost::filesystem::path;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; DDSEnvironment();</div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html"> 29</a></span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>(Path);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">auto</span> GetLocation() const -&gt; Path;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; auto GetConfigHome() const -&gt; Path;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; friend auto operator&lt;&lt;(std::ostream&amp; os, <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a> env) -&gt; std::ostream&amp;;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; private:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; struct <a class="code" href="structfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl.html">Impl</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::shared_ptr&lt;<a class="code" href="structfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl.html">Impl</a>&gt; fImpl;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;using <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnv</a> = <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSENVIRONMENT_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSEnvironment_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">fair::mq::sdk::DDSEnvironment</a></div><div class="ttdoc">Sets up the DDS environment (object helper)</div><div class="ttdef"><b>Definition:</b> DDSEnvironment.h:30</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl.html">fair::mq::sdk::DDSEnvironment::Impl</a></div><div class="ttdef"><b>Definition:</b> DDSEnvironment.cxx:29</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,187 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSSession.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSSession.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSSESSION_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSSESSION_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSEnvironment.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSInfo.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSTask.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&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">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;istream&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</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="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">enum class</span> DDSRMSPlugin</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; localhost,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; ssh</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, DDSRMSPlugin plugin) -&gt; std::ostream&amp;;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">auto</span> operator&gt;&gt;(std::istream&amp; is, DDSRMSPlugin&amp; plugin) -&gt; std::istream&amp;;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">class </span>DDSTopology;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">class </span>DDSAgent;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">class </span>DDSChannel</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">using</span> Id = std::uint64_t;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">class </span>DDSSession</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">using</span> Id = std::string;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">using</span> Quantity = std::uint32_t;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">using</span> Path = boost::filesystem::path;</div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html"> 61</a></span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a>(<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a> env = <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>());</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a>(Id existing, <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a> env = <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>());</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a>(std::shared_ptr&lt;dds::tools_api::CSession&gt; nativeSession, <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnv</a> env = {});</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">auto</span> GetEnv() const -&gt; <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; auto GetId() const -&gt; Id;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; auto GetRMSPlugin() const -&gt; DDSRMSPlugin;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; auto SetRMSPlugin(DDSRMSPlugin) -&gt; <span class="keywordtype">void</span>;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; auto GetRMSConfig() const -&gt; Path;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; auto SetRMSConfig(Path) const -&gt; <span class="keywordtype">void</span>;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; auto IsStoppedOnDestruction() const -&gt; <span class="keywordtype">bool</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; auto StopOnDestruction(<span class="keywordtype">bool</span> stop = true) -&gt; <span class="keywordtype">void</span>;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; auto IsRunning() const -&gt; <span class="keywordtype">bool</span>;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; auto SubmitAgents(Quantity agents) -&gt; <span class="keywordtype">void</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; struct AgentCount {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; Quantity idle = 0;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; Quantity active = 0;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; Quantity executing = 0;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; };</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">auto</span> RequestAgentCount() -&gt; AgentCount;</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1AgentCount.html"> 86</a></span>&#160; <span class="keyword">auto</span> RequestAgentInfo() -&gt; std::vector&lt;DDSAgent&gt;;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">auto</span> RequestTaskInfo() -&gt; std::vector&lt;DDSTask&gt;;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo.html">CommanderInfo</a> {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordtype">int</span> pid = -1;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::string activeTopologyName;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; };</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">auto</span> RequestCommanderInfo() -&gt; <a class="code" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo.html">CommanderInfo</a>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">auto</span> WaitForIdleAgents(Quantity) -&gt; void;</div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo.html"> 94</a></span>&#160; <span class="keyword">auto</span> WaitForOnlyIdleAgents() -&gt; void;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">auto</span> WaitForExecutingAgents(Quantity) -&gt; void;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">auto</span> ActivateTopology(<span class="keyword">const</span> Path&amp; topoFile) -&gt; void;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">auto</span> ActivateTopology(<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopology</a>) -&gt; void;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">auto</span> Stop() -&gt; void;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">void</span> StartDDSService();</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">void</span> SubscribeToCommands(std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; msg, <span class="keyword">const</span> std::string&amp; condition, uint64_t senderId)&gt;);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">void</span> UnsubscribeFromCommands();</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">void</span> SendCommand(<span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> std::string&amp; = <span class="stringliteral">&quot;&quot;</span>);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">void</span> SendCommand(<span class="keyword">const</span> std::string&amp;, DDSChannel::Id);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">auto</span> GetTaskId(DDSChannel::Id) <span class="keyword">const</span> -&gt; DDSTask::Id;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a>&amp; session) -&gt; std::ostream&amp;;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1Impl.html">Impl</a>;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; std::shared_ptr&lt;Impl&gt; fImpl;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;};</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">auto</span> getMostRecentRunningDDSSession(<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnv</a> env = {}) -&gt; <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">DDSSession</a>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSSESSION_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSEnvironment_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">fair::mq::sdk::DDSEnvironment</a></div><div class="ttdoc">Sets up the DDS environment (object helper)</div><div class="ttdef"><b>Definition:</b> DDSEnvironment.h:30</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSSession_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSSession.html">fair::mq::sdk::DDSSession</a></div><div class="ttdoc">Represents a DDS session.</div><div class="ttdef"><b>Definition:</b> DDSSession.h:62</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1DDSSession_1_1Impl_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1Impl.html">fair::mq::sdk::DDSSession::Impl</a></div><div class="ttdef"><b>Definition:</b> DDSSession.cxx:65</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo.html">fair::mq::sdk::DDSSession::CommanderInfo</a></div><div class="ttdef"><b>Definition:</b> DDSSession.h:94</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">fair::mq::sdk::DDSTopology</a></div><div class="ttdoc">Represents a DDS topology.</div><div class="ttdef"><b>Definition:</b> DDSTopology.h:35</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSTask.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSTask.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSTASK_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSTASK_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSCollection.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">class </span>DDSTask</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">using</span> Id = std::uint64_t;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">explicit</span> DDSTask(Id <span class="keywordtype">id</span>, Id collectionId)</div>
<div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSTask.html"> 30</a></span>&#160; : fId(id)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; , fCollectionId(collectionId)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {}</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; Id GetId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fId; }</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; DDSCollection::Id GetCollectionId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fCollectionId; }</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> DDSTask&amp; task) -&gt; std::ostream&amp;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;DDSTask id: &quot;</span> &lt;&lt; task.fId &lt;&lt; <span class="stringliteral">&quot;, collection id: &quot;</span> &lt;&lt; task.fCollectionId;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; Id fId;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; DDSCollection::Id fCollectionId;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;};</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSTASK_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,143 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/DDSTopology.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDSTopology.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_DDSTOPOLOGY_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_DDSTOPOLOGY_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSCollection.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSEnvironment.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSInfo.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSTask.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span>fair::mq::sdk</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">class </span>DDSTopology</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">using</span> Path = boost::filesystem::path;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; DDSTopology() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html"> 34</a></span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopology</a>(Path topoFile, <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a> env = <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>());</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopology</a>(dds::topology_api::CTopology nativeTopology, <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnv</a> env = {});</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a8b3da42b8fff365b3a492c916f9c2867">GetEnv</a>() const -&gt; <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">DDSEnvironment</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#ad5c5394346bd4dd722980879146b092e">GetTopoFile</a>() const -&gt; Path;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#ab7151111693b76058267c7d084276f86">GetNumRequiredAgents</a>() const -&gt; <span class="keywordtype">int</span>;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a8fa1e51a0238c14f1a0fe1fccaa03f56">GetTasks</a>(const std::<span class="keywordtype">string</span>&amp; = &quot;&quot;) const -&gt; std::vector&lt;<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTask.html">DDSTask</a>&gt;;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#add430aa66db65299ab95fc4da18fdee4">GetCollections</a>() const -&gt; std::vector&lt;<a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSCollection.html">DDSCollection</a>&gt;;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a0e475b519c2283b1c9326906d8d10906">GetName</a>() const -&gt; std::<span class="keywordtype">string</span>;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; friend auto operator&lt;&lt;(std::ostream&amp;, const <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopology</a>&amp;) -&gt; std::ostream&amp;;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; private:</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; struct Impl;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; std::shared_ptr&lt;Impl&gt; fImpl;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;};</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;using <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopo</a> = <a class="code" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">DDSTopology</a>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;} <span class="comment">// namespace fair::mq::sdk</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_DDSTOPOLOGY_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_a0e475b519c2283b1c9326906d8d10906"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a0e475b519c2283b1c9326906d8d10906">fair::mq::sdk::DDSTopology::GetName</a></div><div class="ttdeci">auto GetName() const -&gt; std::string</div><div class="ttdoc">Get the name of the topology.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:111</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_ad5c5394346bd4dd722980879146b092e"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#ad5c5394346bd4dd722980879146b092e">fair::mq::sdk::DDSTopology::GetTopoFile</a></div><div class="ttdeci">auto GetTopoFile() const -&gt; Path</div><div class="ttdoc">Get path to DDS topology xml, if it is known.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:57</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSEnvironment_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html">fair::mq::sdk::DDSEnvironment</a></div><div class="ttdoc">Sets up the DDS environment (object helper)</div><div class="ttdef"><b>Definition:</b> DDSEnvironment.h:30</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_a8b3da42b8fff365b3a492c916f9c2867"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a8b3da42b8fff365b3a492c916f9c2867">fair::mq::sdk::DDSTopology::GetEnv</a></div><div class="ttdeci">auto GetEnv() const -&gt; DDSEnvironment</div><div class="ttdoc">Get associated DDS environment.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:55</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_add430aa66db65299ab95fc4da18fdee4"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#add430aa66db65299ab95fc4da18fdee4">fair::mq::sdk::DDSTopology::GetCollections</a></div><div class="ttdeci">auto GetCollections() const -&gt; std::vector&lt; DDSCollection &gt;</div><div class="ttdoc">Get list of tasks in this topology.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:94</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSCollection_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSCollection.html">fair::mq::sdk::DDSCollection</a></div><div class="ttdoc">Represents a DDS collection.</div><div class="ttdef"><b>Definition:</b> DDSCollection.h:31</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTask_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTask.html">fair::mq::sdk::DDSTask</a></div><div class="ttdoc">Represents a DDS task.</div><div class="ttdef"><b>Definition:</b> DDSTask.h:31</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_ab7151111693b76058267c7d084276f86"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#ab7151111693b76058267c7d084276f86">fair::mq::sdk::DDSTopology::GetNumRequiredAgents</a></div><div class="ttdeci">auto GetNumRequiredAgents() const -&gt; int</div><div class="ttdoc">Get number of required agents for this topology.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:66</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html_a8fa1e51a0238c14f1a0fe1fccaa03f56"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html#a8fa1e51a0238c14f1a0fe1fccaa03f56">fair::mq::sdk::DDSTopology::GetTasks</a></div><div class="ttdeci">auto GetTasks(const std::string &amp;=&quot;&quot;) const -&gt; std::vector&lt; DDSTask &gt;</div><div class="ttdoc">Get list of tasks in this topology, optionally matching provided path.</div><div class="ttdef"><b>Definition:</b> DDSTopology.cxx:71</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1sdk_1_1DDSTopology_html"><div class="ttname"><a href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html">fair::mq::sdk::DDSTopology</a></div><div class="ttdoc">Represents a DDS topology.</div><div class="ttdef"><b>Definition:</b> DDSTopology.h:35</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

278
v1.4.33/DDS_8h_source.html Normal file
View File

@@ -0,0 +1,278 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/DDS/DDS.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li><li class="navelem"><a class="el" href="dir_971de67a0ea47ad3d0f84ca5c47a4a50.html">DDS</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DDS.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINS_DDS</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINS_DDS</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/Plugin.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/StateQueue.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/Version.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/commands/Commands.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;dds/dds.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/asio/executor.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;boost/asio/executor_work_guard.hpp&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;boost/asio/io_context.hpp&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;cassert&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">namespace </span>fair::mq::plugins</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">struct </span>DDSConfig</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="comment">// container of sub channel addresses</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fNumSubChannels;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="comment">// dds values for the channel</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; std::map&lt;uint64_t, std::string&gt; fDDSValues;</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1plugins_1_1DDSConfig.html"> 44</a></span>&#160;};</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html">DDSSubscription</a></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html">DDSSubscription</a>()</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; : fDDSCustomCmd(fService)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; , fDDSKeyValue(fService)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html"> 52</a></span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_TASK_PATH: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::task_path&gt;();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_GROUP_NAME: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::group_name&gt;();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_COLLECTION_NAME: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::collection_name&gt;();</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_TASK_NAME: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::task_name&gt;();</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_TASK_INDEX: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::task_index&gt;();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_COLLECTION_INDEX: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::collection_index&gt;();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_TASK_ID: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::task_id&gt;();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_LOCATION: &quot;</span> &lt;&lt; dds::env_prop&lt;dds::dds_location&gt;();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; std::string dds_session_id(dds::env_prop&lt;dds::dds_session_id&gt;());</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;$DDS_SESSION_ID: &quot;</span> &lt;&lt; dds_session_id;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// subscribe for DDS service errors.</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; fService.subscribeOnError([](<span class="keyword">const</span> dds::intercom_api::EErrorCode errorCode, <span class="keyword">const</span> std::string&amp; errorMsg) {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;DDS Error received: error code: &quot;</span> &lt;&lt; errorCode &lt;&lt; <span class="stringliteral">&quot;, error message: &quot;</span> &lt;&lt; errorMsg;</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; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// fDDSCustomCmd.subscribe([](const std::string&amp; cmd, const std::string&amp; cond, uint64_t senderId) {</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;cmd: &quot; &lt;&lt; cmd &lt;&lt; &quot;, cond: &quot; &lt;&lt; cond &lt;&lt; &quot;, senderId: &quot; &lt;&lt; senderId;</span></div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="comment">// });</span></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; assert(!dds_session_id.empty());</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">auto</span> Start() -&gt; <span class="keywordtype">void</span> {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; fService.start(dds::env_prop&lt;dds::dds_session_id&gt;());</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; ~DDSSubscription() {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; fDDSKeyValue.unsubscribe();</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; fDDSCustomCmd.unsubscribe();</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">auto</span> SubscribeCustomCmd(Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; fDDSCustomCmd.subscribe(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">auto</span> SubscribeKeyValue(Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; fDDSKeyValue.subscribe(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">auto</span> Send(Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; fDDSCustomCmd.send(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">auto</span> PutValue(Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; fDDSKeyValue.putValue(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; dds::intercom_api::CIntercomService fService;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; dds::intercom_api::CCustomCmd fDDSCustomCmd;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; dds::intercom_api::CKeyValue fDDSKeyValue;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;};</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">struct </span>IofN</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; IofN(<span class="keywordtype">int</span> i, <span class="keywordtype">int</span> n)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; : fI(i)</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; , fN(n)</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {}</div>
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1plugins_1_1IofN.html"> 119</a></span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fI;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fN;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::vector&lt;std::string&gt; fEntries;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;};</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="keyword">class </span><a class="code" href="classfair_1_1mq_1_1plugins_1_1DDS.html">DDS</a> : <span class="keyword">public</span> <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a></div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="classfair_1_1mq_1_1plugins_1_1DDS.html">DDS</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Plugin::Version</a> version, <span class="keyword">const</span> std::string&amp; maintainer, <span class="keyword">const</span> std::string&amp; homepage, <a class="code" href="classfair_1_1mq_1_1PluginServices.html">PluginServices</a>* pluginServices);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; ~<a class="code" href="classfair_1_1mq_1_1plugins_1_1DDS.html">DDS</a>();</div>
<div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1plugins_1_1DDS.html"> 131</a></span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">auto</span> WaitForExitingAck() -&gt; void;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">auto</span> StartWorkerThread() -&gt; void;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">auto</span> FillChannelContainers() -&gt; void;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keyword">auto</span> EmptyChannelContainers() -&gt; void;</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">auto</span> SubscribeForConnectingChannels() -&gt; void;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keyword">auto</span> PublishBoundChannels() -&gt; void;</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">auto</span> SubscribeForCustomCommands() -&gt; void;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">auto</span> HandleCmd(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>, <a class="code" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">sdk::cmd::Cmd</a>&amp; cmd, <span class="keyword">const</span> std::string&amp; cond, uint64_t senderId) -&gt; void;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <a class="code" href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html">DDSSubscription</a> fDDS;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">size_t</span> fDDSTaskId;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; std::unordered_map&lt;std::string, std::vector&lt;std::string&gt;&gt; fBindingChans;</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; std::unordered_map&lt;std::string, DDSConfig&gt; fConnectingChans;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; std::unordered_map&lt;std::string, int&gt; fI;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; std::unordered_map&lt;std::string, IofN&gt; fIofN;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; std::thread fControllerThread;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; DeviceState fCurrentState, fLastState;</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; std::atomic&lt;bool&gt; fDeviceTerminationRequested;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; std::unordered_map&lt;uint64_t, std::pair&lt;std::chrono::steady_clock::time_point, int64_t&gt;&gt; fStateChangeSubscribers;</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; uint64_t fLastExternalController;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">bool</span> fExitingAckedByLastExternalController;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; std::condition_variable fExitingAcked;</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; std::mutex fStateChangeSubscriberMutex;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordtype">bool</span> fUpdatesAllowed;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; std::mutex fUpdateMutex;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; std::condition_variable fUpdateCondition;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; std::thread fWorkerThread;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; boost::asio::io_context fWorkerQueue;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; boost::asio::executor_work_guard&lt;boost::asio::executor&gt; fWorkGuard;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;};</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160;Plugin::ProgOptions DDSProgramOptions()</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;{</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; boost::program_options::options_description options{<span class="stringliteral">&quot;DDS Plugin&quot;</span>};</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; options.add_options()</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; (<span class="stringliteral">&quot;dds-i&quot;</span>, boost::program_options::value&lt;std::vector&lt;std::string&gt;&gt;()-&gt;multitoken()-&gt;composing(), <span class="stringliteral">&quot;Task index for chosing connection target (single channel n to m). When all values come via same update.&quot;</span>)</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; (<span class="stringliteral">&quot;dds-i-n&quot;</span>, boost::program_options::value&lt;std::vector&lt;std::string&gt;&gt;()-&gt;multitoken()-&gt;composing(), <span class="stringliteral">&quot;Task index for chosing connection target (one out of n values to take). When values come as independent updates.&quot;</span>)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; (<span class="stringliteral">&quot;wait-for-exiting-ack-timeout&quot;</span>, boost::program_options::value&lt;unsigned int&gt;()-&gt;default_value(1000), <span class="stringliteral">&quot;Wait timeout for EXITING state-change acknowledgement by external controller in milliseconds.&quot;</span>);</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span> options;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;REGISTER_FAIRMQ_PLUGIN(</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; DDS, <span class="comment">// Class name</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; dds, <span class="comment">// Plugin name (string, lower case chars only)</span></div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; (Plugin::Version{FAIRMQ_VERSION_MAJOR,</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; FAIRMQ_VERSION_MINOR,</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; FAIRMQ_VERSION_PATCH}), <span class="comment">// Version</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="stringliteral">&quot;FairRootGroup &lt;fairroot@gsi.de&gt;&quot;</span>, <span class="comment">// Maintainer</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="stringliteral">&quot;https://github.com/FairRootGroup/FairMQ&quot;</span>, <span class="comment">// Homepage</span></div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; DDSProgramOptions <span class="comment">// custom program options for the plugin</span></div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;)</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160;} <span class="comment">// namespace fair::mq::plugins</span></div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINS_DDS */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html">fair::mq::PluginServices</a></div><div class="ttdoc">Facilitates communication between devices and plugins.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:46</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd_html"><div class="ttname"><a href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html">fair::mq::sdk::cmd::Cmd</a></div><div class="ttdef"><b>Definition:</b> Commands.h:62</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1plugins_1_1DDS_html"><div class="ttname"><a href="classfair_1_1mq_1_1plugins_1_1DDS.html">fair::mq::plugins::DDS</a></div><div class="ttdef"><b>Definition:</b> DDS.h:132</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1plugins_1_1DDSSubscription_html"><div class="ttname"><a href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html">fair::mq::plugins::DDSSubscription</a></div><div class="ttdef"><b>Definition:</b> DDS.h:53</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1Plugin_html"><div class="ttname"><a href="classfair_1_1mq_1_1Plugin.html">fair::mq::Plugin</a></div><div class="ttdoc">Base class for FairMQ plugins.</div><div class="ttdef"><b>Definition:</b> Plugin.h:43</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,146 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/DeviceRunner.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">DeviceRunner.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_DEVICERUNNER_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_DEVICERUNNER_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/EventManager.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/PluginManager.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptions.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;FairMQDevice.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="namespacefair_1_1mq.html"> 22</a></span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">class </span><a class="code" href="classfair_1_1mq_1_1DeviceRunner.html">DeviceRunner</a></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classfair_1_1mq_1_1DeviceRunner.html">DeviceRunner</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>*<span class="keyword">const</span>* argv, <span class="keywordtype">bool</span> printLogo = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">auto</span> Run() -&gt; int;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1DeviceRunner.html"> 56</a></span>&#160; <span class="keyword">auto</span> RunWithExceptionHandlers() -&gt; int;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> HandleGeneralOptions(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>&amp; config, <span class="keywordtype">bool</span> printLogo = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">void</span> SubscribeForConfigChange();</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">void</span> UnsubscribeFromConfigChange();</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> H&gt;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">auto</span> AddHook(std::function&lt;<span class="keywordtype">void</span>(<a class="code" href="classfair_1_1mq_1_1DeviceRunner.html">DeviceRunner</a>&amp;)&gt; hook) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; fEvents.Subscribe&lt;H&gt;(<span class="stringliteral">&quot;runner&quot;</span>, hook);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> H&gt;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">auto</span> RemoveHook() -&gt; <span class="keywordtype">void</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; fEvents.Unsubscribe&lt;H&gt;(<span class="stringliteral">&quot;runner&quot;</span>);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; std::vector&lt;std::string&gt; fRawCmdLineArgs;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> fConfig;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; std::unique_ptr&lt;FairMQDevice&gt; fDevice;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; PluginManager fPluginManager;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> fPrintLogo;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; EventManager fEvents;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;};</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">namespace </span>hooks {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">struct </span>LoadPlugins : Event&lt;DeviceRunner&amp;&gt; {};</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="keyword">struct </span>SetCustomCmdLineOptions : Event&lt;DeviceRunner&amp;&gt; {};</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">struct </span>ModifyRawCmdLineArgs : Event&lt;DeviceRunner&amp;&gt; {};</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">struct </span>InstantiateDevice : Event&lt;DeviceRunner&amp;&gt; {};</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;} <span class="comment">/* namespace hooks */</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1hooks_1_1LoadPlugins.html"> 91</a></span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1hooks_1_1SetCustomCmdLineOptions.html"> 92</a></span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1hooks_1_1ModifyRawCmdLineArgs.html"> 93</a></span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_DEVICERUNNER_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1DeviceRunner_html"><div class="ttname"><a href="classfair_1_1mq_1_1DeviceRunner.html">fair::mq::DeviceRunner</a></div><div class="ttdoc">Utility class to facilitate a convenient top-level device launch/shutdown.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:57</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,138 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/Error.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Error.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_ERROR_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_ERROR_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;system_error&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></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; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>sdk</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">struct </span>RuntimeError : ::std::runtime_error</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... T&gt;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">explicit</span> RuntimeError(T&amp;&amp;... t)</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : ::std::runtime_error::runtime_error(tools::ToString(std::forward&lt;T&gt;(t)...))</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {}</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;} <span class="comment">/* namespace sdk */</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">enum class</span> ErrorCode</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1sdk_1_1RuntimeError.html"> 34</a></span>&#160; OperationInProgress = 10,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; OperationTimeout,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; OperationCanceled,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; DeviceChangeStateFailed,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; DeviceGetPropertiesFailed,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; DeviceSetPropertiesFailed</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;};</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;std::error_code MakeErrorCode(ErrorCode);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1ErrorCategory.html">ErrorCategory</a> : std::error_category</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span>* name() const noexcept override;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::<span class="keywordtype">string</span> message(<span class="keywordtype">int</span> ev) const override;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;};</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ErrorCategory.html"> 50</a></span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;namespace std</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">template</span>&lt;&gt;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structstd_1_1is__error__code__enum_3_01fair_1_1mq_1_1ErrorCode_01_4.html"> 56</a></span>&#160;<span class="keyword">struct </span>is_error_code_enum&lt;fair::mq::ErrorCode&gt; : true_type</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{};</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;} <span class="comment">// namespace std</span></div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_ERROR_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1ErrorCategory_html"><div class="ttname"><a href="structfair_1_1mq_1_1ErrorCategory.html">fair::mq::ErrorCategory</a></div><div class="ttdef"><b>Definition:</b> Error.h:51</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/EventManager.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">EventManager.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_EVENTMANAGER_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_EVENTMANAGER_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;typeindex&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;boost/any.hpp&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;boost/functional/hash.hpp&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;boost/signals2.hpp&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</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">// Inherit from this base event type to create custom event types</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> K&gt;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">struct </span>Event</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">using</span> KeyType = K;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;};</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">class </span>EventManager</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Clang 3.4-3.8 has a bug and cannot properly deal with the following template alias.</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">// Therefore, we leave them here commented out for now.</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="comment">// template&lt;typename E, typename ...Args&gt;</span></div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1EventManager.html"> 55</a></span>&#160; <span class="comment">// using Callback = std::function&lt;void(typename E::KeyType, Args...)&gt;;</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> ...Args&gt;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">using</span> Signal = boost::signals2::signal&lt;void(<span class="keyword">typename</span> E::KeyType, Args...)&gt;;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> ...Args&gt;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">auto</span> Subscribe(<span class="keyword">const</span> std::string&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">typename</span> E::KeyType, Args...)&gt; callback) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">const</span> std::type_index event_type_index{<span class="keyword">typeid</span>(E)};</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">const</span> std::type_index callback_type_index{<span class="keyword">typeid</span>(std::function&lt;void(<span class="keyword">typename</span> E::KeyType, Args...)&gt;)};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> signalsKey = std::make_pair(event_type_index, callback_type_index);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> connectionsKey = std::make_pair(subscriber, signalsKey);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> connection = GetSignal&lt;E, Args...&gt;(signalsKey)-&gt;connect(callback);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </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; std::lock_guard&lt;std::mutex&gt; lock{fMutex};</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (fConnections.find(connectionsKey) != fConnections.end())</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; fConnections.at(connectionsKey).disconnect();</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; fConnections.erase(connectionsKey);</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; fConnections.insert({connectionsKey, connection});</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> ...Args&gt;</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">auto</span> Unsubscribe(<span class="keyword">const</span> std::string&amp; subscriber) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">const</span> std::type_index event_type_index{<span class="keyword">typeid</span>(E)};</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> std::type_index callback_type_index{<span class="keyword">typeid</span>(std::function&lt;void(<span class="keyword">typename</span> E::KeyType, Args...)&gt;)};</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> signalsKey = std::make_pair(event_type_index, callback_type_index);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> connectionsKey = std::make_pair(subscriber, signalsKey);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; std::lock_guard&lt;std::mutex&gt; lock{fMutex};</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; fConnections.at(connectionsKey).disconnect();</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; fConnections.erase(connectionsKey);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> ...Args&gt;</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">auto</span> Emit(<span class="keyword">typename</span> E::KeyType key, Args... args) <span class="keyword">const</span> -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">const</span> std::type_index event_type_index{<span class="keyword">typeid</span>(E)};</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keyword">const</span> std::type_index callback_type_index{<span class="keyword">typeid</span>(std::function&lt;void(<span class="keyword">typename</span> E::KeyType, Args...)&gt;)};</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> signalsKey = std::make_pair(event_type_index, callback_type_index);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; (*GetSignal&lt;E, Args...&gt;(signalsKey))(key, std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">using</span> SignalsKey = std::pair&lt;std::type_index, std::type_index&gt;;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="comment">// event , callback</span></div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">using</span> SignalsValue = boost::any;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">using</span> SignalsMap = std::unordered_map&lt;SignalsKey, SignalsValue, boost::hash&lt;SignalsKey&gt;&gt;;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">mutable</span> SignalsMap fSignals;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keyword">using</span> ConnectionsKey = std::pair&lt;std::string, SignalsKey&gt;;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// subscriber , event/callback</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">using</span> ConnectionsValue = boost::signals2::connection;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">using</span> ConnectionsMap = std::unordered_map&lt;ConnectionsKey, ConnectionsValue, boost::hash&lt;ConnectionsKey&gt;&gt;;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; ConnectionsMap fConnections;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">mutable</span> std::mutex fMutex;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> E, <span class="keyword">typename</span> ...Args&gt;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">auto</span> GetSignal(<span class="keyword">const</span> SignalsKey&amp; key) <span class="keyword">const</span> -&gt; std::shared_ptr&lt;Signal&lt;E, Args...&gt;&gt;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; std::lock_guard&lt;std::mutex&gt; lock{fMutex};</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordflow">if</span> (fSignals.find(key) == fSignals.end())</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// wrapper is needed because boost::signals2::signal is neither copyable nor movable</span></div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="comment">// and I don&#39;t know how else to insert it into the map</span></div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">auto</span> signal = std::make_shared&lt;Signal&lt;E, Args...&gt;&gt;();</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; fSignals.insert(std::make_pair(key, signal));</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> boost::any_cast&lt;std::shared_ptr&lt;Signal&lt;E, Args...&gt;&gt;&gt;(fSignals.at(key));</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}; <span class="comment">/* class EventManager */</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; </div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_EVENTMANAGER_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,206 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQBenchmarkSampler.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQBenchmarkSampler.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQBENCHMARKSAMPLER_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQBENCHMARKSAMPLER_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;../FairMQLogger.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;tools/RateLimit.h&quot;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">// size_t</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// uint64_t</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span> <span class="comment">// memset</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classFairMQBenchmarkSampler.html"> 26</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>()</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; : fMultipart(<span class="keyword">false</span>)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; , fMemSet(<span class="keyword">false</span>)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; , fNumParts(1)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; , fMsgSize(10000)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; , fMsgAlignment(0)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; , fMsgRate(0)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; , fNumIterations(0)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; , fMaxIterations(0)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; , fOutChannelName()</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {}</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQBenchmarkSampler.html#aa515049fe636820d5bdb2032d5e3978c">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; fMemSet = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;memset&quot;</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; fNumParts = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">size_t</span>&gt;(<span class="stringliteral">&quot;num-parts&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; fMsgSize = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">size_t</span>&gt;(<span class="stringliteral">&quot;msg-size&quot;</span>);</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classFairMQBenchmarkSampler.html#aa515049fe636820d5bdb2032d5e3978c"> 47</a></span>&#160; fMsgAlignment = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">size_t</span>&gt;(<span class="stringliteral">&quot;msg-alignment&quot;</span>);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; fMsgRate = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">float</span>&gt;(<span class="stringliteral">&quot;msg-rate&quot;</span>);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; fMaxIterations = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;uint64_t&gt;(<span class="stringliteral">&quot;max-iterations&quot;</span>);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; fOutChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;out-channel&quot;</span>);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</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="keywordtype">void</span> <a class="code" href="classFairMQBenchmarkSampler.html#ae016fde6952dcd0ed671b4a6c51cb835">Run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="comment">// store the channel reference to avoid traversing the map on every loop iteration</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; dataOutChannel = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelName).at(0);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Starting the benchmark with message size of &quot;</span> &lt;&lt; fMsgSize &lt;&lt; <span class="stringliteral">&quot; and &quot;</span> &lt;&lt; fMaxIterations &lt;&lt; <span class="stringliteral">&quot; iterations.&quot;</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classFairMQBenchmarkSampler.html#ae016fde6952dcd0ed671b4a6c51cb835"> 59</a></span>&#160; <span class="keyword">auto</span> tStart = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html">fair::mq::tools::RateLimiter</a> rateLimiter(fMsgRate);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> parts;</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="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; fNumParts; ++i) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; parts.<a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(dataOutChannel.NewMessage(fMsgSize, <a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a>{fMsgAlignment}));</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">if</span> (fMemSet) {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; std::memset(parts.<a class="code" href="classFairMQParts.html#ac7fdb59ead8736caebaafd8861d6d7bd">At</a>(i)-&gt;GetData(), 0, parts.<a class="code" href="classFairMQParts.html#ac7fdb59ead8736caebaafd8861d6d7bd">At</a>(i)-&gt;GetSize());</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (dataOutChannel.<a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(parts) &gt;= 0) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">if</span> (fMaxIterations &gt; 0) {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span> (fNumIterations &gt;= fMaxIterations) {</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; ++fNumIterations;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; FairMQMessagePtr msg(dataOutChannel.NewMessage(fMsgSize, <a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a>{fMsgAlignment}));</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (fMemSet) {</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::memset(msg-&gt;GetData(), 0, msg-&gt;GetSize());</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (dataOutChannel.<a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(msg) &gt;= 0) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (fMaxIterations &gt; 0) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (fNumIterations &gt;= fMaxIterations) {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; ++fNumIterations;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (fMsgRate &gt; 0) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; rateLimiter.maybe_sleep();</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">auto</span> tEnd = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Done &quot;</span> &lt;&lt; fNumIterations &lt;&lt; <span class="stringliteral">&quot; iterations in &quot;</span> &lt;&lt; std::chrono::duration&lt;double, std::milli&gt;(tEnd - tStart).count() &lt;&lt; <span class="stringliteral">&quot;ms.&quot;</span>;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordtype">bool</span> fMemSet;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordtype">size_t</span> fNumParts;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">size_t</span> fMsgSize;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">size_t</span> fMsgAlignment;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordtype">float</span> fMsgRate;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; uint64_t fNumIterations;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; uint64_t fMaxIterations;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; std::string fOutChannelName;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;};</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQBENCHMARKSAMPLER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1Alignment_html"><div class="ttname"><a href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:25</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassFairMQParts_html_afaaa0eedc7a2c1e9fa6bec33dd1f3709"><div class="ttname"><a href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">FairMQParts::AddPart</a></div><div class="ttdeci">void AddPart(FairMQMessage *msg)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:48</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassFairMQParts_html_ac7fdb59ead8736caebaafd8861d6d7bd"><div class="ttname"><a href="classFairMQParts.html#ac7fdb59ead8736caebaafd8861d6d7bd">FairMQParts::At</a></div><div class="ttdeci">std::unique_ptr&lt; FairMQMessage &gt; &amp; At(const int index)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:84</div></div>
<div class="ttc" id="aclassFairMQBenchmarkSampler_html_ae016fde6952dcd0ed671b4a6c51cb835"><div class="ttname"><a href="classFairMQBenchmarkSampler.html#ae016fde6952dcd0ed671b4a6c51cb835">FairMQBenchmarkSampler::Run</a></div><div class="ttdeci">void Run() override</div><div class="ttdoc">Runs the device (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQBenchmarkSampler.h:59</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1tools_1_1RateLimiter_html"><div class="ttname"><a href="classfair_1_1mq_1_1tools_1_1RateLimiter.html">fair::mq::tools::RateLimiter</a></div><div class="ttdef"><b>Definition:</b> RateLimit.h:42</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a8be266eb34c0aa683674570866a7804d"><div class="ttname"><a href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">FairMQChannel::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:260</div></div>
<div class="ttc" id="aclassFairMQBenchmarkSampler_html_aa515049fe636820d5bdb2032d5e3978c"><div class="ttname"><a href="classFairMQBenchmarkSampler.html#aa515049fe636820d5bdb2032d5e3978c">FairMQBenchmarkSampler::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQBenchmarkSampler.h:47</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac6e41280dd6cc8b217944a97fd9c548c"><div class="ttname"><a href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">FairMQDevice::NewStatePending</a></div><div class="ttdeci">bool NewStatePending() const</div><div class="ttdoc">Returns true if a new state has been requested, signaling the current handler to stop.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:470</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassFairMQBenchmarkSampler_html"><div class="ttname"><a href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></div><div class="ttdef"><b>Definition:</b> FairMQBenchmarkSampler.h:27</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,450 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQChannel.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQChannel.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQCHANNEL_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQCHANNEL_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;FairMQTransportFactory.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;FairMQUnmanagedRegion.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;FairMQSocket.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/Transports.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;FairMQParts.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;FairMQMessage.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// unique_ptr, shared_ptr</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// std::move</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// int64_t</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classFairMQChannel.html"> 34</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQChannel.html">FairMQChannel</a></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="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classFairMQDevice.html">FairMQDevice</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="classFairMQChannel.html#ab681571de3ef6c1021b7981054d152f0">FairMQChannel</a>();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#acf2763fbdad18f5551ec7a3eb4e09829"> 44</a></span>&#160; <a class="code" href="classFairMQChannel.html#acf2763fbdad18f5551ec7a3eb4e09829">FairMQChannel</a>(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a3223d192c795abb3f357df5883dd67f5"> 50</a></span>&#160; <a class="code" href="classFairMQChannel.html#a3223d192c795abb3f357df5883dd67f5">FairMQChannel</a>(<span class="keyword">const</span> std::string&amp; type, <span class="keyword">const</span> std::string&amp; method, <span class="keyword">const</span> std::string&amp; address);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a0c44e61cd9e8153c7a0ed5903d2949c4"> 56</a></span>&#160; <a class="code" href="classFairMQChannel.html#a0c44e61cd9e8153c7a0ed5903d2949c4">FairMQChannel</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> std::string&amp; type, std::shared_ptr&lt;FairMQTransportFactory&gt; factory);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a9c411019f1ee1d0dcc9960ec5b2fde46"> 64</a></span>&#160; <a class="code" href="classFairMQChannel.html#a9c411019f1ee1d0dcc9960ec5b2fde46">FairMQChannel</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> std::string&amp; type, <span class="keyword">const</span> std::string&amp; method, <span class="keyword">const</span> std::string&amp; address, std::shared_ptr&lt;FairMQTransportFactory&gt; factory);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classFairMQChannel.html#ab681571de3ef6c1021b7981054d152f0">FairMQChannel</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keywordtype">int</span> index, <span class="keyword">const</span> fair::mq::Properties&amp; properties);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classFairMQChannel.html#ab681571de3ef6c1021b7981054d152f0">FairMQChannel</a>(<span class="keyword">const</span> <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp;);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a837dbc5a66b93e002f430857c7695efe"> 72</a></span>&#160; <a class="code" href="classFairMQChannel.html#a837dbc5a66b93e002f430857c7695efe">FairMQChannel</a>(<span class="keyword">const</span> <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp;, <span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="comment">// FairMQChannel(FairMQChannel&amp;&amp;) = delete;</span></div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; <a class="code" href="classFairMQChannel.html#a04a9ac897488b2a4a5176b86f5e74483">operator=</a>(<span class="keyword">const</span> <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp;);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="comment">// FairMQChannel&amp; operator=(FairMQChannel&amp;&amp;) = delete;</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"><a class="line" href="classFairMQChannel.html#a9f4ffef546b24680daf6d5f40efc848f"> 84</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classFairMQChannel.html#a9f4ffef546b24680daf6d5f40efc848f">~FairMQChannel</a>() { <span class="comment">/* LOG(warn) &lt;&lt; &quot;Destroying channel &#39;&quot; &lt;&lt; fName &lt;&lt; &quot;&#39;&quot;; */</span> }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="structFairMQChannel_1_1ChannelConfigurationError.html"> 86</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structFairMQChannel_1_1ChannelConfigurationError.html">ChannelConfigurationError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classFairMQSocket.html">FairMQSocket</a>&amp; GetSocket()<span class="keyword"> const </span>{ assert(fSocket); <span class="keywordflow">return</span> *fSocket; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">bool</span> Bind(<span class="keyword">const</span> std::string&amp; address)</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; fMethod = <span class="stringliteral">&quot;bind&quot;</span>;</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; fAddress = address;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Bind(address);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordtype">bool</span> Connect(<span class="keyword">const</span> std::string&amp; address)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; fMethod = <span class="stringliteral">&quot;connect&quot;</span>;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; fAddress = address;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Connect(address);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a9009e62346f999fbdbd79c82cdf3820c"> 106</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a9009e62346f999fbdbd79c82cdf3820c">GetName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fName; }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a5bd5adc3c59f7606e0e868a0f17e28f5"> 110</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a5bd5adc3c59f7606e0e868a0f17e28f5">GetPrefix</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; std::string prefix = fName;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; prefix = prefix.erase(fName.rfind(<span class="charliteral">&#39;[&#39;</span>));</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> prefix;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</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"><a class="line" href="classFairMQChannel.html#a8d6933d4d73d8fb9e18cf63800b1d8df"> 119</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a8d6933d4d73d8fb9e18cf63800b1d8df">GetIndex</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; std::string indexStr = fName;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; indexStr.erase(indexStr.rfind(<span class="charliteral">&#39;]&#39;</span>));</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; indexStr.erase(0, indexStr.rfind(<span class="charliteral">&#39;[&#39;</span>) + 1);</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> indexStr;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; }</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ac7b933be2f610691dc24439d0d269383"> 129</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#ac7b933be2f610691dc24439d0d269383">GetType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fType; }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a314c4760f1c420baed3d379a9da1041d"> 133</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a314c4760f1c420baed3d379a9da1041d">GetMethod</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fMethod; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a4b68f42e263c0666e6bcc01c2e63c384"> 137</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a4b68f42e263c0666e6bcc01c2e63c384">GetAddress</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fAddress; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a1521eb8016da9ffcb4b159423f8e971d"> 141</a></span>&#160; std::string <a class="code" href="classFairMQChannel.html#a1521eb8016da9ffcb4b159423f8e971d">GetTransportName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fair::mq::TransportName(fTransportType); }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a5f4210c9b05f5b38c2549bf2e65b7c45"> 145</a></span>&#160; fair::mq::Transport <a class="code" href="classFairMQChannel.html#a5f4210c9b05f5b38c2549bf2e65b7c45">GetTransportType</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fTransportType; }</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
<div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ae597404d6fe4209855e44bda8ee9a298"> 149</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#ae597404d6fe4209855e44bda8ee9a298">GetSndBufSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSndBufSize; }</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a7998ca57ca6842f52483103a386189a4"> 153</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#a7998ca57ca6842f52483103a386189a4">GetRcvBufSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fRcvBufSize; }</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#abc48790b56c92e1e7f71bf3a9057b8b4"> 157</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#abc48790b56c92e1e7f71bf3a9057b8b4">GetSndKernelSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSndKernelSize; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a3247b369b02586543c3c4c62b2dd1ab8"> 161</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#a3247b369b02586543c3c4c62b2dd1ab8">GetRcvKernelSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fRcvKernelSize; }</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#afbc97ff72e152db5cb4f0c63f7e00243"> 165</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#afbc97ff72e152db5cb4f0c63f7e00243">GetLinger</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fLinger; }</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#af82cb56741d214bd4db0864e34d9cae3"> 169</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#af82cb56741d214bd4db0864e34d9cae3">GetRateLogging</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fRateLogging; }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a2b3d7467e1ee3c5f052efc4ef3ba09d3"> 173</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#a2b3d7467e1ee3c5f052efc4ef3ba09d3">GetPortRangeMin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPortRangeMin; }</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a24199032d2bb90271517e82adfebb45d"> 177</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQChannel.html#a24199032d2bb90271517e82adfebb45d">GetPortRangeMax</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPortRangeMax; }</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ae4f8bc56c89538dbd7833f8bd5f2d0d2"> 181</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQChannel.html#ae4f8bc56c89538dbd7833f8bd5f2d0d2">GetAutoBind</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fAutoBind; }</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a7dd6f31b095b15a4624045ac259563ca"> 185</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a7dd6f31b095b15a4624045ac259563ca">UpdateName</a>(<span class="keyword">const</span> std::string&amp; name) { fName = name; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#af9454c7d2ec6950764f3834158379e9b"> 189</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#af9454c7d2ec6950764f3834158379e9b">UpdateType</a>(<span class="keyword">const</span> std::string&amp; type) { fType = type; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ac67be0a888fb0ffa61633d28a5c37d18"> 193</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#ac67be0a888fb0ffa61633d28a5c37d18">UpdateMethod</a>(<span class="keyword">const</span> std::string&amp; method) { fMethod = method; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a015422384ffb47e8b9c667006a2dff60"> 197</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a015422384ffb47e8b9c667006a2dff60">UpdateAddress</a>(<span class="keyword">const</span> std::string&amp; address) { fAddress = address; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a9dc3e2a4a3b3f02be98e2b4e5053a258"> 201</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a9dc3e2a4a3b3f02be98e2b4e5053a258">UpdateTransport</a>(<span class="keyword">const</span> std::string&amp; transport) { fTransportType = fair::mq::TransportType(transport); <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a041eafc10c70fa73bceaa10644db3e6c"> 205</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a041eafc10c70fa73bceaa10644db3e6c">UpdateSndBufSize</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> sndBufSize) { fSndBufSize = sndBufSize; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#aa0e59f516d68cdf82b8c4f6150624a0e"> 209</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#aa0e59f516d68cdf82b8c4f6150624a0e">UpdateRcvBufSize</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> rcvBufSize) { fRcvBufSize = rcvBufSize; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ac74bc8cbda6e2f7b50dd8c7b8643b9d5"> 213</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#ac74bc8cbda6e2f7b50dd8c7b8643b9d5">UpdateSndKernelSize</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> sndKernelSize) { fSndKernelSize = sndKernelSize; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a10e21a697526a8d07cb30e54ce77d675"> 217</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a10e21a697526a8d07cb30e54ce77d675">UpdateRcvKernelSize</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> rcvKernelSize) { fRcvKernelSize = rcvKernelSize; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ad077c46bafdaba0a7792458b41600571"> 221</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#ad077c46bafdaba0a7792458b41600571">UpdateLinger</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> duration) { fLinger = duration; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a2202995e3281a8bc8fdee10c47ff52c4"> 225</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a2202995e3281a8bc8fdee10c47ff52c4">UpdateRateLogging</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> rateLogging) { fRateLogging = rateLogging; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a633ae618067a1b02280fb16cf4117b70"> 229</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a633ae618067a1b02280fb16cf4117b70">UpdatePortRangeMin</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> minPort) { fPortRangeMin = minPort; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a7dc046299bc2a31135cf170f9952a1a2"> 233</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#a7dc046299bc2a31135cf170f9952a1a2">UpdatePortRangeMax</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> maxPort) { fPortRangeMax = maxPort; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00237"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#af84f328394d7a2c8ac4252e8aa9c0c69"> 237</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#af84f328394d7a2c8ac4252e8aa9c0c69">UpdateAutoBind</a>(<span class="keyword">const</span> <span class="keywordtype">bool</span> autobind) { fAutoBind = autobind; <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>(); }</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; </div>
<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#ae03deb5cf1ac72f7bcd492e1ebd9b8e7"> 241</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQChannel.html#ae03deb5cf1ac72f7bcd492e1ebd9b8e7">IsValid</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fValid; }</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQChannel.html#ab9a7fdf4097c67e4480d7f8dc5f88f8f">Validate</a>();</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; </div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">void</span> Init();</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; </div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">bool</span> ConnectEndpoint(<span class="keyword">const</span> std::string&amp; endpoint);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">bool</span> BindEndpoint(std::string&amp; endpoint);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
<div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266"> 254</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>() { fValid = <span class="keyword">false</span>; }</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d"> 260</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> sndTimeoutInMs = -1)</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; CheckSendCompatibility(msg);</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Send(msg, sndTimeoutInMs);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75"> 270</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> rcvTimeoutInMs = -1)</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; {</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; CheckReceiveCompatibility(msg);</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Receive(msg, rcvTimeoutInMs);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; </div>
<div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#af41430efc6cb963f57c861c1019b64f1"> 280</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#af41430efc6cb963f57c861c1019b64f1">Send</a>(std::vector&lt;FairMQMessagePtr&gt;&amp; msgVec, <span class="keywordtype">int</span> sndTimeoutInMs = -1)</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; {</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; CheckSendCompatibility(msgVec);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Send(msgVec, sndTimeoutInMs);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; }</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
<div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a260e3826ad87f232f978a00a6a3654cc"> 290</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#a260e3826ad87f232f978a00a6a3654cc">Receive</a>(std::vector&lt;FairMQMessagePtr&gt;&amp; msgVec, <span class="keywordtype">int</span> rcvTimeoutInMs = -1)</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; CheckReceiveCompatibility(msgVec);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> fSocket-&gt;Receive(msgVec, rcvTimeoutInMs);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a190b3a16e9320c6c49e349bca4bf70ef"> 300</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#a190b3a16e9320c6c49e349bca4bf70ef">Send</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keywordtype">int</span> sndTimeoutInMs = -1)</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; <span class="keywordflow">return</span> <a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(parts.fParts, sndTimeoutInMs);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
<div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="classFairMQChannel.html#a0a58c080d525b7e2e57cbb55a49c1c22"> 309</a></span>&#160; int64_t <a class="code" href="classFairMQChannel.html#a0a58c080d525b7e2e57cbb55a49c1c22">Receive</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keywordtype">int</span> rcvTimeoutInMs = -1)</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(parts.fParts, rcvTimeoutInMs);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetBytesTx()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSocket-&gt;GetBytesTx(); }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetBytesRx()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSocket-&gt;GetBytesRx(); }</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetMessagesTx()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSocket-&gt;GetMessagesTx(); }</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetMessagesRx()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSocket-&gt;GetMessagesRx(); }</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">auto</span> Transport() -&gt; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* { <span class="keywordflow">return</span> fTransportFactory.get(); };</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; FairMQMessagePtr NewMessage(Args&amp;&amp;... args)</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="keywordflow">return</span> Transport()-&gt;CreateMessage(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; FairMQMessagePtr NewSimpleMessage(<span class="keyword">const</span> T&amp; data)</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="keywordflow">return</span> Transport()-&gt;NewSimpleMessage(data);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; </div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; FairMQMessagePtr NewStaticMessage(<span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> Transport()-&gt;NewStaticMessage(data);</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; </div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; FairMQUnmanagedRegionPtr NewUnmanagedRegion(Args&amp;&amp;... args)</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">return</span> Transport()-&gt;CreateUnmanagedRegion(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">static</span> constexpr fair::mq::Transport DefaultTransportType = fair::mq::Transport::DEFAULT;</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultTransportName = <span class="stringliteral">&quot;default&quot;</span>;</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultName = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultType = <span class="stringliteral">&quot;unspecified&quot;</span>;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultMethod = <span class="stringliteral">&quot;unspecified&quot;</span>;</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultAddress = <span class="stringliteral">&quot;unspecified&quot;</span>;</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultSndBufSize = 1000;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultRcvBufSize = 1000;</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultSndKernelSize = 0;</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultRcvKernelSize = 0;</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultLinger = 500;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultRateLogging = 1;</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultPortRangeMin = 22000;</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultPortRangeMax = 23000;</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">bool</span> DefaultAutoBind = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; std::shared_ptr&lt;FairMQTransportFactory&gt; fTransportFactory;</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; fair::mq::Transport fTransportType;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; std::unique_ptr&lt;FairMQSocket&gt; fSocket;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; </div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; std::string fName;</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; std::string fType;</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; std::string fMethod;</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; std::string fAddress;</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keywordtype">int</span> fSndBufSize;</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keywordtype">int</span> fRcvBufSize;</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keywordtype">int</span> fSndKernelSize;</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordtype">int</span> fRcvKernelSize;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordtype">int</span> fLinger;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <span class="keywordtype">int</span> fRateLogging;</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordtype">int</span> fPortRangeMin;</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordtype">int</span> fPortRangeMax;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">bool</span> fAutoBind;</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; </div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">bool</span> fValid;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; </div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordtype">bool</span> fMultipart;</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="keywordtype">void</span> CheckSendCompatibility(FairMQMessagePtr&amp; msg)</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (fTransportType != msg-&gt;GetType()) {</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; FairMQMessagePtr msgWrapper(NewMessage(</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; msg-&gt;GetData(),</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; msg-&gt;GetSize(),</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; [](<span class="keywordtype">void</span>* <span class="comment">/*data*/</span>, <span class="keywordtype">void</span>* _msg) { delete static_cast&lt;FairMQMessage*&gt;(_msg); },</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; msg.get()</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; ));</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; msg.release();</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; msg = move(msgWrapper);</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; }</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="keywordtype">void</span> CheckSendCompatibility(std::vector&lt;FairMQMessagePtr&gt;&amp; msgVec)</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; msg : msgVec) {</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (fTransportType != msg-&gt;GetType()) {</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; </div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; FairMQMessagePtr msgWrapper(NewMessage(</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; msg-&gt;GetData(),</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; msg-&gt;GetSize(),</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; [](<span class="keywordtype">void</span>* <span class="comment">/*data*/</span>, <span class="keywordtype">void</span>* _msg) { delete static_cast&lt;FairMQMessage*&gt;(_msg); },</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; msg.get()</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; msg.release();</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; msg = move(msgWrapper);</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; }</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; </div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">void</span> CheckReceiveCompatibility(FairMQMessagePtr&amp; msg)</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; {</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordflow">if</span> (fTransportType != msg-&gt;GetType()) {</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; FairMQMessagePtr newMsg(NewMessage());</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; msg = move(newMsg);</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordtype">void</span> CheckReceiveCompatibility(std::vector&lt;FairMQMessagePtr&gt;&amp; msgVec)</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; msg : msgVec) {</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">if</span> (fTransportType != msg-&gt;GetType()) {</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; </div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; FairMQMessagePtr newMsg(NewMessage());</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; msg = move(newMsg);</div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; }</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; }</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="keywordtype">void</span> InitTransport(std::shared_ptr&lt;FairMQTransportFactory&gt; factory)</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; {</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; fTransportFactory = factory;</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; fTransportType = factory-&gt;GetType();</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;};</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; </div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQCHANNEL_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQChannel_html_a7dc046299bc2a31135cf170f9952a1a2"><div class="ttname"><a href="classFairMQChannel.html#a7dc046299bc2a31135cf170f9952a1a2">FairMQChannel::UpdatePortRangeMax</a></div><div class="ttdeci">void UpdatePortRangeMax(const int maxPort)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:233</div></div>
<div class="ttc" id="aclassFairMQSocket_html"><div class="ttname"><a href="classFairMQSocket.html">FairMQSocket</a></div><div class="ttdef"><b>Definition:</b> FairMQSocket.h:36</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a837dbc5a66b93e002f430857c7695efe"><div class="ttname"><a href="classFairMQChannel.html#a837dbc5a66b93e002f430857c7695efe">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel(const FairMQChannel &amp;, const std::string &amp;name)</div><div class="ttdoc">Copy Constructor (with new name)</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a9f4ffef546b24680daf6d5f40efc848f"><div class="ttname"><a href="classFairMQChannel.html#a9f4ffef546b24680daf6d5f40efc848f">FairMQChannel::~FairMQChannel</a></div><div class="ttdeci">virtual ~FairMQChannel()</div><div class="ttdoc">Move assignment operator.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:84</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ab9a7fdf4097c67e4480d7f8dc5f88f8f"><div class="ttname"><a href="classFairMQChannel.html#ab9a7fdf4097c67e4480d7f8dc5f88f8f">FairMQChannel::Validate</a></div><div class="ttdeci">bool Validate()</div><div class="ttdef"><b>Definition:</b> FairMQChannel.cxx:163</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a5f4210c9b05f5b38c2549bf2e65b7c45"><div class="ttname"><a href="classFairMQChannel.html#a5f4210c9b05f5b38c2549bf2e65b7c45">FairMQChannel::GetTransportType</a></div><div class="ttdeci">fair::mq::Transport GetTransportType() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:145</div></div>
<div class="ttc" id="aclassFairMQChannel_html_afbc97ff72e152db5cb4f0c63f7e00243"><div class="ttname"><a href="classFairMQChannel.html#afbc97ff72e152db5cb4f0c63f7e00243">FairMQChannel::GetLinger</a></div><div class="ttdeci">int GetLinger() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:165</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a8d6933d4d73d8fb9e18cf63800b1d8df"><div class="ttname"><a href="classFairMQChannel.html#a8d6933d4d73d8fb9e18cf63800b1d8df">FairMQChannel::GetIndex</a></div><div class="ttdeci">std::string GetIndex() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:119</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a190b3a16e9320c6c49e349bca4bf70ef"><div class="ttname"><a href="classFairMQChannel.html#a190b3a16e9320c6c49e349bca4bf70ef">FairMQChannel::Send</a></div><div class="ttdeci">int64_t Send(FairMQParts &amp;parts, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:300</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a4b68f42e263c0666e6bcc01c2e63c384"><div class="ttname"><a href="classFairMQChannel.html#a4b68f42e263c0666e6bcc01c2e63c384">FairMQChannel::GetAddress</a></div><div class="ttdeci">std::string GetAddress() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:137</div></div>
<div class="ttc" id="astructFairMQChannel_1_1ChannelConfigurationError_html"><div class="ttname"><a href="structFairMQChannel_1_1ChannelConfigurationError.html">FairMQChannel::ChannelConfigurationError</a></div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:86</div></div>
<div class="ttc" id="aclassFairMQChannel_html_af84f328394d7a2c8ac4252e8aa9c0c69"><div class="ttname"><a href="classFairMQChannel.html#af84f328394d7a2c8ac4252e8aa9c0c69">FairMQChannel::UpdateAutoBind</a></div><div class="ttdeci">void UpdateAutoBind(const bool autobind)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:237</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a10e21a697526a8d07cb30e54ce77d675"><div class="ttname"><a href="classFairMQChannel.html#a10e21a697526a8d07cb30e54ce77d675">FairMQChannel::UpdateRcvKernelSize</a></div><div class="ttdeci">void UpdateRcvKernelSize(const int rcvKernelSize)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:217</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a015422384ffb47e8b9c667006a2dff60"><div class="ttname"><a href="classFairMQChannel.html#a015422384ffb47e8b9c667006a2dff60">FairMQChannel::UpdateAddress</a></div><div class="ttdeci">void UpdateAddress(const std::string &amp;address)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:197</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a1521eb8016da9ffcb4b159423f8e971d"><div class="ttname"><a href="classFairMQChannel.html#a1521eb8016da9ffcb4b159423f8e971d">FairMQChannel::GetTransportName</a></div><div class="ttdeci">std::string GetTransportName() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:141</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ae4f8bc56c89538dbd7833f8bd5f2d0d2"><div class="ttname"><a href="classFairMQChannel.html#ae4f8bc56c89538dbd7833f8bd5f2d0d2">FairMQChannel::GetAutoBind</a></div><div class="ttdeci">bool GetAutoBind() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:181</div></div>
<div class="ttc" id="aclassFairMQChannel_html_af82cb56741d214bd4db0864e34d9cae3"><div class="ttname"><a href="classFairMQChannel.html#af82cb56741d214bd4db0864e34d9cae3">FairMQChannel::GetRateLogging</a></div><div class="ttdeci">int GetRateLogging() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:169</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a5bd5adc3c59f7606e0e868a0f17e28f5"><div class="ttname"><a href="classFairMQChannel.html#a5bd5adc3c59f7606e0e868a0f17e28f5">FairMQChannel::GetPrefix</a></div><div class="ttdeci">std::string GetPrefix() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:110</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a2202995e3281a8bc8fdee10c47ff52c4"><div class="ttname"><a href="classFairMQChannel.html#a2202995e3281a8bc8fdee10c47ff52c4">FairMQChannel::UpdateRateLogging</a></div><div class="ttdeci">void UpdateRateLogging(const int rateLogging)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:225</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a1f040835106f6b4fa735ca3d57491f75"><div class="ttname"><a href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">FairMQChannel::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:270</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a8be266eb34c0aa683674570866a7804d"><div class="ttname"><a href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">FairMQChannel::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:260</div></div>
<div class="ttc" id="aclassFairMQChannel_html_aa5ea97bb9ebfe53796b3e59e18ec2266"><div class="ttname"><a href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">FairMQChannel::Invalidate</a></div><div class="ttdeci">void Invalidate()</div><div class="ttdoc">invalidates the channel (requires validation to be used again).</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:254</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a3247b369b02586543c3c4c62b2dd1ab8"><div class="ttname"><a href="classFairMQChannel.html#a3247b369b02586543c3c4c62b2dd1ab8">FairMQChannel::GetRcvKernelSize</a></div><div class="ttdeci">int GetRcvKernelSize() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:161</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ac67be0a888fb0ffa61633d28a5c37d18"><div class="ttname"><a href="classFairMQChannel.html#ac67be0a888fb0ffa61633d28a5c37d18">FairMQChannel::UpdateMethod</a></div><div class="ttdeci">void UpdateMethod(const std::string &amp;method)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:193</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a9dc3e2a4a3b3f02be98e2b4e5053a258"><div class="ttname"><a href="classFairMQChannel.html#a9dc3e2a4a3b3f02be98e2b4e5053a258">FairMQChannel::UpdateTransport</a></div><div class="ttdeci">void UpdateTransport(const std::string &amp;transport)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:201</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ae597404d6fe4209855e44bda8ee9a298"><div class="ttname"><a href="classFairMQChannel.html#ae597404d6fe4209855e44bda8ee9a298">FairMQChannel::GetSndBufSize</a></div><div class="ttdeci">int GetSndBufSize() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:149</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ad077c46bafdaba0a7792458b41600571"><div class="ttname"><a href="classFairMQChannel.html#ad077c46bafdaba0a7792458b41600571">FairMQChannel::UpdateLinger</a></div><div class="ttdeci">void UpdateLinger(const int duration)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:221</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a0c44e61cd9e8153c7a0ed5903d2949c4"><div class="ttname"><a href="classFairMQChannel.html#a0c44e61cd9e8153c7a0ed5903d2949c4">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel(const std::string &amp;name, const std::string &amp;type, std::shared_ptr&lt; FairMQTransportFactory &gt; factory)</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a041eafc10c70fa73bceaa10644db3e6c"><div class="ttname"><a href="classFairMQChannel.html#a041eafc10c70fa73bceaa10644db3e6c">FairMQChannel::UpdateSndBufSize</a></div><div class="ttdeci">void UpdateSndBufSize(const int sndBufSize)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:205</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ac74bc8cbda6e2f7b50dd8c7b8643b9d5"><div class="ttname"><a href="classFairMQChannel.html#ac74bc8cbda6e2f7b50dd8c7b8643b9d5">FairMQChannel::UpdateSndKernelSize</a></div><div class="ttdeci">void UpdateSndKernelSize(const int sndKernelSize)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:213</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a0a58c080d525b7e2e57cbb55a49c1c22"><div class="ttname"><a href="classFairMQChannel.html#a0a58c080d525b7e2e57cbb55a49c1c22">FairMQChannel::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQParts &amp;parts, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:309</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a7dd6f31b095b15a4624045ac259563ca"><div class="ttname"><a href="classFairMQChannel.html#a7dd6f31b095b15a4624045ac259563ca">FairMQChannel::UpdateName</a></div><div class="ttdeci">void UpdateName(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:185</div></div>
<div class="ttc" id="aclassFairMQChannel_html_aa0e59f516d68cdf82b8c4f6150624a0e"><div class="ttname"><a href="classFairMQChannel.html#aa0e59f516d68cdf82b8c4f6150624a0e">FairMQChannel::UpdateRcvBufSize</a></div><div class="ttdeci">void UpdateRcvBufSize(const int rcvBufSize)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:209</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a04a9ac897488b2a4a5176b86f5e74483"><div class="ttname"><a href="classFairMQChannel.html#a04a9ac897488b2a4a5176b86f5e74483">FairMQChannel::operator=</a></div><div class="ttdeci">FairMQChannel &amp; operator=(const FairMQChannel &amp;)</div><div class="ttdoc">Move constructor.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.cxx:135</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ae03deb5cf1ac72f7bcd492e1ebd9b8e7"><div class="ttname"><a href="classFairMQChannel.html#ae03deb5cf1ac72f7bcd492e1ebd9b8e7">FairMQChannel::IsValid</a></div><div class="ttdeci">bool IsValid() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:241</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ac7b933be2f610691dc24439d0d269383"><div class="ttname"><a href="classFairMQChannel.html#ac7b933be2f610691dc24439d0d269383">FairMQChannel::GetType</a></div><div class="ttdeci">std::string GetType() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:129</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a9c411019f1ee1d0dcc9960ec5b2fde46"><div class="ttname"><a href="classFairMQChannel.html#a9c411019f1ee1d0dcc9960ec5b2fde46">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel(const std::string &amp;name, const std::string &amp;type, const std::string &amp;method, const std::string &amp;address, std::shared_ptr&lt; FairMQTransportFactory &gt; factory)</div></div>
<div class="ttc" id="aclassFairMQChannel_html_abc48790b56c92e1e7f71bf3a9057b8b4"><div class="ttname"><a href="classFairMQChannel.html#abc48790b56c92e1e7f71bf3a9057b8b4">FairMQChannel::GetSndKernelSize</a></div><div class="ttdeci">int GetSndKernelSize() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:157</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a3223d192c795abb3f357df5883dd67f5"><div class="ttname"><a href="classFairMQChannel.html#a3223d192c795abb3f357df5883dd67f5">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel(const std::string &amp;type, const std::string &amp;method, const std::string &amp;address)</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a260e3826ad87f232f978a00a6a3654cc"><div class="ttname"><a href="classFairMQChannel.html#a260e3826ad87f232f978a00a6a3654cc">FairMQChannel::Receive</a></div><div class="ttdeci">int64_t Receive(std::vector&lt; FairMQMessagePtr &gt; &amp;msgVec, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:290</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a24199032d2bb90271517e82adfebb45d"><div class="ttname"><a href="classFairMQChannel.html#a24199032d2bb90271517e82adfebb45d">FairMQChannel::GetPortRangeMax</a></div><div class="ttdeci">int GetPortRangeMax() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:177</div></div>
<div class="ttc" id="aclassFairMQChannel_html_acf2763fbdad18f5551ec7a3eb4e09829"><div class="ttname"><a href="classFairMQChannel.html#acf2763fbdad18f5551ec7a3eb4e09829">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel(const std::string &amp;name)</div></div>
<div class="ttc" id="aclassFairMQChannel_html_af41430efc6cb963f57c861c1019b64f1"><div class="ttname"><a href="classFairMQChannel.html#af41430efc6cb963f57c861c1019b64f1">FairMQChannel::Send</a></div><div class="ttdeci">int64_t Send(std::vector&lt; FairMQMessagePtr &gt; &amp;msgVec, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:280</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a2b3d7467e1ee3c5f052efc4ef3ba09d3"><div class="ttname"><a href="classFairMQChannel.html#a2b3d7467e1ee3c5f052efc4ef3ba09d3">FairMQChannel::GetPortRangeMin</a></div><div class="ttdeci">int GetPortRangeMin() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:173</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a633ae618067a1b02280fb16cf4117b70"><div class="ttname"><a href="classFairMQChannel.html#a633ae618067a1b02280fb16cf4117b70">FairMQChannel::UpdatePortRangeMin</a></div><div class="ttdeci">void UpdatePortRangeMin(const int minPort)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:229</div></div>
<div class="ttc" id="aclassFairMQChannel_html_ab681571de3ef6c1021b7981054d152f0"><div class="ttname"><a href="classFairMQChannel.html#ab681571de3ef6c1021b7981054d152f0">FairMQChannel::FairMQChannel</a></div><div class="ttdeci">FairMQChannel()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.cxx:51</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a314c4760f1c420baed3d379a9da1041d"><div class="ttname"><a href="classFairMQChannel.html#a314c4760f1c420baed3d379a9da1041d">FairMQChannel::GetMethod</a></div><div class="ttdeci">std::string GetMethod() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:133</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<div class="ttc" id="aclassFairMQChannel_html_af9454c7d2ec6950764f3834158379e9b"><div class="ttname"><a href="classFairMQChannel.html#af9454c7d2ec6950764f3834158379e9b">FairMQChannel::UpdateType</a></div><div class="ttdeci">void UpdateType(const std::string &amp;type)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:189</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a9009e62346f999fbdbd79c82cdf3820c"><div class="ttname"><a href="classFairMQChannel.html#a9009e62346f999fbdbd79c82cdf3820c">FairMQChannel::GetName</a></div><div class="ttdeci">std::string GetName() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:106</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a7998ca57ca6842f52483103a386189a4"><div class="ttname"><a href="classFairMQChannel.html#a7998ca57ca6842f52483103a386189a4">FairMQChannel::GetRcvBufSize</a></div><div class="ttdeci">int GetRcvBufSize() const</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:153</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,592 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQDevice.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQDevice.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2012-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQDEVICE_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQDEVICE_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;StateMachine.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;FairMQTransportFactory.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/Transports.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/StateQueue.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;FairMQChannel.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;FairMQMessage.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;FairMQParts.h&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;FairMQUnmanagedRegion.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptions.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// unique_ptr</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// find</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Version.h&gt;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">using</span> FairMQChannelMap = std::unordered_map&lt;std::string, std::vector&lt;FairMQChannel&gt;&gt;;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">using</span> InputMsgCallback = std::function&lt;bool(FairMQMessagePtr&amp;, <span class="keywordtype">int</span>)&gt;;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">using</span> InputMultipartCallback = std::function&lt;bool(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp;, <span class="keywordtype">int</span>)&gt;;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1OngoingTransition.html"> 46</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1OngoingTransition.html">OngoingTransition</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;}</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classFairMQDevice.html"> 49</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classFairMQChannel.html">FairMQChannel</a>;</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="keyword">public</span>:</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <a class="code" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>(<a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>&amp; config);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version);</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>(<a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>&amp; config, <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version);</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>(<a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>* config, <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe"> 70</a></span>&#160; <a class="code" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a>(<span class="keyword">const</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd"> 72</a></span>&#160; <a class="code" href="classFairMQDevice.html">FairMQDevice</a> <a class="code" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a>(<span class="keyword">const</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a>();</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a>();</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Serializer, <span class="keyword">typename</span> DataType, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordtype">void</span> Serialize(<a class="code" href="classFairMQMessage.html">FairMQMessage</a>&amp; msg, DataType&amp;&amp; data, Args&amp;&amp;... args)<span class="keyword"> const</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; Serializer().Serialize(msg, std::forward&lt;DataType&gt;(data), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Deserializer, <span class="keyword">typename</span> DataType, <span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">void</span> Deserialize(<a class="code" href="classFairMQMessage.html">FairMQMessage</a>&amp; msg, DataType&amp;&amp; data, Args&amp;&amp;... args)<span class="keyword"> const</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; Deserializer().Deserialize(msg, std::forward&lt;DataType&gt;(data), std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2"> 97</a></span>&#160; int64_t <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(FairMQMessagePtr&amp; msg, <span class="keyword">const</span> std::string&amp; channel, <span class="keyword">const</span> <span class="keywordtype">int</span> index = 0, <span class="keywordtype">int</span> sndTimeoutInMs = -1)</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).<a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(msg, sndTimeoutInMs);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f"> 108</a></span>&#160; int64_t <a class="code" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(FairMQMessagePtr&amp; msg, <span class="keyword">const</span> std::string&amp; channel, <span class="keyword">const</span> <span class="keywordtype">int</span> index = 0, <span class="keywordtype">int</span> rcvTimeoutInMs = -1)</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).<a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(msg, rcvTimeoutInMs);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55"> 119</a></span>&#160; int64_t <a class="code" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keyword">const</span> std::string&amp; channel, <span class="keyword">const</span> <span class="keywordtype">int</span> index = 0, <span class="keywordtype">int</span> sndTimeoutInMs = -1)</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).<a class="code" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(parts.fParts, sndTimeoutInMs);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54"> 130</a></span>&#160; int64_t <a class="code" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keyword">const</span> std::string&amp; channel, <span class="keyword">const</span> <span class="keywordtype">int</span> index = 0, <span class="keywordtype">int</span> rcvTimeoutInMs = -1)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).<a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(parts.fParts, rcvTimeoutInMs);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c"> 136</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>() const -&gt; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>*</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>.get();</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="comment">// creates message with the default device transport</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; FairMQMessagePtr NewMessage(Args&amp;&amp;... args)</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; {</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>()-&gt;CreateMessage(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// creates message with the transport of the specified channel</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; FairMQMessagePtr NewMessageFor(<span class="keyword">const</span> std::string&amp; channel, <span class="keywordtype">int</span> index, Args&amp;&amp;... args)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).NewMessage(std::forward&lt;Args&gt;(args)...);</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="l00155"></a><span class="lineno"> 155</span>&#160; <span class="comment">// creates a message that will not be cleaned up after transfer, with the default device transport</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; FairMQMessagePtr NewStaticMessage(<span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>()-&gt;NewStaticMessage(data);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="comment">// creates a message that will not be cleaned up after transfer, with the transport of the specified channel</span></div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; FairMQMessagePtr NewStaticMessageFor(<span class="keyword">const</span> std::string&amp; channel, <span class="keywordtype">int</span> index, <span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).NewStaticMessage(data);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// creates a message with a copy of the provided data, with the default device transport</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; FairMQMessagePtr NewSimpleMessage(<span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>()-&gt;NewSimpleMessage(data);</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="comment">// creates a message with a copy of the provided data, with the transport of the specified channel</span></div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; FairMQMessagePtr NewSimpleMessageFor(<span class="keyword">const</span> std::string&amp; channel, <span class="keywordtype">int</span> index, <span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).NewSimpleMessage(data);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; }</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="comment">// creates unamanaged region with the default device transport</span></div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; FairMQUnmanagedRegionPtr NewUnmanagedRegion(Args&amp;&amp;... args)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>()-&gt;CreateUnmanagedRegion(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="comment">// creates unmanaged region with the transport of the specified channel</span></div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; FairMQUnmanagedRegionPtr NewUnmanagedRegionFor(<span class="keyword">const</span> std::string&amp; channel, <span class="keywordtype">int</span> index, Args&amp;&amp;... args)</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">return</span> GetChannel(channel, index).NewUnmanagedRegion(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> ...Ts&gt;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; FairMQPollerPtr NewPoller(<span class="keyword">const</span> Ts&amp;... inputs)</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; std::vector&lt;std::string&gt; chans{inputs...};</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="comment">// if more than one channel provided, check compatibility</span></div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (chans.size() &gt; 1)</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; {</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; fair::mq::Transport type = GetChannel(chans.at(0), 0).Transport()-&gt;GetType();</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; chans.size(); ++i)</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (type != GetChannel(chans.at(i), 0).Transport()-&gt;GetType())</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;poller failed: different transports within same poller are not yet supported. Going to ERROR state.&quot;</span>;</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;poller failed: different transports within same poller are not yet supported.&quot;</span>);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">return</span> GetChannel(chans.at(0), 0).Transport()-&gt;CreatePoller(<a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>, chans);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; FairMQPollerPtr NewPoller(<span class="keyword">const</span> std::vector&lt;FairMQChannel*&gt;&amp; channels)</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; {</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// if more than one channel provided, check compatibility</span></div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (channels.size() &gt; 1)</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; {</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; fair::mq::Transport type = channels.at(0)-&gt;Transport()-&gt;GetType();</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 1; i &lt; channels.size(); ++i)</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (type != channels.at(i)-&gt;Transport()-&gt;GetType())</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;poller failed: different transports within same poller are not yet supported. Going to ERROR state.&quot;</span>;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;poller failed: different transports within same poller are not yet supported.&quot;</span>);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</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; </div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> channels.at(0)-&gt;Transport()-&gt;CreatePoller(channels);</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="l00242"></a><span class="lineno"> 242</span>&#160; std::shared_ptr&lt;FairMQTransportFactory&gt; <a class="code" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a>(<span class="keyword">const</span> fair::mq::Transport transport);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a>(<a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>&amp; config);</div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e"> 247</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>* <a class="code" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a>()<span class="keyword"> const</span></div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; }</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// overload to easily bind member functions</span></div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordtype">void</span> OnData(<span class="keyword">const</span> std::string&amp; channelName, <span class="keywordtype">bool</span> (T::* memberFunction)(FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> index))</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; fDataCallbacks = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; fMsgInputs.insert(std::make_pair(channelName, [<span class="keyword">this</span>, memberFunction](FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> index)</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span>T*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;*memberFunction)(msg, index);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }));</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (find(fInputChannelKeys.begin(), fInputChannelKeys.end(), channelName) == fInputChannelKeys.end())</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; fInputChannelKeys.push_back(channelName);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; }</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; </div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keywordtype">void</span> OnData(<span class="keyword">const</span> std::string&amp; channelName, InputMsgCallback callback)</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; fDataCallbacks = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; fMsgInputs.insert(make_pair(channelName, callback));</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> (find(fInputChannelKeys.begin(), fInputChannelKeys.end(), channelName) == fInputChannelKeys.end())</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; fInputChannelKeys.push_back(channelName);</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="comment">// overload to easily bind member functions</span></div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordtype">void</span> OnData(<span class="keyword">const</span> std::string&amp; channelName, <span class="keywordtype">bool</span> (T::* memberFunction)(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keywordtype">int</span> index))</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; fDataCallbacks = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; fMultipartInputs.insert(std::make_pair(channelName, [<span class="keyword">this</span>, memberFunction](<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; parts, <span class="keywordtype">int</span> index)</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span>T*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;*memberFunction)(parts, index);</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; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span> (find(fInputChannelKeys.begin(), fInputChannelKeys.end(), channelName) == fInputChannelKeys.end())</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; fInputChannelKeys.push_back(channelName);</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; }</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; }</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordtype">void</span> OnData(<span class="keyword">const</span> std::string&amp; channelName, InputMultipartCallback callback)</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; fDataCallbacks = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; fMultipartInputs.insert(make_pair(channelName, callback));</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (find(fInputChannelKeys.begin(), fInputChannelKeys.end(), channelName) == fInputChannelKeys.end())</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; fInputChannelKeys.push_back(channelName);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; }</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; GetChannel(<span class="keyword">const</span> std::string&amp; channelName, <span class="keyword">const</span> <span class="keywordtype">int</span> index = 0)</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keyword">try</span> {</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(channelName).at(index);</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;requested channel has not been configured? check channel names/configuration.&quot;</span>;</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;channel: &quot;</span> &lt;&lt; channelName &lt;&lt; <span class="stringliteral">&quot;, index: &quot;</span> &lt;&lt; index;</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;out of range: &quot;</span> &lt;&lt; oor.what();</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">throw</span>;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; }</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> RegisterChannelEndpoints() {}</div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; </div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordtype">bool</span> RegisterChannelEndpoint(<span class="keyword">const</span> std::string&amp; channelName, uint16_t minNumSubChannels = 1, uint16_t maxNumSubChannels = 1)</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; {</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">bool</span> ok = fChannelRegistry.insert(std::make_pair(channelName, std::make_pair(minNumSubChannels, maxNumSubChannels))).second;</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span> (!ok) {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;Registering channel: name already registered: \&quot;&quot;</span> &lt;&lt; channelName &lt;&lt; <span class="stringliteral">&quot;\&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="keywordflow">return</span> ok;</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; }</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordtype">void</span> PrintRegisteredChannels()</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; <span class="keywordflow">if</span> (fChannelRegistry.size() &lt; 1) {</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; LOGV(info, verylow) &lt;&lt; <span class="stringliteral">&quot;no channels registered.&quot;</span>;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; c : fChannelRegistry) {</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; LOGV(info, verylow) &lt;&lt; c.first &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; c.second.first &lt;&lt; <span class="stringliteral">&quot;:&quot;</span> &lt;&lt; c.second.second;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; }</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; </div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordtype">void</span> SetId(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>) { <a class="code" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a> = id; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; std::string GetId() { <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a>; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> GetVersion()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fVersion; }</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; </div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keywordtype">void</span> SetNumIoThreads(<span class="keywordtype">int</span> numIoThreads) { <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="stringliteral">&quot;io-threads&quot;</span>, numIoThreads);}</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordtype">int</span> GetNumIoThreads()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;io-threads&quot;</span>, DefaultIOThreads); }</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; </div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="keywordtype">void</span> SetNetworkInterface(<span class="keyword">const</span> std::string&amp; networkInterface) { <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="stringliteral">&quot;network-interface&quot;</span>, networkInterface); }</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; std::string GetNetworkInterface()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;network-interface&quot;</span>, DefaultNetworkInterface); }</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keywordtype">void</span> SetDefaultTransport(<span class="keyword">const</span> std::string&amp; name) { <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="stringliteral">&quot;transport&quot;</span>, name); }</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; std::string GetDefaultTransport()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;transport&quot;</span>, DefaultTransportName); }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; </div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordtype">void</span> SetInitTimeoutInS(<span class="keywordtype">int</span> initTimeoutInS) { <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="stringliteral">&quot;init-timeout&quot;</span>, initTimeoutInS); }</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordtype">int</span> GetInitTimeoutInS()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">int</span>&gt;(<span class="stringliteral">&quot;init-timeout&quot;</span>, DefaultInitTimeout); }</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
<div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf"> 357</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a>(<span class="keyword">const</span> std::string&amp; transport) { <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="stringliteral">&quot;transport&quot;</span>, transport); }</div>
<div class="line"><a name="l00359"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a"> 359</a></span>&#160; std::string <a class="code" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;transport&quot;</span>, DefaultTransportName); }</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">void</span> SetRawCmdLineArgs(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; args) { fRawCmdLineArgs = args; }</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; std::vector&lt;std::string&gt; GetRawCmdLineArgs()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fRawCmdLineArgs; }</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; <span class="keywordtype">void</span> RunStateMachine()</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; fStateMachine.ProcessWork();</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; };</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Rep, <span class="keyword">typename</span> Period&gt;</div>
<div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4"> 373</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a>(std::chrono::duration&lt;Rep, Period&gt; <span class="keyword">const</span>&amp; duration)</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="keywordflow">return</span> !fStateMachine.WaitForPendingStateFor(std::chrono::duration_cast&lt;std::chrono::milliseconds&gt;(duration).count());</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0"> 379</a></span>&#160; std::shared_ptr&lt;FairMQTransportFactory&gt; <a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>; </div>
<div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b"> 380</a></span>&#160; std::unordered_map&lt;fair::mq::Transport, std::shared_ptr&lt;FairMQTransportFactory&gt;&gt; <a class="code" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a>; </div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; </div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547"> 383</a></span>&#160; std::unordered_map&lt;std::string, std::vector&lt;FairMQChannel&gt;&gt; <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>; </div>
<div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff"> 384</a></span>&#160; std::unique_ptr&lt;fair::mq::ProgOptions&gt; <a class="code" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a>; </div>
<div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d"> 385</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>* <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>; </div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; </div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordtype">void</span> AddChannel(<span class="keyword">const</span> std::string&amp; name, <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp;&amp; channel)</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ac1e7828be92f2bb8419c26e8f5670c8c">AddChannel</a>(name, channel);</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; </div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00393"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f"> 393</a></span>&#160; std::string <a class="code" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a>; </div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; </div>
<div class="line"><a name="l00396"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818"> 396</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a>() {}</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="keyword">virtual</span> <span class="keywordtype">void</span> Bind() {}</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Connect() {}</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; </div>
<div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98"> 403</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98">InitTask</a>() {}</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
<div class="line"><a name="l00406"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e"> 406</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e">Run</a>() {}</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
<div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719"> 409</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a>() {}</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; </div>
<div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284"> 412</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a>() { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; </div>
<div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965"> 415</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a>() {}</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c"> 418</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a>() {}</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; </div>
<div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305"> 421</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a>() {}</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5"> 429</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a>(<span class="keyword">const</span> fair::mq::Transition transition) { <span class="keywordflow">return</span> fStateMachine.ChangeState(transition); }</div>
<div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea"> 435</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a>(<span class="keyword">const</span> std::string&amp; transition) { <span class="keywordflow">return</span> fStateMachine.ChangeState(fair::mq::GetTransition(transition)); }</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; </div>
<div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d"> 438</a></span>&#160; fair::mq::State <a class="code" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a>() { <span class="keywordflow">return</span> fStateQueue.WaitForNext(); }</div>
<div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206"> 441</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a>(fair::mq::State state) { fStateQueue.WaitForState(state); }</div>
<div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9"> 444</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a>(<span class="keyword">const</span> std::string&amp; state) { <a class="code" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a>(fair::mq::GetState(state)); }</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; </div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordtype">void</span> TransitionTo(<span class="keyword">const</span> fair::mq::State state);</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452"> 454</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a>(<span class="keyword">const</span> std::string&amp; key, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> fair::mq::State)&gt; callback) { fStateMachine.SubscribeToStateChange(key, callback); }</div>
<div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73"> 457</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a>(<span class="keyword">const</span> std::string&amp; key) { fStateMachine.UnsubscribeFromStateChange(key); }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; </div>
<div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4"> 464</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a>(<span class="keyword">const</span> std::string&amp; key, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> fair::mq::Transition)&gt; callback) { fStateMachine.SubscribeToNewTransition(key, callback); }</div>
<div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69"> 467</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a>(<span class="keyword">const</span> std::string&amp; key) { fStateMachine.UnsubscribeFromNewTransition(key); }</div>
<div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c"> 470</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fStateMachine.NewStatePending(); }</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; </div>
<div class="line"><a name="l00473"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd"> 473</a></span>&#160; fair::mq::State <a class="code" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fStateMachine.GetCurrentState(); }</div>
<div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9"> 475</a></span>&#160; std::string <a class="code" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fStateMachine.GetCurrentStateName(); }</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
<div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a"> 479</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a>(<span class="keyword">const</span> fair::mq::State state) { <span class="keywordflow">return</span> fair::mq::GetStateName(state); }</div>
<div class="line"><a name="l00482"></a><span class="lineno"><a class="line" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52"> 482</a></span>&#160; <span class="keyword">static</span> std::string <a class="code" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a>(<span class="keyword">const</span> fair::mq::Transition transition) { <span class="keywordflow">return</span> fair::mq::GetTransitionName(transition); }</div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; </div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultId = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultIOThreads = 1;</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultTransportName = <span class="stringliteral">&quot;zeromq&quot;</span>;</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keyword">static</span> constexpr fair::mq::Transport DefaultTransportType = fair::mq::Transport::ZMQ;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultNetworkInterface = <span class="stringliteral">&quot;default&quot;</span>;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">int</span> DefaultInitTimeout = 120;</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keyword">static</span> constexpr uint64_t DefaultMaxRunTime = 0;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">static</span> constexpr <span class="keywordtype">float</span> DefaultRate = 0.;</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keyword">static</span> constexpr <span class="keyword">const</span> <span class="keywordtype">char</span>* DefaultSession = <span class="stringliteral">&quot;default&quot;</span>;</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; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; fair::mq::Transport fDefaultTransportType; </div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="classfair_1_1mq_1_1StateMachine.html">fair::mq::StateMachine</a> fStateMachine;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordtype">void</span> InitWrapper();</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordtype">void</span> BindWrapper();</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordtype">void</span> ConnectWrapper();</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordtype">void</span> InitTaskWrapper();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordtype">void</span> RunWrapper();</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keywordtype">void</span> ResetTaskWrapper();</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordtype">void</span> ResetWrapper();</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordtype">void</span> UnblockTransports();</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; </div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordtype">void</span> Exit() {}</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; </div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordtype">void</span> AttachChannels(std::vector&lt;FairMQChannel*&gt;&amp; chans);</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordtype">bool</span> AttachChannel(<a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; ch);</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; </div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordtype">void</span> HandleSingleChannelInput();</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">void</span> HandleMultipleChannelInput();</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordtype">void</span> HandleMultipleTransportInput();</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordtype">void</span> PollForTransport(<span class="keyword">const</span> <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* factory, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; channelKeys);</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; </div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordtype">bool</span> HandleMsgInput(<span class="keyword">const</span> std::string&amp; chName, <span class="keyword">const</span> InputMsgCallback&amp; callback, <span class="keywordtype">int</span> i);</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordtype">bool</span> HandleMultipartInput(<span class="keyword">const</span> std::string&amp; chName, <span class="keyword">const</span> InputMultipartCallback&amp; callback, <span class="keywordtype">int</span> i);</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; </div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; std::vector&lt;FairMQChannel*&gt; fUninitializedBindingChannels;</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; std::vector&lt;FairMQChannel*&gt; fUninitializedConnectingChannels;</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; </div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordtype">bool</span> fDataCallbacks;</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; std::unordered_map&lt;std::string, InputMsgCallback&gt; fMsgInputs;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; std::unordered_map&lt;std::string, InputMultipartCallback&gt; fMultipartInputs;</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; std::unordered_map&lt;fair::mq::Transport, std::vector&lt;std::string&gt;&gt; fMultitransportInputs;</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; std::unordered_map&lt;std::string, std::pair&lt;uint16_t, uint16_t&gt;&gt; fChannelRegistry;</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; std::vector&lt;std::string&gt; fInputChannelKeys;</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; std::mutex fMultitransportMutex;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; std::atomic&lt;bool&gt; fMultitransportProceed;</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; </div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> fVersion;</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordtype">float</span> fRate; </div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; uint64_t fMaxRunRuntimeInS; </div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordtype">int</span> fInitializationTimeoutInS;</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::vector&lt;std::string&gt; fRawCmdLineArgs;</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; </div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="classfair_1_1mq_1_1StateQueue.html">fair::mq::StateQueue</a> fStateQueue;</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; </div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; std::mutex fTransitionMtx;</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="keywordtype">bool</span> fTransitioning;</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;};</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; </div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQDEVICE_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQDevice_html_af13f02da4e38ec68e23b7fab6677540a"><div class="ttname"><a href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">FairMQDevice::GetStateName</a></div><div class="ttdeci">static std::string GetStateName(const fair::mq::State state)</div><div class="ttdoc">Returns name of the given state as a string.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:479</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a7ba52b2fc3908c6bf1391eb5f27b03bd"><div class="ttname"><a href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">FairMQDevice::GetCurrentState</a></div><div class="ttdeci">fair::mq::State GetCurrentState() const</div><div class="ttdoc">Returns the current state.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:473</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3b90dbcf10552daab760629857e3ba3e"><div class="ttname"><a href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e">FairMQDevice::Run</a></div><div class="ttdeci">virtual void Run()</div><div class="ttdoc">Runs the device (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:406</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad35b073f8fa62d4559a1efbf38d5ded5"><div class="ttname"><a href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">FairMQDevice::ChangeState</a></div><div class="ttdeci">bool ChangeState(const fair::mq::Transition transition)</div><div class="ttdoc">Request a device state transition.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:429</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a9ca6f7041dd312096fce7d42ebd3586c"><div class="ttname"><a href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">FairMQDevice::ResetTask</a></div><div class="ttdeci">virtual void ResetTask()</div><div class="ttdoc">Resets the user task (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:418</div></div>
<div class="ttc" id="aclassFairMQDevice_html_acb7448dc5d278c6f51e3fcf7a49f367e"><div class="ttname"><a href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">FairMQDevice::GetConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * GetConfig() const</div><div class="ttdoc">Get pointer to the config.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:247</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a5b28e672fc4bdd82513fff138ff672d9"><div class="ttname"><a href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">FairMQDevice::WaitForState</a></div><div class="ttdeci">void WaitForState(const std::string &amp;state)</div><div class="ttdoc">waits for the specified state to occur</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:444</div></div>
<div class="ttc" id="aclassFairMQDevice_html_afeaaeb9cb5ce8e0ac617600af8cfee52"><div class="ttname"><a href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">FairMQDevice::GetTransitionName</a></div><div class="ttdeci">static std::string GetTransitionName(const fair::mq::Transition transition)</div><div class="ttdoc">Returns name of the given transition as a string.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:482</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a9b4c9df42a95d0e428106244a9ae5c54"><div class="ttname"><a href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">FairMQDevice::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:130</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassFairMQDevice_html_aaa9562c293ae1522975f171dfee00d69"><div class="ttname"><a href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">FairMQDevice::UnsubscribeFromNewTransition</a></div><div class="ttdeci">void UnsubscribeFromNewTransition(const std::string &amp;key)</div><div class="ttdoc">Unsubscribe from state transitions.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:467</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad88707048f53c88ef0d6848deb962284"><div class="ttname"><a href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">FairMQDevice::ConditionalRun</a></div><div class="ttdeci">virtual bool ConditionalRun()</div><div class="ttdoc">Called during RUNNING state repeatedly until it returns false or device state changes.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:412</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ac1e7828be92f2bb8419c26e8f5670c8c"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ac1e7828be92f2bb8419c26e8f5670c8c">fair::mq::ProgOptions::AddChannel</a></div><div class="ttdeci">void AddChannel(const std::string &amp;name, const FairMQChannel &amp;channel)</div><div class="ttdoc">Takes the provided channel and creates properties based on it.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:357</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQDevice_html_aa4e0098922aaf987c2a27c10f4e04fbd"><div class="ttname"><a href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">FairMQDevice::operator=</a></div><div class="ttdeci">FairMQDevice operator=(const FairMQDevice &amp;)=delete</div><div class="ttdoc">Assignment operator (disabled)</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a13141f54111f5f724b79143b4303a32f"><div class="ttname"><a href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">FairMQDevice::fId</a></div><div class="ttdeci">std::string fId</div><div class="ttdoc">Device ID.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:393</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1OngoingTransition_html"><div class="ttname"><a href="structfair_1_1mq_1_1OngoingTransition.html">fair::mq::OngoingTransition</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:46</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a2ff45ca40adf8ad8e046651f14a63f55"><div class="ttname"><a href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:119</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a9bddc6f64f9c89b8ffe3670d91c06b29"><div class="ttname"><a href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">FairMQDevice::AddTransport</a></div><div class="ttdeci">std::shared_ptr&lt; FairMQTransportFactory &gt; AddTransport(const fair::mq::Transport transport)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.cxx:653</div></div>
<div class="ttc" id="aclassFairMQDevice_html_aab6d9bd4d57360a2b85ee3dec980395c"><div class="ttname"><a href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">FairMQDevice::Transport</a></div><div class="ttdeci">auto Transport() const -&gt; FairMQTransportFactory *</div><div class="ttdoc">Getter for default transport factory.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:136</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a2a1a3157b7cb40ddc299b8865f3ef305"><div class="ttname"><a href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">FairMQDevice::Reset</a></div><div class="ttdeci">virtual void Reset()</div><div class="ttdoc">Resets the device (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:421</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a735b2684d4678eb959302911f12223eb"><div class="ttname"><a href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice::FairMQDevice</a></div><div class="ttdeci">FairMQDevice()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.cxx:58</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a1f040835106f6b4fa735ca3d57491f75"><div class="ttname"><a href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">FairMQChannel::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:270</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a272f25798b948992a560df32d405517c"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">fair::mq::ProgOptions::SetProperty</a></div><div class="ttdeci">void SetProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Set config property.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:136</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a8be266eb34c0aa683674570866a7804d"><div class="ttname"><a href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">FairMQChannel::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:260</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ae4e81b923615502666e5531f532ffc98"><div class="ttname"><a href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98">FairMQDevice::InitTask</a></div><div class="ttdeci">virtual void InitTask()</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:403</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1StateMachine_html"><div class="ttname"><a href="classfair_1_1mq_1_1StateMachine.html">fair::mq::StateMachine</a></div><div class="ttdef"><b>Definition:</b> StateMachine.h:29</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a363cf1b520148d9864fa800b4341b77f"><div class="ttname"><a href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">FairMQDevice::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:108</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a7b64f14a98d56fc575d13f7da0ad0a4d"><div class="ttname"><a href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">FairMQDevice::WaitForNextState</a></div><div class="ttdeci">fair::mq::State WaitForNextState()</div><div class="ttdoc">waits for the next state (any) to occur</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:438</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a02d4d28747aa58c9b67915e79520cc7b"><div class="ttname"><a href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">FairMQDevice::fTransports</a></div><div class="ttdeci">std::unordered_map&lt; fair::mq::Transport, std::shared_ptr&lt; FairMQTransportFactory &gt; &gt; fTransports</div><div class="ttdoc">Container for transports.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:380</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a7578022e18bc2b5b40ba56249cf23719"><div class="ttname"><a href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">FairMQDevice::PreRun</a></div><div class="ttdeci">virtual void PreRun()</div><div class="ttdoc">Called in the RUNNING state once before executing the Run()/ConditionalRun() method.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:409</div></div>
<div class="ttc" id="aclassFairMQDevice_html_aff6cf5db6dfc546431fc76548b8c09c4"><div class="ttname"><a href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">FairMQDevice::SubscribeToNewTransition</a></div><div class="ttdeci">void SubscribeToNewTransition(const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</div><div class="ttdoc">Subscribe with a callback to incoming state transitions.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:464</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ae3e16932f18d4966d51c906f1fe99d4a"><div class="ttname"><a href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">FairMQDevice::GetTransportName</a></div><div class="ttdeci">std::string GetTransportName() const</div><div class="ttdoc">Gets the default transport name.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:359</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ab2e07c7f823cbd0ea76ea6d1b7fdd1d4"><div class="ttname"><a href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">FairMQDevice::WaitFor</a></div><div class="ttdeci">bool WaitFor(std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:373</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac9458e96239d625186c7e5f9163ae7e2"><div class="ttname"><a href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:97</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a806cf5c241bf95571654cd327d6e76fe"><div class="ttname"><a href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice::FairMQDevice</a></div><div class="ttdeci">FairMQDevice(const FairMQDevice &amp;)=delete</div><div class="ttdoc">Copy constructor (disabled)</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a56d2e72203b11fb4d636e22018456965"><div class="ttname"><a href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">FairMQDevice::PostRun</a></div><div class="ttdeci">virtual void PostRun()</div><div class="ttdoc">Called in the RUNNING state once after executing the Run()/ConditionalRun() method.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:415</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ae3c2c8524082bf37eafaa26030ee7452"><div class="ttname"><a href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">FairMQDevice::SubscribeToStateChange</a></div><div class="ttdeci">void SubscribeToStateChange(const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</div><div class="ttdoc">Subscribe with a callback to state changes.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:454</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a93c839b68f007bef8e66115efeed9d41"><div class="ttname"><a href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">FairMQDevice::LogSocketRates</a></div><div class="ttdeci">virtual void LogSocketRates()</div><div class="ttdoc">Outputs the socket transfer rates.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.cxx:678</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a51db444647edcea2464ca3c59d6bb818"><div class="ttname"><a href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">FairMQDevice::Init</a></div><div class="ttdeci">virtual void Init()</div><div class="ttdoc">Additional user initialization (can be overloaded in child classes). Prefer to use InitTask().</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:396</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac6e41280dd6cc8b217944a97fd9c548c"><div class="ttname"><a href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">FairMQDevice::NewStatePending</a></div><div class="ttdeci">bool NewStatePending() const</div><div class="ttdoc">Returns true if a new state has been requested, signaling the current handler to stop.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:470</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a09389ba6934645ca406a963ab5a60e1a"><div class="ttname"><a href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">FairMQDevice::~FairMQDevice</a></div><div class="ttdeci">virtual ~FairMQDevice()</div><div class="ttdoc">Default destructor.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.cxx:804</div></div>
<div class="ttc" id="aclassFairMQMessage_html"><div class="ttname"><a href="classFairMQMessage.html">FairMQMessage</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:33</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a597c3c39cb45accfcf28e44071e4baff"><div class="ttname"><a href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">FairMQDevice::fInternalConfig</a></div><div class="ttdeci">std::unique_ptr&lt; fair::mq::ProgOptions &gt; fInternalConfig</div><div class="ttdoc">Internal program options configuration.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:384</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad1b949fc86f1028a1421972d43b37df9"><div class="ttname"><a href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">FairMQDevice::GetCurrentStateName</a></div><div class="ttdeci">std::string GetCurrentStateName() const</div><div class="ttdoc">Returns the name of the current state as a string.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:475</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a72517f8d1edab9b879d573fb09e8b5cf"><div class="ttname"><a href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">FairMQDevice::SetTransport</a></div><div class="ttdeci">void SetTransport(const std::string &amp;transport)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:357</div></div>
<div class="ttc" id="aclassFairMQDevice_html_aa272062ccaff78a61d78ddfbefa25dec"><div class="ttname"><a href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">FairMQDevice::SetConfig</a></div><div class="ttdeci">void SetConfig(fair::mq::ProgOptions &amp;config)</div><div class="ttdoc">Assigns config to the device.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.cxx:672</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a0f7f383786cd37df5bdd5769ac6521ea"><div class="ttname"><a href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">FairMQDevice::ChangeState</a></div><div class="ttdeci">bool ChangeState(const std::string &amp;transition)</div><div class="ttdoc">Request a device state transition.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:435</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a40ef078cf464d17af1e8faeb69c61206"><div class="ttname"><a href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">FairMQDevice::WaitForState</a></div><div class="ttdeci">void WaitForState(fair::mq::State state)</div><div class="ttdoc">waits for the specified state to occur</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:441</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1StateQueue_html"><div class="ttname"><a href="classfair_1_1mq_1_1StateQueue.html">fair::mq::StateQueue</a></div><div class="ttdef"><b>Definition:</b> StateQueue.h:30</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a1c67c4cbd6140f35292b13e485f39ce0"><div class="ttname"><a href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">FairMQDevice::fTransportFactory</a></div><div class="ttdeci">std::shared_ptr&lt; FairMQTransportFactory &gt; fTransportFactory</div><div class="ttdoc">Default transport factory.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:379</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<div class="ttc" id="aclassFairMQDevice_html_af9b5b7a5469bff53feb6a1e000230e73"><div class="ttname"><a href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">FairMQDevice::UnsubscribeFromStateChange</a></div><div class="ttdeci">void UnsubscribeFromStateChange(const std::string &amp;key)</div><div class="ttdoc">Unsubscribe from state changes.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:457</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQLogger.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQLogger.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQLOGGER_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQLOGGER_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairlogger/Logger.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQLOGGER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,195 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQMerger.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQMerger.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIRMQMERGER_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIRMQMERGER_H_</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">#include &quot;FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../FairMQPoller.h&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;../FairMQLogger.h&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classFairMQMerger.html"> 25</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQMerger.html">FairMQMerger</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></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="keyword">public</span>:</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <a class="code" href="classFairMQMerger.html">FairMQMerger</a>()</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; : fMultipart(<span class="keyword">true</span>)</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; , fInChannelName(<span class="stringliteral">&quot;data-in&quot;</span>)</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; , fOutChannelName(<span class="stringliteral">&quot;data-out&quot;</span>)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; {}</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; ~<a class="code" href="classFairMQMerger.html">FairMQMerger</a>() {}</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::string fInChannelName;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string fOutChannelName;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQMerger.html#a77dc099209a49cec13493e1ec2953411">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; fInChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;in-channel&quot;</span>);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; fOutChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;out-channel&quot;</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classFairMQMerger.html#a77dc099209a49cec13493e1ec2953411"> 46</a></span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> RegisterChannelEndpoints()<span class="keyword"> override</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; RegisterChannelEndpoint(fInChannelName, 1, 10000);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; RegisterChannelEndpoint(fOutChannelName, 1, 1);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; PrintRegisteredChannels();</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQMerger.html#a7f38f3fe9b3bc3ab9122a40acbc4bdbc">Run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">int</span> numInputs = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fInChannelName).size();</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::vector&lt;FairMQChannel*&gt; chans;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classFairMQMerger.html#a7f38f3fe9b3bc3ab9122a40acbc4bdbc"> 61</a></span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; chan : <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fInChannelName)) {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; chans.push_back(&amp;chan);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; FairMQPollerPtr poller(NewPoller(chans));</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="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; poller-&gt;Poll(100);</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="comment">// Loop over the data input channels.</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numInputs; ++i) {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="comment">// Check if the channel has data ready to be received.</span></div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (poller-&gt;CheckInput(i)) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> payload;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(payload, fInChannelName, i) &gt;= 0) {</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelName) &lt; 0) {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; }</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; poller-&gt;Poll(100);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// Loop over the data input channels.</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numInputs; ++i) {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// Check if the channel has data ready to be received.</span></div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">if</span> (poller-&gt;CheckInput(i)) {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; FairMQMessagePtr payload(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(payload, fInChannelName, i) &gt;= 0) {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelName) &lt; 0) {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;};</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQMERGER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQMerger_html"><div class="ttname"><a href="classFairMQMerger.html">FairMQMerger</a></div><div class="ttdef"><b>Definition:</b> FairMQMerger.h:26</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQMerger_html_a7f38f3fe9b3bc3ab9122a40acbc4bdbc"><div class="ttname"><a href="classFairMQMerger.html#a7f38f3fe9b3bc3ab9122a40acbc4bdbc">FairMQMerger::Run</a></div><div class="ttdeci">void Run() override</div><div class="ttdoc">Runs the device (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQMerger.h:61</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a363cf1b520148d9864fa800b4341b77f"><div class="ttname"><a href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">FairMQDevice::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:108</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac9458e96239d625186c7e5f9163ae7e2"><div class="ttname"><a href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:97</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQMerger_html_a77dc099209a49cec13493e1ec2953411"><div class="ttname"><a href="classFairMQMerger.html#a77dc099209a49cec13493e1ec2953411">FairMQMerger::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQMerger.h:46</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac6e41280dd6cc8b217944a97fd9c548c"><div class="ttname"><a href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">FairMQDevice::NewStatePending</a></div><div class="ttdeci">bool NewStatePending() const</div><div class="ttdoc">Returns true if a new state has been requested, signaling the current handler to stop.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:470</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a1c67c4cbd6140f35292b13e485f39ce0"><div class="ttname"><a href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">FairMQDevice::fTransportFactory</a></div><div class="ttdeci">std::shared_ptr&lt; FairMQTransportFactory &gt; fTransportFactory</div><div class="ttdoc">Default transport factory.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:379</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,154 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQMessage.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQMessage.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQMESSAGE_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQMESSAGE_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">// for size_t</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// unique_ptr</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/Transports.h&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="keyword">using</span> fairmq_free_fn = void(<span class="keywordtype">void</span>* data, <span class="keywordtype">void</span>* hint);</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1Alignment.html"> 24</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1Alignment.html">Alignment</a></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keywordtype">size_t</span> alignment;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> size_t()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> alignment; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classFairMQMessage.html"> 32</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQMessage.html">FairMQMessage</a></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classFairMQMessage.html">FairMQMessage</a>() = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classFairMQMessage.html">FairMQMessage</a>(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* factory) : fTransport(factory) {}</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Rebuild() = 0;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Rebuild(<a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a> alignment) = 0;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Rebuild(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size) = 0;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Rebuild(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a> alignment) = 0;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Rebuild(<span class="keywordtype">void</span>* data, <span class="keyword">const</span> <span class="keywordtype">size_t</span> size, fairmq_free_fn* ffn, <span class="keywordtype">void</span>* hint = <span class="keyword">nullptr</span>) = 0;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* GetData() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> GetSize() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> SetUsedSize(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size) = 0;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> fair::mq::Transport GetType() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* GetTransport() { <span class="keywordflow">return</span> fTransport; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">void</span> SetTransport(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* transport) { fTransport = transport; }</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="keyword">virtual</span> <span class="keywordtype">void</span> Copy(<span class="keyword">const</span> <a class="code" href="classFairMQMessage.html">FairMQMessage</a>&amp; msg) = 0;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classFairMQMessage.html">FairMQMessage</a>() {};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* fTransport{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">using</span> FairMQMessagePtr = std::unique_ptr&lt;FairMQMessage&gt;;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">using</span> Message = <a class="code" href="classFairMQMessage.html">FairMQMessage</a>;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">using</span> MessagePtr = FairMQMessagePtr;</div>
<div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1MessageError.html"> 68</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1MessageError.html">MessageError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1MessageBadAlloc.html"> 69</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1MessageBadAlloc.html">MessageBadAlloc</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</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="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQMESSAGE_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1Alignment_html"><div class="ttname"><a href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:25</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1MessageError_html"><div class="ttname"><a href="structfair_1_1mq_1_1MessageError.html">fair::mq::MessageError</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:68</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1MessageBadAlloc_html"><div class="ttname"><a href="structfair_1_1mq_1_1MessageBadAlloc.html">fair::mq::MessageBadAlloc</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:69</div></div>
<div class="ttc" id="aclassFairMQMessage_html"><div class="ttname"><a href="classFairMQMessage.html">FairMQMessage</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:33</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,196 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQMultiplier.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQMultiplier.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQMULTIPLIER_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQMULTIPLIER_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"><a class="line" href="classFairMQMultiplier.html"> 17</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQMultiplier.html">FairMQMultiplier</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <a class="code" href="classFairMQMultiplier.html">FairMQMultiplier</a>()</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; : fMultipart(<span class="keyword">true</span>)</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; , fNumOutputs(0)</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; , fInChannelName()</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; , fOutChannelNames()</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; {}</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; ~<a class="code" href="classFairMQMultiplier.html">FairMQMultiplier</a>() {}</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keywordtype">int</span> fNumOutputs;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::string fInChannelName;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; std::vector&lt;std::string&gt; fOutChannelNames;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQMultiplier.html#ac53e028f43306dc8d32964c92c022f11">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; fInChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;in-channel&quot;</span>);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; fOutChannelNames = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::vector&lt;std::string&gt;&gt;(<span class="stringliteral">&quot;out-channel&quot;</span>);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; fNumOutputs = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelNames.at(0)).size();</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classFairMQMultiplier.html#ac53e028f43306dc8d32964c92c022f11"> 40</a></span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; OnData(fInChannelName, &amp;FairMQMultiplier::HandleMultipartData);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; OnData(fInChannelName, &amp;FairMQMultiplier::HandleSingleData);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">bool</span> HandleSingleData(std::unique_ptr&lt;FairMQMessage&gt;&amp; payload, <span class="keywordtype">int</span>)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fOutChannelNames.size() - 1; ++i) { <span class="comment">// all except last channel</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelNames.at(i)).size(); ++j) { <span class="comment">// all subChannels in a channel</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; FairMQMessagePtr msgCopy(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; msgCopy-&gt;Copy(*payload);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(msgCopy, fOutChannelNames.at(i), j);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lastChannelSize = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelNames.back()).size();</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="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; lastChannelSize - 1; ++i) { <span class="comment">// iterate over all except last subChannels of the last channel</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; FairMQMessagePtr msgCopy(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; msgCopy-&gt;Copy(*payload);</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(msgCopy, fOutChannelNames.back(), i);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; }</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelNames.back(), lastChannelSize - 1); <span class="comment">// send final message to last subChannel of last channel</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="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordtype">bool</span> HandleMultipartData(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; payload, <span class="keywordtype">int</span>)</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fOutChannelNames.size() - 1; ++i) { <span class="comment">// all except last channel</span></div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelNames.at(i)).size(); ++j) { <span class="comment">// all subChannels in a channel</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> parts;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; payload.<a class="code" href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3">Size</a>(); ++k) {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; FairMQMessagePtr msgCopy(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; msgCopy-&gt;Copy(payload.AtRef(k));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; parts.<a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::move(msgCopy));</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(parts, fOutChannelNames.at(i), j);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; }</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lastChannelSize = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelNames.back()).size();</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; lastChannelSize - 1; ++i) { <span class="comment">// iterate over all except last subChannels of the last channel</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> parts;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k = 0; k &lt; payload.<a class="code" href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3">Size</a>(); ++k) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; FairMQMessagePtr msgCopy(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; msgCopy-&gt;Copy(payload.AtRef(k));</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; parts.<a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::move(msgCopy));</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(parts, fOutChannelNames.back(), i);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelNames.back(), lastChannelSize - 1); <span class="comment">// send final message to last subChannel of last channel</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;};</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQMULTIPLIER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassFairMQParts_html_afaaa0eedc7a2c1e9fa6bec33dd1f3709"><div class="ttname"><a href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">FairMQParts::AddPart</a></div><div class="ttdeci">void AddPart(FairMQMessage *msg)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:48</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQParts_html_a1e3301192a6e033b98b5abfd563a45f3"><div class="ttname"><a href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3">FairMQParts::Size</a></div><div class="ttdeci">int Size() const</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:91</div></div>
<div class="ttc" id="aclassFairMQMultiplier_html"><div class="ttname"><a href="classFairMQMultiplier.html">FairMQMultiplier</a></div><div class="ttdef"><b>Definition:</b> FairMQMultiplier.h:18</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac9458e96239d625186c7e5f9163ae7e2"><div class="ttname"><a href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:97</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a1c67c4cbd6140f35292b13e485f39ce0"><div class="ttname"><a href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">FairMQDevice::fTransportFactory</a></div><div class="ttdeci">std::shared_ptr&lt; FairMQTransportFactory &gt; fTransportFactory</div><div class="ttdoc">Default transport factory.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:379</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<div class="ttc" id="aclassFairMQMultiplier_html_ac53e028f43306dc8d32964c92c022f11"><div class="ttname"><a href="classFairMQMultiplier.html#ac53e028f43306dc8d32964c92c022f11">FairMQMultiplier::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQMultiplier.h:40</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,162 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQParts.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQParts.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQPARTS_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQPARTS_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;FairMQTransportFactory.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;FairMQMessage.h&quot;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// unique_ptr</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classFairMQParts.html"> 20</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQParts.html">FairMQParts</a></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">using</span> container = std::vector&lt;std::unique_ptr&lt;FairMQMessage&gt;&gt;;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <a class="code" href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789">FairMQParts</a>() : fParts() {};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <a class="code" href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789">FairMQParts</a>(<span class="keyword">const</span> <a class="code" href="classFairMQParts.html">FairMQParts</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <a class="code" href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789">FairMQParts</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp;&amp; p) = <span class="keywordflow">default</span>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789"> 33</a></span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a>&amp; <a class="code" href="classFairMQParts.html#ac2b948ae748efc9f4ec7889e98b71278">operator=</a>(<span class="keyword">const</span> <a class="code" href="classFairMQParts.html">FairMQParts</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a188cc956da9212b48f2954f275781c66"> 35</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Ts&gt;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789">FairMQParts</a>(Ts&amp;&amp;... messages) : fParts() { <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::forward&lt;Ts&gt;(messages)...); }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classFairMQParts.html#a0ddccbfb56041b6b95c31838acb02e69">~FairMQParts</a>() {};</div>
<div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classFairMQParts.html#ac2b948ae748efc9f4ec7889e98b71278"> 39</a></span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a6a6c543717d2b2de1b4eb3aef56c8634"> 42</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(<a class="code" href="classFairMQMessage.html">FairMQMessage</a>* msg)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div>
<div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a0ddccbfb56041b6b95c31838acb02e69"> 44</a></span>&#160; fParts.push_back(std::unique_ptr&lt;FairMQMessage&gt;(msg));</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; }</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::unique_ptr&lt;FairMQMessage&gt;&amp;&amp; msg)</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; fParts.push_back(std::move(msg));</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a2202b446893b2b247f6e042e3fa7cba5"> 56</a></span>&#160; <span class="keyword">template</span> &lt;<span class="keyword">typename</span>... Ts&gt;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::unique_ptr&lt;FairMQMessage&gt;&amp;&amp; first, Ts&amp;&amp;... remaining)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::move(first));</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(std::forward&lt;Ts&gt;(remaining)...);</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; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">AddPart</a>(<a class="code" href="classFairMQParts.html">FairMQParts</a>&amp;&amp; other)</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; {</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; container parts = std::move(other.fParts);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; part : parts) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; fParts.push_back(std::move(part));</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a413d07dfdd8bab388efca8eaa0d7d2a2"> 70</a></span>&#160; }</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classFairMQMessage.html">FairMQMessage</a>&amp; <a class="code" href="classFairMQParts.html#a309dcf53e2003614e8fed7cec4cfcb48">operator[]</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> index) { <span class="keywordflow">return</span> *(fParts[index]); }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; std::unique_ptr&lt;FairMQMessage&gt;&amp; <a class="code" href="classFairMQParts.html#ac7fdb59ead8736caebaafd8861d6d7bd">At</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> index) { <span class="keywordflow">return</span> fParts.at(index); }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a309dcf53e2003614e8fed7cec4cfcb48"> 80</a></span>&#160; <span class="comment">// ref version</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <a class="code" href="classFairMQMessage.html">FairMQMessage</a>&amp; AtRef(<span class="keyword">const</span> <span class="keywordtype">int</span> index) { <span class="keywordflow">return</span> *(fParts.at(index)); }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3">Size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fParts.size(); }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; container fParts;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="comment">// forward container iterators</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">using</span> iterator = container::iterator;</div>
<div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3"> 91</a></span>&#160; <span class="keyword">using</span> const_iterator = container::const_iterator;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keyword">auto</span> begin() -&gt; decltype(fParts.begin()) { <span class="keywordflow">return</span> fParts.begin(); }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">auto</span> end() -&gt; decltype(fParts.end()) { <span class="keywordflow">return</span> fParts.end(); }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">auto</span> cbegin() -&gt; decltype(fParts.cbegin()) { <span class="keywordflow">return</span> fParts.cbegin(); }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">auto</span> cend() -&gt; decltype(fParts.cend()) { <span class="keywordflow">return</span> fParts.cend(); }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;};</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQPARTS_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQParts_html_a0ddccbfb56041b6b95c31838acb02e69"><div class="ttname"><a href="classFairMQParts.html#a0ddccbfb56041b6b95c31838acb02e69">FairMQParts::~FairMQParts</a></div><div class="ttdeci">~FairMQParts()</div><div class="ttdoc">Default destructor.</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:44</div></div>
<div class="ttc" id="aclassFairMQParts_html_afaaa0eedc7a2c1e9fa6bec33dd1f3709"><div class="ttname"><a href="classFairMQParts.html#afaaa0eedc7a2c1e9fa6bec33dd1f3709">FairMQParts::AddPart</a></div><div class="ttdeci">void AddPart(FairMQMessage *msg)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:48</div></div>
<div class="ttc" id="aclassFairMQParts_html_a309dcf53e2003614e8fed7cec4cfcb48"><div class="ttname"><a href="classFairMQParts.html#a309dcf53e2003614e8fed7cec4cfcb48">FairMQParts::operator[]</a></div><div class="ttdeci">FairMQMessage &amp; operator[](const int index)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:80</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassFairMQParts_html_ac7fdb59ead8736caebaafd8861d6d7bd"><div class="ttname"><a href="classFairMQParts.html#ac7fdb59ead8736caebaafd8861d6d7bd">FairMQParts::At</a></div><div class="ttdeci">std::unique_ptr&lt; FairMQMessage &gt; &amp; At(const int index)</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:84</div></div>
<div class="ttc" id="aclassFairMQParts_html_a1e3301192a6e033b98b5abfd563a45f3"><div class="ttname"><a href="classFairMQParts.html#a1e3301192a6e033b98b5abfd563a45f3">FairMQParts::Size</a></div><div class="ttdeci">int Size() const</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:91</div></div>
<div class="ttc" id="aclassFairMQParts_html_ac2b948ae748efc9f4ec7889e98b71278"><div class="ttname"><a href="classFairMQParts.html#ac2b948ae748efc9f4ec7889e98b71278">FairMQParts::operator=</a></div><div class="ttdeci">FairMQParts &amp; operator=(const FairMQParts &amp;)=delete</div><div class="ttdoc">Assignment operator.</div></div>
<div class="ttc" id="aclassFairMQMessage_html"><div class="ttname"><a href="classFairMQMessage.html">FairMQMessage</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:33</div></div>
<div class="ttc" id="aclassFairMQParts_html_aba451752ac510bd547a52b4ebb160789"><div class="ttname"><a href="classFairMQParts.html#aba451752ac510bd547a52b4ebb160789">FairMQParts::FairMQParts</a></div><div class="ttdeci">FairMQParts()</div><div class="ttdoc">Default constructor.</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:33</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,116 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQPoller.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQPoller.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQPOLLER_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQPOLLER_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classFairMQPoller.html"> 15</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQPoller.html">FairMQPoller</a></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Poll(<span class="keyword">const</span> <span class="keywordtype">int</span> timeout) = 0;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> CheckInput(<span class="keyword">const</span> <span class="keywordtype">int</span> index) = 0;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> CheckOutput(<span class="keyword">const</span> <span class="keywordtype">int</span> index) = 0;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> CheckInput(<span class="keyword">const</span> std::string&amp; channelKey, <span class="keyword">const</span> <span class="keywordtype">int</span> index) = 0;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> CheckOutput(<span class="keyword">const</span> std::string&amp; channelKey, <span class="keyword">const</span> <span class="keywordtype">int</span> index) = 0;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classFairMQPoller.html">FairMQPoller</a>() {};</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;};</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="keyword">using</span> FairMQPollerPtr = std::unique_ptr&lt;FairMQPoller&gt;;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using</span> Poller = <a class="code" href="classFairMQPoller.html">FairMQPoller</a>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">using</span> PollerPtr = FairMQPollerPtr;</div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PollerError.html"> 34</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1PollerError.html">PollerError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</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">// namespace fair::mq</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQPOLLER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1PollerError_html"><div class="ttname"><a href="structfair_1_1mq_1_1PollerError.html">fair::mq::PollerError</a></div><div class="ttdef"><b>Definition:</b> FairMQPoller.h:34</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassFairMQPoller_html"><div class="ttname"><a href="classFairMQPoller.html">FairMQPoller</a></div><div class="ttdef"><b>Definition:</b> FairMQPoller.h:16</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,89 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/options/FairMQProgOptions.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_45e75480de90911e73132ad6d2c599a0.html">options</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQProgOptions.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQPROGOPTIONS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQPROGOPTIONS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptions.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQPROGOPTIONS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,155 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQProxy.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQProxy.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIRMQPROXY_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIRMQPROXY_H_</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">#include &quot;FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="classFairMQProxy.html"> 22</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQProxy.html">FairMQProxy</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classFairMQProxy.html">FairMQProxy</a>()</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : fMultipart(<span class="keyword">true</span>)</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; , fInChannelName()</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; , fOutChannelName()</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; {}</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; ~<a class="code" href="classFairMQProxy.html">FairMQProxy</a>() {}</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; std::string fInChannelName;</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::string fOutChannelName;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQProxy.html#afbd6c4533ea028693c66986863664c82">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; fInChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;in-channel&quot;</span>);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; fOutChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;out-channel&quot;</span>);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="classFairMQProxy.html#afbd6c4533ea028693c66986863664c82"> 43</a></span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQProxy.html#a188a060d489a5a8e72a01f51d8866302">Run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> payload;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(payload, fInChannelName) &gt;= 0) {</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="classFairMQProxy.html#a188a060d489a5a8e72a01f51d8866302"> 50</a></span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelName) &lt; 0) {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; FairMQMessagePtr payload(<a class="code" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a>-&gt;CreateMessage());</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(payload, fInChannelName) &gt;= 0) {</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelName) &lt; 0) {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">break</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="keywordflow">else</span> {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Transfer interrupted&quot;</span>;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">break</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; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;};</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQPROXY_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQProxy_html"><div class="ttname"><a href="classFairMQProxy.html">FairMQProxy</a></div><div class="ttdef"><b>Definition:</b> FairMQProxy.h:23</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQProxy_html_afbd6c4533ea028693c66986863664c82"><div class="ttname"><a href="classFairMQProxy.html#afbd6c4533ea028693c66986863664c82">FairMQProxy::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQProxy.h:43</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a363cf1b520148d9864fa800b4341b77f"><div class="ttname"><a href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">FairMQDevice::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:108</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac9458e96239d625186c7e5f9163ae7e2"><div class="ttname"><a href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:97</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac6e41280dd6cc8b217944a97fd9c548c"><div class="ttname"><a href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">FairMQDevice::NewStatePending</a></div><div class="ttdeci">bool NewStatePending() const</div><div class="ttdoc">Returns true if a new state has been requested, signaling the current handler to stop.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:470</div></div>
<div class="ttc" id="aclassFairMQProxy_html_a188a060d489a5a8e72a01f51d8866302"><div class="ttname"><a href="classFairMQProxy.html#a188a060d489a5a8e72a01f51d8866302">FairMQProxy::Run</a></div><div class="ttdeci">void Run() override</div><div class="ttdoc">Runs the device (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQProxy.h:50</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a1c67c4cbd6140f35292b13e485f39ce0"><div class="ttname"><a href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">FairMQDevice::fTransportFactory</a></div><div class="ttdeci">std::shared_ptr&lt; FairMQTransportFactory &gt; fTransportFactory</div><div class="ttdoc">Default transport factory.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:379</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,227 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQSink.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQSink.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIRMQSINK_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIRMQSINK_H_</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">#include &quot;../FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;../FairMQLogger.h&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</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"><a class="line" href="classFairMQSink.html"> 27</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQSink.html">FairMQSink</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="classFairMQSink.html">FairMQSink</a>()</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; : fMultipart(<span class="keyword">false</span>)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; , fMaxIterations(0)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; , fNumIterations(0)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; , fMaxFileSize(0)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; , fBytesWritten(0)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; , fInChannelName()</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; , fOutFilename()</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; {}</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; ~<a class="code" href="classFairMQSink.html">FairMQSink</a>() {}</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; uint64_t fMaxIterations;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; uint64_t fNumIterations;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; uint64_t fMaxFileSize;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint64_t fBytesWritten;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; std::string fInChannelName;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::string fOutFilename;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::fstream fOutputFile;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQSink.html#a302ab7f0e7134ec1ad67b1252ddd9d2d">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; fMaxIterations = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;uint64_t&gt;(<span class="stringliteral">&quot;max-iterations&quot;</span>);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; fMaxFileSize = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;uint64_t&gt;(<span class="stringliteral">&quot;max-file-size&quot;</span>);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; fInChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;in-channel&quot;</span>);</div>
<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classFairMQSink.html#a302ab7f0e7134ec1ad67b1252ddd9d2d"> 58</a></span>&#160; fOutFilename = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;out-filename&quot;</span>);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; fBytesWritten = 0;</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; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQSink.html#a1ed9fe63eb9fee891c70c85a0ec382f6">Run</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">// store the channel reference to avoid traversing the map on every loop iteration</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; dataInChannel = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fInChannelName).at(0);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Starting sink and expecting to receive &quot;</span> &lt;&lt; fMaxIterations &lt;&lt; <span class="stringliteral">&quot; messages.&quot;</span>;</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classFairMQSink.html#a1ed9fe63eb9fee891c70c85a0ec382f6"> 69</a></span>&#160; <span class="keyword">auto</span> tStart = std::chrono::high_resolution_clock::now();</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="keywordflow">if</span> (!fOutFilename.empty()) {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Incoming messages will be written to file: &quot;</span> &lt;&lt; fOutFilename;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (fMaxFileSize != 0) {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;File output will stop after &quot;</span> &lt;&lt; fMaxFileSize &lt;&lt; <span class="stringliteral">&quot; bytes&quot;</span>;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;ATTENTION: --max-file-size is 0 - output file will continue to grow until sink is stopped&quot;</span>;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; fOutputFile.open(fOutFilename, std::ios::out | std::ios::binary);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">if</span> (!fOutputFile) {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not open &#39;&quot;</span> &lt;&lt; fOutFilename;</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(fair::mq::tools::ToString(<span class="stringliteral">&quot;Could not open &#39;&quot;</span>, fOutFilename));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>()) {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classFairMQParts.html">FairMQParts</a> parts;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (dataInChannel.<a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(parts) &lt; 0) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span> (fOutputFile.is_open()) {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; part : parts) {</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; WriteToFile(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(part-&gt;GetData()), part-&gt;GetSize());</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; FairMQMessagePtr msg(dataInChannel.NewMessage());</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">if</span> (dataInChannel.<a class="code" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(msg) &lt; 0) {</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (fOutputFile.is_open()) {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; WriteToFile(<span class="keyword">static_cast&lt;</span><span class="keyword">const </span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(msg-&gt;GetData()), msg-&gt;GetSize());</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; }</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (fMaxFileSize &gt; 0 &amp;&amp; fBytesWritten &gt;= fMaxFileSize) {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Written &quot;</span> &lt;&lt; fBytesWritten &lt;&lt; <span class="stringliteral">&quot; bytes, stopping...&quot;</span>;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (fMaxIterations &gt; 0) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">if</span> (fNumIterations &gt;= fMaxIterations) {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Configured maximum number of iterations reached.&quot;</span>;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; fNumIterations++;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (fOutputFile.is_open()) {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; fOutputFile.flush();</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; fOutputFile.close();</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</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="keyword">auto</span> tEnd = std::chrono::high_resolution_clock::now();</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">auto</span> ms = std::chrono::duration&lt;double, std::milli&gt;(tEnd - tStart).count();</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Received &quot;</span> &lt;&lt; fNumIterations &lt;&lt; <span class="stringliteral">&quot; messages in &quot;</span> &lt;&lt; ms &lt;&lt; <span class="stringliteral">&quot;ms.&quot;</span>;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (!fOutFilename.empty()) {</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">auto</span> sec = std::chrono::duration&lt;double&gt;(tEnd - tStart).count();</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Closed &#39;&quot;</span> &lt;&lt; fOutFilename &lt;&lt; <span class="stringliteral">&quot;&#39; after writing &quot;</span> &lt;&lt; fBytesWritten &lt;&lt; <span class="stringliteral">&quot; bytes.&quot;</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; &lt;&lt; <span class="stringliteral">&quot;(&quot;</span> &lt;&lt; (fBytesWritten / (1000. * 1000.)) / sec &lt;&lt; <span class="stringliteral">&quot; MB/s)&quot;</span>;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; LOG(info) &lt;&lt; <span class="stringliteral">&quot;Leaving RUNNING state.&quot;</span>;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; }</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">void</span> WriteToFile(<span class="keyword">const</span> <span class="keywordtype">char</span>* ptr, <span class="keywordtype">size_t</span> size)</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; fOutputFile.write(ptr, size);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">if</span> (fOutputFile.bad()) {</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;failed writing to file&quot;</span>;</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;failed writing to file&quot;</span>);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; fBytesWritten += size;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;};</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSINK_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQSink_html"><div class="ttname"><a href="classFairMQSink.html">FairMQSink</a></div><div class="ttdef"><b>Definition:</b> FairMQSink.h:28</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassFairMQSink_html_a302ab7f0e7134ec1ad67b1252ddd9d2d"><div class="ttname"><a href="classFairMQSink.html#a302ab7f0e7134ec1ad67b1252ddd9d2d">FairMQSink::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQSink.h:58</div></div>
<div class="ttc" id="aclassFairMQParts_html"><div class="ttname"><a href="classFairMQParts.html">FairMQParts</a></div><div class="ttdoc">FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...</div><div class="ttdef"><b>Definition:</b> FairMQParts.h:21</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQChannel_html_a1f040835106f6b4fa735ca3d57491f75"><div class="ttname"><a href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">FairMQChannel::Receive</a></div><div class="ttdeci">int64_t Receive(FairMQMessagePtr &amp;msg, int rcvTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:270</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQSink_html_a1ed9fe63eb9fee891c70c85a0ec382f6"><div class="ttname"><a href="classFairMQSink.html#a1ed9fe63eb9fee891c70c85a0ec382f6">FairMQSink::Run</a></div><div class="ttdeci">void Run() override</div><div class="ttdoc">Runs the device (to be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQSink.h:69</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac6e41280dd6cc8b217944a97fd9c548c"><div class="ttname"><a href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">FairMQDevice::NewStatePending</a></div><div class="ttdeci">bool NewStatePending() const</div><div class="ttdoc">Returns true if a new state has been requested, signaling the current handler to stop.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:470</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQSocket.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQSocket.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQSOCKET_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQSOCKET_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;FairMQMessage.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">enum class</span> TransferCode : int</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; success = 0,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; error = -1,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; timeout = -2,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; interrupted = -3</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;};</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classFairMQSocket.html"> 35</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQSocket.html">FairMQSocket</a></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <a class="code" href="classFairMQSocket.html">FairMQSocket</a>() {}</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="classFairMQSocket.html">FairMQSocket</a>(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* fac) : fTransport(fac) {}</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">virtual</span> std::string GetId() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Bind(<span class="keyword">const</span> std::string&amp; address) = 0;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> Connect(<span class="keyword">const</span> std::string&amp; address) = 0;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">virtual</span> int64_t Send(FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> timeout = -1) = 0;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">virtual</span> int64_t Receive(FairMQMessagePtr&amp; msg, <span class="keywordtype">int</span> timeout = -1) = 0;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">virtual</span> int64_t Send(std::vector&lt;std::unique_ptr&lt;FairMQMessage&gt;&gt;&amp; msgVec, <span class="keywordtype">int</span> timeout = -1) = 0;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">virtual</span> int64_t Receive(std::vector&lt;std::unique_ptr&lt;FairMQMessage&gt;&gt;&amp; msgVec, <span class="keywordtype">int</span> timeout = -1) = 0;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Close() = 0;</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="keyword">virtual</span> <span class="keywordtype">void</span> SetOption(<span class="keyword">const</span> std::string&amp; option, <span class="keyword">const</span> <span class="keywordtype">void</span>* value, <span class="keywordtype">size_t</span> valueSize) = 0;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> GetOption(<span class="keyword">const</span> std::string&amp; option, <span class="keywordtype">void</span>* value, <span class="keywordtype">size_t</span>* valueSize) = 0;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classFairMQSocket.html#ac6a51dd23b0e3b01daf8bbc5b087ed78"> 59</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQSocket.html#ac6a51dd23b0e3b01daf8bbc5b087ed78">Events</a>(uint32_t* events) = 0;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLinger(<span class="keyword">const</span> <span class="keywordtype">int</span> value) = 0;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetLinger() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetSndBufSize(<span class="keyword">const</span> <span class="keywordtype">int</span> value) = 0;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetSndBufSize() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetRcvBufSize(<span class="keyword">const</span> <span class="keywordtype">int</span> value) = 0;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetRcvBufSize() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetSndKernelSize(<span class="keyword">const</span> <span class="keywordtype">int</span> value) = 0;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetSndKernelSize() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetRcvKernelSize(<span class="keyword">const</span> <span class="keywordtype">int</span> value) = 0;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">int</span> GetRcvKernelSize() <span class="keyword">const</span> = 0;</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="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetBytesTx() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetBytesRx() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetMessagesTx() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> GetMessagesRx() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* GetTransport() { <span class="keywordflow">return</span> fTransport; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">void</span> SetTransport(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* transport) { fTransport = transport; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classFairMQSocket.html">FairMQSocket</a>() {};</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* fTransport{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;};</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="keyword">using</span> FairMQSocketPtr = std::unique_ptr&lt;FairMQSocket&gt;;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="keyword">using</span> Socket = <a class="code" href="classFairMQSocket.html">FairMQSocket</a>;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">using</span> SocketPtr = FairMQSocketPtr;</div>
<div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1SocketError.html"> 92</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1SocketError.html">SocketError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSOCKET_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQSocket_html"><div class="ttname"><a href="classFairMQSocket.html">FairMQSocket</a></div><div class="ttdef"><b>Definition:</b> FairMQSocket.h:36</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1SocketError_html"><div class="ttname"><a href="structfair_1_1mq_1_1SocketError.html">fair::mq::SocketError</a></div><div class="ttdef"><b>Definition:</b> FairMQSocket.h:92</div></div>
<div class="ttc" id="aclassFairMQSocket_html_ac6a51dd23b0e3b01daf8bbc5b087ed78"><div class="ttname"><a href="classFairMQSocket.html#ac6a51dd23b0e3b01daf8bbc5b087ed78">FairMQSocket::Events</a></div><div class="ttdeci">virtual void Events(uint32_t *events)=0</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,144 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/devices/FairMQSplitter.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b4ab45277bc4c2ae49385465b8ac74b3.html">devices</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQSplitter.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIRMQSPLITTER_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIRMQSPLITTER_H_</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">#include &quot;FairMQDevice.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="classFairMQSplitter.html"> 22</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQSplitter.html">FairMQSplitter</a> : <span class="keyword">public</span> <a class="code" href="classFairMQDevice.html">FairMQDevice</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <a class="code" href="classFairMQSplitter.html">FairMQSplitter</a>()</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; : fMultipart(<span class="keyword">true</span>)</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; , fNumOutputs(0)</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; , fDirection(0)</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; , fInChannelName()</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; , fOutChannelName()</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; {}</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; ~<a class="code" href="classFairMQSplitter.html">FairMQSplitter</a>() {}</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">bool</span> fMultipart;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordtype">int</span> fNumOutputs;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">int</span> fDirection;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; std::string fInChannelName;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; std::string fOutChannelName;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classFairMQSplitter.html#a2d6551c9e65460042b9fb45295ba1390">InitTask</a>()<span class="keyword"> override</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; fMultipart = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;multipart&quot;</span>);</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; fInChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;in-channel&quot;</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; fOutChannelName = <a class="code" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a>-&gt;<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;std::string&gt;(<span class="stringliteral">&quot;out-channel&quot;</span>);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; fNumOutputs = <a class="code" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a>.at(fOutChannelName).size();</div>
<div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classFairMQSplitter.html#a2d6551c9e65460042b9fb45295ba1390"> 47</a></span>&#160; fDirection = 0;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span> (fMultipart) {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; OnData(fInChannelName, &amp;FairMQSplitter::HandleData&lt;FairMQParts&gt;);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; OnData(fInChannelName, &amp;FairMQSplitter::HandleData&lt;FairMQMessagePtr&gt;);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">bool</span> HandleData(T&amp; payload, <span class="keywordtype">int</span>)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(payload, fOutChannelName, fDirection);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">if</span> (++fDirection &gt;= fNumOutputs) {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; fDirection = 0;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</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;};</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSPLITTER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassFairMQDevice_html_ad6e090504ceef5799b6f85b136d1e547"><div class="ttname"><a href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">FairMQDevice::fChannels</a></div><div class="ttdeci">std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt; &gt; fChannels</div><div class="ttdoc">Device channels.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:383</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassFairMQSplitter_html"><div class="ttname"><a href="classFairMQSplitter.html">FairMQSplitter</a></div><div class="ttdef"><b>Definition:</b> FairMQSplitter.h:23</div></div>
<div class="ttc" id="aclassFairMQSplitter_html_a2d6551c9e65460042b9fb45295ba1390"><div class="ttname"><a href="classFairMQSplitter.html#a2d6551c9e65460042b9fb45295ba1390">FairMQSplitter::InitTask</a></div><div class="ttdeci">void InitTask() override</div><div class="ttdoc">Task initialization (can be overloaded in child classes)</div><div class="ttdef"><b>Definition:</b> FairMQSplitter.h:47</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ac9458e96239d625186c7e5f9163ae7e2"><div class="ttname"><a href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">FairMQDevice::Send</a></div><div class="ttdeci">int64_t Send(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:97</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a3496403c6124440185111ba3b49fb80d"><div class="ttname"><a href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">FairMQDevice::fConfig</a></div><div class="ttdeci">fair::mq::ProgOptions * fConfig</div><div class="ttdoc">Pointer to config (internal or external)</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:385</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,231 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQTransportFactory.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQTransportFactory.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQTRANSPORTFACTORY_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQTRANSPORTFACTORY_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;FairMQMessage.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;FairMQPoller.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;FairMQSocket.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;FairMQUnmanagedRegion.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/MemoryResources.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/Transports.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// shared_ptr</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">// size_t</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQChannel.html">FairMQChannel</a>;</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a> { <span class="keyword">class </span>ProgOptions; }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html"> 29</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="keyword">const</span> std::string fkId;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">fair::mq::ChannelResource</a> fMemoryResource{<span class="keyword">this</span>};</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <a class="code" href="classFairMQTransportFactory.html#aafbb0f83fc97a50e96c7e6616bc215c9">FairMQTransportFactory</a>(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keyword">auto</span> GetId() <span class="keyword">const</span> -&gt; <span class="keyword">const</span> std::string { <span class="keywordflow">return</span> fkId; };</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a4be5580ac0bb62cd891fc1f13f1b8a58"> 46</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">fair::mq::ChannelResource</a>* <a class="code" href="classFairMQTransportFactory.html#a4be5580ac0bb62cd891fc1f13f1b8a58">GetMemoryResource</a>() { <span class="keywordflow">return</span> &amp;fMemoryResource; }</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">operator</span> <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">fair::mq::ChannelResource</a>*() { <span class="keywordflow">return</span> &amp;fMemoryResource; }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696"> 51</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>() = 0;</div>
<div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a9f794f9a073aaa6e0b2b623ad984a264"> 55</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#a9f794f9a073aaa6e0b2b623ad984a264">CreateMessage</a>(<a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a> alignment) = 0;</div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a7cfe2327b906688096bea8854970c578"> 59</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#a7cfe2327b906688096bea8854970c578">CreateMessage</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size) = 0;</div>
<div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#ae4142711c309070b490d0e025eede5ab"> 64</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#ae4142711c309070b490d0e025eede5ab">CreateMessage</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <a class="code" href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a> alignment) = 0;</div>
<div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a9e3c89db0c9cd0414745d14dee0300d4"> 71</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#a9e3c89db0c9cd0414745d14dee0300d4">CreateMessage</a>(<span class="keywordtype">void</span>* data, <span class="keyword">const</span> <span class="keywordtype">size_t</span> size, fairmq_free_fn* ffn, <span class="keywordtype">void</span>* hint = <span class="keyword">nullptr</span>) = 0;</div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a8b427b161f32f83047885170457f98e6"> 77</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classFairMQTransportFactory.html#a8b427b161f32f83047885170457f98e6">CreateMessage</a>(FairMQUnmanagedRegionPtr&amp; unmanagedRegion, <span class="keywordtype">void</span>* data, <span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <span class="keywordtype">void</span>* hint = 0) = 0;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#ab38e3409319ed0d9055078a6e5bb3ef8"> 80</a></span>&#160; <span class="keyword">virtual</span> FairMQSocketPtr <a class="code" href="classFairMQTransportFactory.html#ab38e3409319ed0d9055078a6e5bb3ef8">CreateSocket</a>(<span class="keyword">const</span> std::string&amp; type, <span class="keyword">const</span> std::string&amp; name) = 0;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a6de98e1652b6ad68e4d78dd31eea40cc"> 83</a></span>&#160; <span class="keyword">virtual</span> FairMQPollerPtr <a class="code" href="classFairMQTransportFactory.html#a6de98e1652b6ad68e4d78dd31eea40cc">CreatePoller</a>(<span class="keyword">const</span> std::vector&lt;FairMQChannel&gt;&amp; channels) <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#ae692f2e00d9804a5431b719e3004da59"> 85</a></span>&#160; <span class="keyword">virtual</span> FairMQPollerPtr <a class="code" href="classFairMQTransportFactory.html#ae692f2e00d9804a5431b719e3004da59">CreatePoller</a>(<span class="keyword">const</span> std::vector&lt;FairMQChannel*&gt;&amp; channels) <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a7fd308e4e5203814ca7012ef526d3fdf"> 87</a></span>&#160; <span class="keyword">virtual</span> FairMQPollerPtr <a class="code" href="classFairMQTransportFactory.html#a7fd308e4e5203814ca7012ef526d3fdf">CreatePoller</a>(<span class="keyword">const</span> std::unordered_map&lt;std::string, std::vector&lt;FairMQChannel&gt;&gt;&amp; channelsMap, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; channelList) <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#ad1164b33d22d3b47fe3b1a45a743be5c"> 95</a></span>&#160; <span class="keyword">virtual</span> FairMQUnmanagedRegionPtr <a class="code" href="classFairMQTransportFactory.html#ad1164b33d22d3b47fe3b1a45a743be5c">CreateUnmanagedRegion</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, FairMQRegionCallback callback = <span class="keyword">nullptr</span>, <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>, <span class="keywordtype">int</span> flags = 0) = 0;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">virtual</span> FairMQUnmanagedRegionPtr <a class="code" href="classFairMQTransportFactory.html#ad1164b33d22d3b47fe3b1a45a743be5c">CreateUnmanagedRegion</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, FairMQRegionBulkCallback callback = <span class="keyword">nullptr</span>, <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>, <span class="keywordtype">int</span> flags = 0) = 0;</div>
<div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#af71fd47062ac63a595df93c459421724"> 104</a></span>&#160; <span class="keyword">virtual</span> FairMQUnmanagedRegionPtr <a class="code" href="classFairMQTransportFactory.html#af71fd47062ac63a595df93c459421724">CreateUnmanagedRegion</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> int64_t userFlags, FairMQRegionCallback callback = <span class="keyword">nullptr</span>, <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>, <span class="keywordtype">int</span> flags = 0) = 0;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">virtual</span> FairMQUnmanagedRegionPtr <a class="code" href="classFairMQTransportFactory.html#ad1164b33d22d3b47fe3b1a45a743be5c">CreateUnmanagedRegion</a>(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> int64_t userFlags, FairMQRegionBulkCallback callback = <span class="keyword">nullptr</span>, <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>, <span class="keywordtype">int</span> flags = 0) = 0;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a812d5a69199f1fe78a940c6767b89a84"> 109</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQTransportFactory.html#a812d5a69199f1fe78a940c6767b89a84">SubscribeToRegionEvents</a>(FairMQRegionEventCallback callback) = 0;</div>
<div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a98280df275ac2da0d5c48c07259cd6a9"> 112</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classFairMQTransportFactory.html#a98280df275ac2da0d5c48c07259cd6a9">SubscribedToRegionEvents</a>() = 0;</div>
<div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a10a586ccf137d371fded40035d16ac93"> 114</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classFairMQTransportFactory.html#a10a586ccf137d371fded40035d16ac93">UnsubscribeFromRegionEvents</a>() = 0;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">virtual</span> std::vector&lt;FairMQRegionInfo&gt; GetRegionInfo() = 0;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classFairMQTransportFactory.html#a5c62d8792229cf3eec74d75e15cc6cf4"> 119</a></span>&#160; <span class="keyword">virtual</span> fair::mq::Transport <a class="code" href="classFairMQTransportFactory.html#a5c62d8792229cf3eec74d75e15cc6cf4">GetType</a>() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Interrupt() = 0;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Resume() = 0;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> Reset() = 0;</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="keyword">virtual</span> ~<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>() {};</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> CreateTransportFactory(<span class="keyword">const</span> std::string&amp; type, <span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span> = <span class="stringliteral">&quot;&quot;</span>, <span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>* config = <span class="keyword">nullptr</span>) -&gt; std::shared_ptr&lt;FairMQTransportFactory&gt;;</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="keyword">static</span> <span class="keywordtype">void</span> FairMQNoCleanup(<span class="keywordtype">void</span>* <span class="comment">/*data*/</span>, <span class="keywordtype">void</span>* <span class="comment">/*obj*/</span>)</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; }</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> FairMQSimpleMsgCleanup(<span class="keywordtype">void</span>* <span class="comment">/*data*/</span>, <span class="keywordtype">void</span>* obj)</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">delete</span> <span class="keyword">static_cast&lt;</span>T*<span class="keyword">&gt;</span>(obj);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</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">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; FairMQMessagePtr NewSimpleMessage(<span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// todo: is_trivially_copyable not available on gcc &lt; 5, workaround?</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// static_assert(std::is_trivially_copyable&lt;T&gt;::value, &quot;The argument type for NewSimpleMessage has to be trivially copyable!&quot;);</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; T* dataCopy = <span class="keyword">new</span> T(data);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>(dataCopy, <span class="keyword">sizeof</span>(T), FairMQSimpleMsgCleanup&lt;T&gt;, dataCopy);</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">template</span>&lt;std::<span class="keywordtype">size_t</span> N&gt;</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; FairMQMessagePtr NewSimpleMessage(<span class="keyword">const</span> <span class="keywordtype">char</span>(&amp;data)[N])</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; std::string* msgStr = <span class="keyword">new</span> std::string(data);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>(<span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(msgStr-&gt;c_str()), msgStr-&gt;length(), FairMQSimpleMsgCleanup&lt;std::string&gt;, msgStr);</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="l00155"></a><span class="lineno"> 155</span>&#160; FairMQMessagePtr NewSimpleMessage(<span class="keyword">const</span> std::string&amp; str)</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; std::string* msgStr = <span class="keyword">new</span> std::string(str);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>(<span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(msgStr-&gt;c_str()), msgStr-&gt;length(), FairMQSimpleMsgCleanup&lt;std::string&gt;, msgStr);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; FairMQMessagePtr NewStaticMessage(<span class="keyword">const</span> T&amp; data)</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>(data, <span class="keyword">sizeof</span>(T), FairMQNoCleanup, <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; FairMQMessagePtr NewStaticMessage(<span class="keyword">const</span> std::string&amp; str)</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">CreateMessage</a>(<span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(str.c_str()), str.length(), FairMQNoCleanup, <span class="keyword">nullptr</span>);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; }</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;};</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160;{</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="keyword">using</span> TransportFactory = <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>;</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1TransportFactoryError.html"> 178</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1TransportFactoryError.html">TransportFactoryError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; </div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQTRANSPORTFACTORY_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1Alignment_html"><div class="ttname"><a href="structfair_1_1mq_1_1Alignment.html">fair::mq::Alignment</a></div><div class="ttdef"><b>Definition:</b> FairMQMessage.h:25</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a10a586ccf137d371fded40035d16ac93"><div class="ttname"><a href="classFairMQTransportFactory.html#a10a586ccf137d371fded40035d16ac93">FairMQTransportFactory::UnsubscribeFromRegionEvents</a></div><div class="ttdeci">virtual void UnsubscribeFromRegionEvents()=0</div><div class="ttdoc">Unsubscribe from region events.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a9f794f9a073aaa6e0b2b623ad984a264"><div class="ttname"><a href="classFairMQTransportFactory.html#a9f794f9a073aaa6e0b2b623ad984a264">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage(fair::mq::Alignment alignment)=0</div><div class="ttdoc">Create empty FairMQMessage (for receiving), align received buffer to specified alignment.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a7fd308e4e5203814ca7012ef526d3fdf"><div class="ttname"><a href="classFairMQTransportFactory.html#a7fd308e4e5203814ca7012ef526d3fdf">FairMQTransportFactory::CreatePoller</a></div><div class="ttdeci">virtual FairMQPollerPtr CreatePoller(const std::unordered_map&lt; std::string, std::vector&lt; FairMQChannel &gt;&gt; &amp;channelsMap, const std::vector&lt; std::string &gt; &amp;channelList) const =0</div><div class="ttdoc">Create a poller for specific channels (all subchannels)</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a7cfe2327b906688096bea8854970c578"><div class="ttname"><a href="classFairMQTransportFactory.html#a7cfe2327b906688096bea8854970c578">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage(const size_t size)=0</div><div class="ttdoc">Create new FairMQMessage of specified size.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_ae4142711c309070b490d0e025eede5ab"><div class="ttname"><a href="classFairMQTransportFactory.html#ae4142711c309070b490d0e025eede5ab">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage(const size_t size, fair::mq::Alignment alignment)=0</div><div class="ttdoc">Create new FairMQMessage of specified size and alignment.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a9e3c89db0c9cd0414745d14dee0300d4"><div class="ttname"><a href="classFairMQTransportFactory.html#a9e3c89db0c9cd0414745d14dee0300d4">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage(void *data, const size_t size, fairmq_free_fn *ffn, void *hint=nullptr)=0</div><div class="ttdoc">Create new FairMQMessage with user provided buffer and size.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_aafbb0f83fc97a50e96c7e6616bc215c9"><div class="ttname"><a href="classFairMQTransportFactory.html#aafbb0f83fc97a50e96c7e6616bc215c9">FairMQTransportFactory::FairMQTransportFactory</a></div><div class="ttdeci">FairMQTransportFactory(const std::string &amp;id)</div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.cxx:26</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a8b427b161f32f83047885170457f98e6"><div class="ttname"><a href="classFairMQTransportFactory.html#a8b427b161f32f83047885170457f98e6">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage(FairMQUnmanagedRegionPtr &amp;unmanagedRegion, void *data, const size_t size, void *hint=0)=0</div><div class="ttdoc">create a message with the buffer located within the corresponding unmanaged region</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a4be5580ac0bb62cd891fc1f13f1b8a58"><div class="ttname"><a href="classFairMQTransportFactory.html#a4be5580ac0bb62cd891fc1f13f1b8a58">FairMQTransportFactory::GetMemoryResource</a></div><div class="ttdeci">fair::mq::ChannelResource * GetMemoryResource()</div><div class="ttdoc">Get a pointer to the associated polymorphic memory resource.</div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:46</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_ab38e3409319ed0d9055078a6e5bb3ef8"><div class="ttname"><a href="classFairMQTransportFactory.html#ab38e3409319ed0d9055078a6e5bb3ef8">FairMQTransportFactory::CreateSocket</a></div><div class="ttdeci">virtual FairMQSocketPtr CreateSocket(const std::string &amp;type, const std::string &amp;name)=0</div><div class="ttdoc">Create a socket.</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ChannelResource_html"><div class="ttname"><a href="classfair_1_1mq_1_1ChannelResource.html">fair::mq::ChannelResource</a></div><div class="ttdef"><b>Definition:</b> MemoryResources.h:58</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a5c62d8792229cf3eec74d75e15cc6cf4"><div class="ttname"><a href="classFairMQTransportFactory.html#a5c62d8792229cf3eec74d75e15cc6cf4">FairMQTransportFactory::GetType</a></div><div class="ttdeci">virtual fair::mq::Transport GetType() const =0</div><div class="ttdoc">Get transport type.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_af71fd47062ac63a595df93c459421724"><div class="ttname"><a href="classFairMQTransportFactory.html#af71fd47062ac63a595df93c459421724">FairMQTransportFactory::CreateUnmanagedRegion</a></div><div class="ttdeci">virtual FairMQUnmanagedRegionPtr CreateUnmanagedRegion(const size_t size, const int64_t userFlags, FairMQRegionCallback callback=nullptr, const std::string &amp;path=&quot;&quot;, int flags=0)=0</div><div class="ttdoc">Create new UnmanagedRegion.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_ae692f2e00d9804a5431b719e3004da59"><div class="ttname"><a href="classFairMQTransportFactory.html#ae692f2e00d9804a5431b719e3004da59">FairMQTransportFactory::CreatePoller</a></div><div class="ttdeci">virtual FairMQPollerPtr CreatePoller(const std::vector&lt; FairMQChannel * &gt; &amp;channels) const =0</div><div class="ttdoc">Create a poller for specific channels.</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a6de98e1652b6ad68e4d78dd31eea40cc"><div class="ttname"><a href="classFairMQTransportFactory.html#a6de98e1652b6ad68e4d78dd31eea40cc">FairMQTransportFactory::CreatePoller</a></div><div class="ttdeci">virtual FairMQPollerPtr CreatePoller(const std::vector&lt; FairMQChannel &gt; &amp;channels) const =0</div><div class="ttdoc">Create a poller for a single channel (all subchannels)</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_ad1164b33d22d3b47fe3b1a45a743be5c"><div class="ttname"><a href="classFairMQTransportFactory.html#ad1164b33d22d3b47fe3b1a45a743be5c">FairMQTransportFactory::CreateUnmanagedRegion</a></div><div class="ttdeci">virtual FairMQUnmanagedRegionPtr CreateUnmanagedRegion(const size_t size, FairMQRegionCallback callback=nullptr, const std::string &amp;path=&quot;&quot;, int flags=0)=0</div><div class="ttdoc">Create new UnmanagedRegion.</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_abb42782c89c1b412051f4c448fbb7696"><div class="ttname"><a href="classFairMQTransportFactory.html#abb42782c89c1b412051f4c448fbb7696">FairMQTransportFactory::CreateMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr CreateMessage()=0</div><div class="ttdoc">Create empty FairMQMessage (for receiving)</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a812d5a69199f1fe78a940c6767b89a84"><div class="ttname"><a href="classFairMQTransportFactory.html#a812d5a69199f1fe78a940c6767b89a84">FairMQTransportFactory::SubscribeToRegionEvents</a></div><div class="ttdeci">virtual void SubscribeToRegionEvents(FairMQRegionEventCallback callback)=0</div><div class="ttdoc">Subscribe to region events (creation, destruction, ...)</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1TransportFactoryError_html"><div class="ttname"><a href="structfair_1_1mq_1_1TransportFactoryError.html">fair::mq::TransportFactoryError</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:178</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html_a98280df275ac2da0d5c48c07259cd6a9"><div class="ttname"><a href="classFairMQTransportFactory.html#a98280df275ac2da0d5c48c07259cd6a9">FairMQTransportFactory::SubscribedToRegionEvents</a></div><div class="ttdeci">virtual bool SubscribedToRegionEvents()=0</div><div class="ttdoc">Check if there is an active subscription to region events.</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/FairMQUnmanagedRegion.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQUnmanagedRegion.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQUNMANAGEDREGION_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQUNMANAGEDREGION_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cstddef&gt;</span> <span class="comment">// size_t</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span> <span class="comment">// uint32_t</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// std::unique_ptr</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span> <span class="comment">// std::function</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span> <span class="comment">// std::ostream</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">enum class</span> FairMQRegionEvent : int</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;{</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; created,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; destroyed,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; local_only</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; </div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="structFairMQRegionInfo.html"> 28</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structFairMQRegionInfo.html">FairMQRegionInfo</a></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <a class="code" href="structFairMQRegionInfo.html">FairMQRegionInfo</a>()</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; : managed(<span class="keyword">true</span>)</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; , id(0)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; , ptr(<span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; , size(0)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; , flags(0)</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; , event(FairMQRegionEvent::created)</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; {}</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <a class="code" href="structFairMQRegionInfo.html">FairMQRegionInfo</a>(<span class="keywordtype">bool</span> _managed, uint64_t _id, <span class="keywordtype">void</span>* _ptr, <span class="keywordtype">size_t</span> _size, int64_t _flags, FairMQRegionEvent _event)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; : managed(_managed)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; , id(_id)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; , ptr(_ptr)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; , size(_size)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; , flags(_flags)</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; , event(_event)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; {}</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordtype">bool</span> managed; <span class="comment">// managed/unmanaged</span></div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; uint64_t id; <span class="comment">// id of the region</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">void</span>* ptr; <span class="comment">// pointer to the start of the region</span></div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">size_t</span> size; <span class="comment">// region size</span></div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; int64_t flags; <span class="comment">// custom flags set by the creator</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; FairMQRegionEvent event;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;};</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="structFairMQRegionBlock.html"> 56</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structFairMQRegionBlock.html">FairMQRegionBlock</a> {</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">void</span>* ptr;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">size_t</span> size;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">void</span>* hint;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="structFairMQRegionBlock.html">FairMQRegionBlock</a>(<span class="keywordtype">void</span>* p, <span class="keywordtype">size_t</span> s, <span class="keywordtype">void</span>* h)</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; : ptr(p), size(s), hint(h)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {}</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="keyword">using</span> FairMQRegionCallback = std::function&lt;void(<span class="keywordtype">void</span>*, <span class="keywordtype">size_t</span>, <span class="keywordtype">void</span>*)&gt;;</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="keyword">using</span> FairMQRegionBulkCallback = std::function&lt;void(<span class="keyword">const</span> std::vector&lt;FairMQRegionBlock&gt;&amp;)&gt;;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="keyword">using</span> FairMQRegionEventCallback = std::function&lt;void(<a class="code" href="structFairMQRegionInfo.html">FairMQRegionInfo</a>)&gt;;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
<div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classFairMQUnmanagedRegion.html"> 70</a></span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a></div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;{</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a>() {}</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a>(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* factory) : fTransport(factory) {}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span>* GetData() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">size_t</span> GetSize() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">virtual</span> uint16_t GetId() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> SetLinger(uint32_t linger) = 0;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">virtual</span> uint32_t GetLinger() <span class="keyword">const</span> = 0;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* GetTransport() { <span class="keywordflow">return</span> fTransport; }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">void</span> SetTransport(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* transport) { fTransport = transport; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a>() {};</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>* fTransport{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;};</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">using</span> FairMQUnmanagedRegionPtr = std::unique_ptr&lt;FairMQUnmanagedRegion&gt;;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> FairMQRegionEvent&amp; event)</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">switch</span> (event) {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">case</span> FairMQRegionEvent::created:</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;created&quot;</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">case</span> FairMQRegionEvent::destroyed:</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;destroyed&quot;</span>;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">case</span> FairMQRegionEvent::local_only:</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;local_only&quot;</span>;</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;unrecognized event&quot;</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;}</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="keyword">using</span> RegionCallback = FairMQRegionCallback;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">using</span> RegionBulkCallback = FairMQRegionBulkCallback;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="keyword">using</span> RegionEventCallback = FairMQRegionEventCallback;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="keyword">using</span> RegionEvent = FairMQRegionEvent;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;<span class="keyword">using</span> RegionInfo = <a class="code" href="structFairMQRegionInfo.html">FairMQRegionInfo</a>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;<span class="keyword">using</span> RegionBlock = <a class="code" href="structFairMQRegionBlock.html">FairMQRegionBlock</a>;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="keyword">using</span> UnmanagedRegion = <a class="code" href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a>;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;<span class="keyword">using</span> UnmanagedRegionPtr = FairMQUnmanagedRegionPtr;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQUNMANAGEDREGION_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructFairMQRegionBlock_html"><div class="ttname"><a href="structFairMQRegionBlock.html">FairMQRegionBlock</a></div><div class="ttdef"><b>Definition:</b> FairMQUnmanagedRegion.h:56</div></div>
<div class="ttc" id="astructFairMQRegionInfo_html"><div class="ttname"><a href="structFairMQRegionInfo.html">FairMQRegionInfo</a></div><div class="ttdef"><b>Definition:</b> FairMQUnmanagedRegion.h:29</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassFairMQUnmanagedRegion_html"><div class="ttname"><a href="classFairMQUnmanagedRegion.html">FairMQUnmanagedRegion</a></div><div class="ttdef"><b>Definition:</b> FairMQUnmanagedRegion.h:71</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,130 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/InstanceLimit.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">InstanceLimit.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_INSTANCELIMIT_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_INSTANCELIMIT_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;Strings.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Tag, <span class="keywordtype">int</span> Max&gt;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="keyword">struct </span>InstanceLimiter</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; InstanceLimiter() { Increment(); }</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; <span class="keyword">explicit</span> InstanceLimiter(<span class="keyword">const</span> InstanceLimiter&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">explicit</span> InstanceLimiter(InstanceLimiter&amp;&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; InstanceLimiter&amp; operator=(<span class="keyword">const</span> InstanceLimiter&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html"> 24</a></span>&#160; <a class="code" href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html">InstanceLimiter</a>&amp; operator=(<a class="code" href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html">InstanceLimiter</a>&amp;&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; ~<a class="code" href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html">InstanceLimiter</a>() { Decrement(); }</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">auto</span> GetCount() -&gt; <span class="keywordtype">int</span> { <span class="keywordflow">return</span> fCount; }</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keyword">auto</span> Increment() -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordflow">if</span> (fCount &lt; Max) {</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; ++fCount;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ToString(<span class="stringliteral">&quot;More than &quot;</span>, Max, <span class="stringliteral">&quot; instances of &quot;</span>, Tag(), <span class="stringliteral">&quot; in parallel not supported&quot;</span>));</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; }</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">auto</span> Decrement() -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordflow">if</span> (fCount &gt; 0) {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; --fCount;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> fCount;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;};</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> Tag, <span class="keywordtype">int</span> Max&gt;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keywordtype">int</span> InstanceLimiter&lt;Tag, Max&gt;::fCount(0);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_INSTANCELIMIT_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1InstanceLimiter_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html">fair::mq::tools::InstanceLimiter</a></div><div class="ttdef"><b>Definition:</b> InstanceLimit.h:25</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,120 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/JSONParser.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">JSONParser.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * File: FairMQParser.h</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * Author: winckler</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * Created on May 14, 2015, 5:01 PM</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> */</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_JSONPARSER_H</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIR_MQ_JSONPARSER_H</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">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/property_tree/ptree_fwd.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</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="keyword">struct </span>ParserError : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;fair::mq::Properties PtreeParser(<span class="keyword">const</span> boost::property_tree::ptree&amp; pt, <span class="keyword">const</span> std::string&amp; deviceId);</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;fair::mq::Properties JSONParser(<span class="keyword">const</span> std::string&amp; filename, <span class="keyword">const</span> std::string&amp; deviceId);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1ParserError.html"> 33</a></span>&#160;<span class="keyword">namespace </span>helper</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</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;fair::mq::Properties DeviceParser(<span class="keyword">const</span> boost::property_tree::ptree&amp; tree, <span class="keyword">const</span> std::string&amp; deviceId);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keywordtype">void</span> ChannelParser(<span class="keyword">const</span> boost::property_tree::ptree&amp; tree, fair::mq::Properties&amp; properties);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keywordtype">void</span> SubChannelParser(<span class="keyword">const</span> boost::property_tree::ptree&amp; tree, fair::mq::Properties&amp; properties, <span class="keyword">const</span> std::string&amp; channelName, <span class="keyword">const</span> fair::mq::Properties&amp; commonProperties);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;} <span class="comment">// helper namespace</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_JSONPARSER_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,745 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/shmem/Manager.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_6475741fe3587c0a949798307da6131d.html">shmem</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Manager.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SHMEM_MANAGER_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIR_MQ_SHMEM_MANAGER_H_</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">#include &quot;Common.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &quot;Region.h&quot;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;Monitor.h&quot;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;FairMQMessage.h&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptions.h&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</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="preprocessor">#include &lt;boost/date_time/posix_time/posix_time.hpp&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/ipc/message_queue.hpp&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/managed_shared_memory.hpp&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/sync/named_condition.hpp&gt;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/sync/named_mutex.hpp&gt;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;boost/process.hpp&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;boost/variant.hpp&gt;</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="preprocessor">#include &lt;cstdlib&gt;</span> <span class="comment">// getenv</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// make_unique</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;set&gt;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="preprocessor">#include &lt;sys/mman.h&gt;</span> <span class="comment">// mlock</span></div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></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; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">class </span>Manager</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;{</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; Manager(std::string shmId, std::string deviceId, <span class="keywordtype">size_t</span> size, <span class="keyword">const</span> ProgOptions* config)</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; : fShmId(std::move(shmId))</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; , fSegmentId(config ? config-&gt;GetProperty&lt;uint16_t&gt;(<span class="stringliteral">&quot;shm-segment-id&quot;</span>, 0) : 0)</div>
<div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1shmem_1_1Manager.html"> 60</a></span>&#160; , fDeviceId(std::move(deviceId))</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; , fSegments()</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; , fManagementSegment(boost::interprocess::open_or_create, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_mng&quot;</span>).c_str(), 6553600)</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; , fShmVoidAlloc(fManagementSegment.get_segment_manager())</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; , fShmMtx(boost::interprocess::open_or_create, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_mtx&quot;</span>).c_str())</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; , fRegionEventsCV(boost::interprocess::open_or_create, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_cv&quot;</span>).c_str())</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; , fRegionEventsSubscriptionActive(false)</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; , fNumObservedEvents(0)</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; , fDeviceCounter(nullptr)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; , fEventCounter(nullptr)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; , fShmSegments(nullptr)</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; , fShmRegions(nullptr)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; , fInterrupted(false)</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; , fMsgCounter(0)</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;#ifdef FAIRMQ_DEBUG_MODE</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; , fMsgDebug(nullptr)</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; , fShmMsgCounters(nullptr)</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;#endif</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; , fHeartbeatThread()</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; , fSendHeartbeats(true)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; , fThrowOnBadAlloc(config ? config-&gt;GetProperty&lt;bool&gt;(<span class="stringliteral">&quot;shm-throw-bad-alloc&quot;</span>, true) : true)</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; , fNoCleanup(config ? config-&gt;GetProperty&lt;bool&gt;(<span class="stringliteral">&quot;shm-no-cleanup&quot;</span>, false) : false)</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">bool</span> mlockSegment = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">bool</span> zeroSegment = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordtype">bool</span> autolaunchMonitor = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; std::string allocationAlgorithm(<span class="stringliteral">&quot;rbtree_best_fit&quot;</span>);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (config) {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; mlockSegment = config-&gt;GetProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;shm-mlock-segment&quot;</span>, mlockSegment);</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; zeroSegment = config-&gt;GetProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;shm-zero-segment&quot;</span>, zeroSegment);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; autolaunchMonitor = config-&gt;GetProperty&lt;<span class="keywordtype">bool</span>&gt;(<span class="stringliteral">&quot;shm-monitor&quot;</span>, autolaunchMonitor);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; allocationAlgorithm = config-&gt;GetProperty&lt;std::string&gt;(<span class="stringliteral">&quot;shm-allocation&quot;</span>, allocationAlgorithm);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;ProgOptions not available! Using defaults.&quot;</span>;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (autolaunchMonitor) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; StartMonitor(fShmId);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; fShmSegments = fManagementSegment.find_or_construct&lt;Uint16SegmentInfoHashMap&gt;(unique_instance)(fShmVoidAlloc);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; fEventCounter = fManagementSegment.find&lt;<a class="code" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">EventCounter</a>&gt;(unique_instance).first;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (fEventCounter) {</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;event counter found: &quot;</span> &lt;&lt; fEventCounter-&gt;fCount;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;no event counter found, creating one and initializing with 0&quot;</span>;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; fEventCounter = fManagementSegment.construct&lt;<a class="code" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">EventCounter</a>&gt;(unique_instance)(0);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;initialized event counter with: &quot;</span> &lt;&lt; fEventCounter-&gt;fCount;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> it = fShmSegments-&gt;find(fSegmentId);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (it == fShmSegments-&gt;end()) {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="comment">// no segment with given id exists, creating</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (allocationAlgorithm == <span class="stringliteral">&quot;rbtree_best_fit&quot;</span>) {</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; fSegments.emplace(fSegmentId, RBTreeBestFitSegment(create_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(fSegmentId)).c_str(), size));</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; fShmSegments-&gt;emplace(fSegmentId, AllocationAlgorithm::rbtree_best_fit);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (allocationAlgorithm == <span class="stringliteral">&quot;simple_seq_fit&quot;</span>) {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; fSegments.emplace(fSegmentId, SimpleSeqFitSegment(create_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(fSegmentId)).c_str(), size));</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; fShmSegments-&gt;emplace(fSegmentId, AllocationAlgorithm::simple_seq_fit);</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; ss &lt;&lt; <span class="stringliteral">&quot;Created &quot;</span>;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; (fEventCounter-&gt;fCount)++;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="comment">// found segment with the given id, opening</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span> (it-&gt;second.fAllocationAlgorithm == AllocationAlgorithm::rbtree_best_fit) {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; fSegments.emplace(fSegmentId, RBTreeBestFitSegment(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(fSegmentId)).c_str()));</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (allocationAlgorithm != <span class="stringliteral">&quot;rbtree_best_fit&quot;</span>) {</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;Allocation algorithm of the opened segment is rbtree_best_fit, but requested is &quot;</span> &lt;&lt; allocationAlgorithm &lt;&lt; <span class="stringliteral">&quot;. Ignoring requested setting.&quot;</span>;</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; allocationAlgorithm = <span class="stringliteral">&quot;rbtree_best_fit&quot;</span>;</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="keywordflow">else</span> {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; fSegments.emplace(fSegmentId, SimpleSeqFitSegment(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(fSegmentId)).c_str()));</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (allocationAlgorithm != <span class="stringliteral">&quot;simple_seq_fit&quot;</span>) {</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;Allocation algorithm of the opened segment is simple_seq_fit, but requested is &quot;</span> &lt;&lt; allocationAlgorithm &lt;&lt; <span class="stringliteral">&quot;. Ignoring requested setting.&quot;</span>;</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; allocationAlgorithm = <span class="stringliteral">&quot;simple_seq_fit&quot;</span>;</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Opened &quot;</span>;</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;shared memory segment &#39;&quot;</span> &lt;&lt; <span class="stringliteral">&quot;fmq_&quot;</span> &lt;&lt; fShmId &lt;&lt; <span class="stringliteral">&quot;_m_&quot;</span> &lt;&lt; fSegmentId &lt;&lt; <span class="stringliteral">&quot;&#39;.&quot;</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; &lt;&lt; <span class="stringliteral">&quot; Size: &quot;</span> &lt;&lt; boost::apply_visitor(<a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentSize.html">SegmentSize</a>{}, fSegments.at(fSegmentId)) &lt;&lt; <span class="stringliteral">&quot; bytes.&quot;</span></div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; &lt;&lt; <span class="stringliteral">&quot; Available: &quot;</span> &lt;&lt; boost::apply_visitor(<a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html">SegmentFreeMemory</a>{}, fSegments.at(fSegmentId)) &lt;&lt; <span class="stringliteral">&quot; bytes.&quot;</span></div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; &lt;&lt; <span class="stringliteral">&quot; Allocation algorithm: &quot;</span> &lt;&lt; allocationAlgorithm;</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; LOG(debug) &lt;&lt; ss.str();</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; } <span class="keywordflow">catch</span>(interprocess_exception&amp; bie) {</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Failed to create/open shared memory segment (&quot;</span> &lt;&lt; <span class="stringliteral">&quot;fmq_&quot;</span> &lt;&lt; fShmId &lt;&lt; <span class="stringliteral">&quot;_m_&quot;</span> &lt;&lt; fSegmentId &lt;&lt; <span class="stringliteral">&quot;): &quot;</span> &lt;&lt; bie.what();</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(tools::ToString(<span class="stringliteral">&quot;Failed to create/open shared memory segment (&quot;</span>, <span class="stringliteral">&quot;fmq_&quot;</span>, fShmId, <span class="stringliteral">&quot;_m_&quot;</span>, fSegmentId, <span class="stringliteral">&quot;): &quot;</span>, bie.what()));</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">if</span> (mlockSegment) {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Locking the managed segment memory pages...&quot;</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (mlock(boost::apply_visitor(<a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html">SegmentAddress</a>{}, fSegments.at(fSegmentId)), boost::apply_visitor(<a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentSize.html">SegmentSize</a>{}, fSegments.at(fSegmentId))) == -1) {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not lock the managed segment memory. Code: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="stringliteral">&quot;, reason: &quot;</span> &lt;&lt; strerror(errno);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Successfully locked the managed segment memory pages.&quot;</span>;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; }</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">if</span> (zeroSegment) {</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Zeroing the managed segment free memory...&quot;</span>;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; boost::apply_visitor(<a class="code" href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html">SegmentMemoryZeroer</a>{}, fSegments.at(fSegmentId));</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Successfully zeroed the managed segment free memory.&quot;</span>;</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; }</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; fShmRegions = fManagementSegment.find_or_construct&lt;Uint16RegionInfoHashMap&gt;(unique_instance)(fShmVoidAlloc);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; fDeviceCounter = fManagementSegment.find&lt;<a class="code" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">DeviceCounter</a>&gt;(unique_instance).first;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">if</span> (fDeviceCounter) {</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;device counter found, with value of &quot;</span> &lt;&lt; fDeviceCounter-&gt;fCount &lt;&lt; <span class="stringliteral">&quot;. incrementing.&quot;</span>;</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; (fDeviceCounter-&gt;fCount)++;</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;incremented device counter, now: &quot;</span> &lt;&lt; fDeviceCounter-&gt;fCount;</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;no device counter found, creating one and initializing with 1&quot;</span>;</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; fDeviceCounter = fManagementSegment.construct&lt;<a class="code" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">DeviceCounter</a>&gt;(unique_instance)(1);</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;initialized device counter with: &quot;</span> &lt;&lt; fDeviceCounter-&gt;fCount;</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; }</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; fMsgDebug = fManagementSegment.find_or_construct&lt;Uint16MsgDebugMapHashMap&gt;(unique_instance)(fShmVoidAlloc);</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; fShmMsgCounters = fManagementSegment.find_or_construct&lt;Uint16MsgCounterHashMap&gt;(unique_instance)(fShmVoidAlloc);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; fHeartbeatThread = std::thread(&amp;Manager::SendHeartbeats, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Manager.html">Manager</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Manager.html">Manager</a>(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1shmem_1_1Manager.html">Manager</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Manager.html">Manager</a> operator=(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1shmem_1_1Manager.html">Manager</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> StartMonitor(<span class="keyword">const</span> std::string&amp; <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; named_mutex monitorStatus(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + <span class="keywordtype">id</span> + <span class="stringliteral">&quot;_ms&quot;</span>).c_str());</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Found fairmq-shmmonitor for shared memory id &quot;</span> &lt;&lt; id;</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; } <span class="keywordflow">catch</span> (interprocess_exception&amp;) {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;no fairmq-shmmonitor found for shared memory id &quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;, starting...&quot;</span>;</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keyword">auto</span> env = boost::this_process::environment();</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; std::vector&lt;boost::filesystem::path&gt; ownPath = boost::this_process::path();</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; </div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* fmqp = getenv(<span class="stringliteral">&quot;FAIRMQ_PATH&quot;</span>)) {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; ownPath.insert(ownPath.begin(), boost::filesystem::path(fmqp));</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; boost::filesystem::path p = boost::process::search_path(<span class="stringliteral">&quot;fairmq-shmmonitor&quot;</span>, ownPath);</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">if</span> (!p.empty()) {</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; boost::process::spawn(p, <span class="stringliteral">&quot;-x&quot;</span>, <span class="stringliteral">&quot;--shmid&quot;</span>, <span class="keywordtype">id</span>, <span class="stringliteral">&quot;-d&quot;</span>, <span class="stringliteral">&quot;-t&quot;</span>, <span class="stringliteral">&quot;2000&quot;</span>, env);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> numTries = 0;</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">do</span> {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; named_mutex monitorStatus(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + <span class="keywordtype">id</span> + <span class="stringliteral">&quot;_ms&quot;</span>).c_str());</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Started fairmq-shmmonitor for shared memory id &quot;</span> &lt;&lt; id;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; } <span class="keywordflow">catch</span> (interprocess_exception&amp;) {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; std::this_thread::sleep_for(std::chrono::milliseconds(10));</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">if</span> (++numTries &gt; 1000) {</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Did not get response from fairmq-shmmonitor after &quot;</span> &lt;&lt; 10 * 1000 &lt;&lt; <span class="stringliteral">&quot; milliseconds. Exiting.&quot;</span>;</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(tools::ToString(<span class="stringliteral">&quot;Did not get response from fairmq-shmmonitor after &quot;</span>, 10 * 1000, <span class="stringliteral">&quot; milliseconds. Exiting.&quot;</span>));</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; }</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; }</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; } <span class="keywordflow">while</span> (<span class="keyword">true</span>);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;could not find fairmq-shmmonitor in the path&quot;</span>;</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; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; }</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; <span class="keywordtype">void</span> Interrupt() { fInterrupted.store(<span class="keyword">true</span>); }</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">void</span> Resume() { fInterrupted.store(<span class="keyword">false</span>); }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">void</span> Reset()</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (fMsgCounter.load() != 0) {</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Message counter during Reset expected to be 0, found: &quot;</span> &lt;&lt; fMsgCounter.load();</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">throw</span> MessageError(tools::ToString(<span class="stringliteral">&quot;Message counter during Reset expected to be 0, found: &quot;</span>, fMsgCounter.load()));</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; }</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">bool</span> Interrupted() { <span class="keywordflow">return</span> fInterrupted.load(); }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; std::pair&lt;boost::interprocess::mapped_region*, uint16_t&gt; CreateRegion(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size,</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keyword">const</span> int64_t userFlags,</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; RegionCallback callback,</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; RegionBulkCallback bulkCallback,</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">const</span> std::string&amp; path = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordtype">int</span> flags = 0)</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; {</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; std::pair&lt;mapped_region*, uint16_t&gt; result;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; uint16_t <span class="keywordtype">id</span> = 0;</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; RegionCounter* rc = fManagementSegment.find&lt;RegionCounter&gt;(unique_instance).first;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keywordflow">if</span> (rc) {</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;region counter found, with value of &quot;</span> &lt;&lt; rc-&gt;fCount &lt;&lt; <span class="stringliteral">&quot;. incrementing.&quot;</span>;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; (rc-&gt;fCount)++;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;incremented region counter, now: &quot;</span> &lt;&lt; rc-&gt;fCount;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;no region counter found, creating one and initializing with 1&quot;</span>;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; rc = fManagementSegment.construct&lt;RegionCounter&gt;(unique_instance)(1);</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;initialized region counter with: &quot;</span> &lt;&lt; rc-&gt;fCount;</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; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordtype">id</span> = rc-&gt;fCount;</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; </div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keyword">auto</span> it = fRegions.find(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (it != fRegions.end()) {</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Trying to create a region that already exists&quot;</span>;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> {<span class="keyword">nullptr</span>, <span class="keywordtype">id</span>};</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// create region info</span></div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; fShmRegions-&gt;emplace(<span class="keywordtype">id</span>, RegionInfo(path.c_str(), flags, userFlags, fShmVoidAlloc));</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">auto</span> r = fRegions.emplace(<span class="keywordtype">id</span>, std::make_unique&lt;Region&gt;(fShmId, <span class="keywordtype">id</span>, size, <span class="keyword">false</span>, callback, bulkCallback, path, flags));</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;Created region with id &#39;&quot; &lt;&lt; id &lt;&lt; &quot;&#39;, path: &#39;&quot; &lt;&lt; path &lt;&lt; &quot;&#39;, flags: &#39;&quot; &lt;&lt; flags &lt;&lt; &quot;&#39;&quot;;</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; r.first-&gt;second-&gt;StartReceivingAcks();</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; result.first = &amp;(r.first-&gt;second-&gt;fRegion);</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; result.second = id;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; (fEventCounter-&gt;fCount)++;</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; }</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; fRegionEventsCV.notify_all();</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; </div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> result;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; } <span class="keywordflow">catch</span> (interprocess_exception&amp; e) {</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;cannot create region. Already created/not cleaned up?&quot;</span>;</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; LOG(error) &lt;&lt; e.what();</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">throw</span>;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; </div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; Region* GetRegion(<span class="keyword">const</span> uint16_t <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keywordflow">return</span> GetRegionUnsafe(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; }</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; Region* GetRegionUnsafe(<span class="keyword">const</span> uint16_t <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; {</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="comment">// remote region could actually be a local one if a message originates from this device (has been sent out and returned)</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="keyword">auto</span> it = fRegions.find(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">if</span> (it != fRegions.end()) {</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordflow">return</span> it-&gt;second.get();</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="comment">// get region info</span></div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; RegionInfo regionInfo = fShmRegions-&gt;at(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; std::string path = regionInfo.fPath.c_str();</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">int</span> flags = regionInfo.fFlags;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;Located remote region with id &#39;&quot; &lt;&lt; id &lt;&lt; &quot;&#39;, path: &#39;&quot; &lt;&lt; path &lt;&lt; &quot;&#39;, flags: &#39;&quot; &lt;&lt; flags &lt;&lt; &quot;&#39;&quot;;</span></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; <span class="keyword">auto</span> r = fRegions.emplace(<span class="keywordtype">id</span>, std::make_unique&lt;Region&gt;(fShmId, <span class="keywordtype">id</span>, 0, <span class="keyword">true</span>, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, path, flags));</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> r.first-&gt;second.get();</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; } <span class="keywordflow">catch</span> (std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not get remote region with id &#39;&quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;&#39;. Does the region creator run with the same session id?&quot;</span>;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; LOG(error) &lt;&lt; oor.what();</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; } <span class="keywordflow">catch</span> (boost::interprocess::interprocess_exception&amp; e) {</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;Could not get remote region for id &#39;&quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; }</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; }</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; }</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordtype">void</span> RemoveRegion(<span class="keyword">const</span> uint16_t <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; fRegions.erase(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; fShmRegions-&gt;at(<span class="keywordtype">id</span>).fDestroyed = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; (fEventCounter-&gt;fCount)++;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; }</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; fRegionEventsCV.notify_all();</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; }</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; </div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; std::vector&lt;fair::mq::RegionInfo&gt; GetRegionInfo()</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordflow">return</span> GetRegionInfoUnsafe();</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; </div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; std::vector&lt;fair::mq::RegionInfo&gt; GetRegionInfoUnsafe()</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; std::vector&lt;fair::mq::RegionInfo&gt; result;</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; </div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; e : *fShmRegions) {</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="structFairMQRegionInfo.html">fair::mq::RegionInfo</a> info;</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; info.managed = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; info.id = e.first;</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; info.flags = e.second.fUserFlags;</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; info.event = e.second.fDestroyed ? RegionEvent::destroyed : RegionEvent::created;</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (!e.second.fDestroyed) {</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">auto</span> region = GetRegionUnsafe(info.id);</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; info.ptr = region-&gt;fRegion.get_address();</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; info.size = region-&gt;fRegion.get_size();</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; info.ptr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; info.size = 0;</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; result.push_back(info);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; </div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; e : *fShmSegments) {</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// make sure any segments in the session are found</span></div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; GetSegment(e.first);</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="structFairMQRegionInfo.html">fair::mq::RegionInfo</a> info;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; info.managed = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; info.id = e.first;</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; info.event = RegionEvent::created;</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; info.ptr = boost::apply_visitor(SegmentAddress{}, fSegments.at(e.first));</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; info.size = boost::apply_visitor(SegmentSize{}, fSegments.at(e.first));</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; result.push_back(info);</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; } <span class="keywordflow">catch</span> (<span class="keyword">const</span> std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;could not find segment with id &quot;</span> &lt;&lt; e.first;</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; LOG(error) &lt;&lt; oor.what();</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</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="keywordflow">return</span> result;</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; </div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">void</span> SubscribeToRegionEvents(RegionEventCallback callback)</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; {</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">if</span> (fRegionEventThread.joinable()) {</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Already subscribed. Overwriting previous subscription.&quot;</span>;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; fRegionEventsSubscriptionActive = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; lock.unlock();</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; fRegionEventsCV.notify_all();</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; fRegionEventThread.join();</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; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; fRegionEventCallback = callback;</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; fRegionEventsSubscriptionActive = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; fRegionEventThread = std::thread(&amp;Manager::RegionEventsSubscription, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; }</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; </div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordtype">bool</span> SubscribedToRegionEvents() { <span class="keywordflow">return</span> fRegionEventThread.joinable(); }</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">void</span> UnsubscribeFromRegionEvents()</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; {</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">if</span> (fRegionEventThread.joinable()) {</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; fRegionEventsSubscriptionActive = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; lock.unlock();</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; fRegionEventsCV.notify_all();</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; fRegionEventThread.join();</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; lock.lock();</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; fRegionEventCallback = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; </div>
<div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keywordtype">void</span> RegionEventsSubscription()</div>
<div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; {</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">while</span> (fRegionEventsSubscriptionActive) {</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keyword">auto</span> infos = GetRegionInfoUnsafe();</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; i : infos) {</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">auto</span> el = fObservedRegionEvents.find({i.id, i.managed});</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">if</span> (el == fObservedRegionEvents.end()) {</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; fRegionEventCallback(i);</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; fObservedRegionEvents.emplace(std::make_pair(i.id, i.managed), i.event);</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; ++fNumObservedEvents;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">if</span> (el-&gt;second == RegionEvent::created &amp;&amp; i.event == RegionEvent::destroyed) {</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; fRegionEventCallback(i);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; el-&gt;second = i.event;</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; ++fNumObservedEvents;</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;ignoring event for id&quot; &lt;&lt; i.id &lt;&lt; &quot;:&quot;;</span></div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;incoming event: &quot; &lt;&lt; i.event;</span></div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;stored event: &quot; &lt;&lt; el-&gt;second;</span></div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</div>
<div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
<div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; fRegionEventsCV.wait(lock, [&amp;] { <span class="keywordflow">return</span> !fRegionEventsSubscriptionActive || fNumObservedEvents != fEventCounter-&gt;fCount; });</div>
<div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; </div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">void</span> IncrementMsgCounter() { fMsgCounter.fetch_add(1, std::memory_order_relaxed); }</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordtype">void</span> DecrementMsgCounter() { fMsgCounter.fetch_sub(1, std::memory_order_relaxed); }</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; </div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordtype">void</span> IncrementShmMsgCounter(uint16_t segmentId) { ++((*fShmMsgCounters)[segmentId].fCount); }</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordtype">void</span> DecrementShmMsgCounter(uint16_t segmentId) { --((*fShmMsgCounters)[segmentId].fCount); }</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;<span class="preprocessor">#endif</span></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; boost::interprocess::named_mutex&amp; GetMtx() { <span class="keywordflow">return</span> fShmMtx; }</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordtype">void</span> SendHeartbeats()</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; std::string controlQueueName(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_cq&quot;</span>);</div>
<div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fHeartbeatsMtx);</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">while</span> (fSendHeartbeats) {</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; boost::interprocess::message_queue mq(boost::interprocess::open_only, controlQueueName.c_str());</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; boost::posix_time::ptime sndTill = boost::posix_time::microsec_clock::universal_time() + boost::posix_time::milliseconds(100);</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (mq.timed_send(fDeviceId.c_str(), fDeviceId.size(), 0, sndTill)) {</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; fHeartbeatsCV.wait_for(lock, std::chrono::milliseconds(100), [&amp;]() { <span class="keywordflow">return</span> !fSendHeartbeats; });</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;control queue timeout&quot;</span>;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; }</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; } <span class="keywordflow">catch</span> (boost::interprocess::interprocess_exception&amp; ie) {</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; fHeartbeatsCV.wait_for(lock, std::chrono::milliseconds(500), [&amp;]() { <span class="keywordflow">return</span> !fSendHeartbeats; });</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;no &quot; &lt;&lt; controlQueueName &lt;&lt; &quot; found&quot;;</span></div>
<div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; }</div>
<div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; }</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</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="keywordtype">bool</span> ThrowingOnBadAlloc()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fThrowOnBadAlloc; }</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; </div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordtype">void</span> GetSegment(uint16_t <span class="keywordtype">id</span>)</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; {</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keyword">auto</span> it = fSegments.find(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">if</span> (it == fSegments.end()) {</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="comment">// get region info</span></div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; SegmentInfo segmentInfo = fShmSegments-&gt;at(<span class="keywordtype">id</span>);</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Located segment with id &#39;&quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; </div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; </div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> (segmentInfo.fAllocationAlgorithm == AllocationAlgorithm::rbtree_best_fit) {</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; fSegments.emplace(<span class="keywordtype">id</span>, RBTreeBestFitSegment(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(<span class="keywordtype">id</span>)).c_str()));</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; fSegments.emplace(<span class="keywordtype">id</span>, SimpleSeqFitSegment(open_only, std::string(<span class="stringliteral">&quot;fmq_&quot;</span> + fShmId + <span class="stringliteral">&quot;_m_&quot;</span> + std::to_string(<span class="keywordtype">id</span>)).c_str()));</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; }</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; } <span class="keywordflow">catch</span> (std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not get segment with id &#39;&quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;&#39;: &quot;</span> &lt;&lt; oor.what();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; } <span class="keywordflow">catch</span> (boost::interprocess::interprocess_exception&amp; bie) {</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not get segment with id &#39;&quot;</span> &lt;&lt; <span class="keywordtype">id</span> &lt;&lt; <span class="stringliteral">&quot;&#39;: &quot;</span> &lt;&lt; bie.what();</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; }</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; }</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; }</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; </div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; boost::interprocess::managed_shared_memory::handle_t GetHandleFromAddress(<span class="keyword">const</span> <span class="keywordtype">void</span>* ptr, uint16_t segmentId)<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="keywordflow">return</span> boost::apply_visitor(SegmentHandleFromAddress{ptr}, fSegments.at(segmentId));</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; }</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordtype">void</span>* GetAddressFromHandle(<span class="keyword">const</span> boost::interprocess::managed_shared_memory::handle_t handle, uint16_t segmentId)<span class="keyword"> const</span></div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">return</span> boost::apply_visitor(SegmentAddressFromHandle{handle}, fSegments.at(segmentId));</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; </div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <span class="keywordtype">char</span>* Allocate(<span class="keyword">const</span> <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> alignment = 0)</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <span class="keywordtype">char</span>* ptr = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="comment">// tools::RateLimiter rateLimiter(20);</span></div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; </div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <span class="keywordflow">while</span> (ptr == <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="comment">// boost::interprocess::managed_shared_memory::size_type actualSize = size;</span></div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="comment">// char* hint = 0; // unused for boost::interprocess::allocate_new</span></div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <span class="comment">// ptr = fSegments.at(fSegmentId).allocation_command&lt;char&gt;(boost::interprocess::allocate_new, size, actualSize, hint);</span></div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordtype">size_t</span> segmentSize = boost::apply_visitor(SegmentSize{}, fSegments.at(fSegmentId));</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (size &gt; segmentSize) {</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">throw</span> MessageBadAlloc(tools::ToString(<span class="stringliteral">&quot;Requested message size (&quot;</span>, size, <span class="stringliteral">&quot;) exceeds segment size (&quot;</span>, segmentSize, <span class="stringliteral">&quot;)&quot;</span>));</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">if</span> (alignment == 0) {</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(boost::apply_visitor(SegmentAllocate{size}, fSegments.at(fSegmentId)));</div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; ptr = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(boost::apply_visitor(SegmentAllocateAligned{size, alignment}, fSegments.at(fSegmentId)));</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; } <span class="keywordflow">catch</span> (boost::interprocess::bad_alloc&amp; ba) {</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; &quot;Shared memory full...&quot;;</span></div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">if</span> (ThrowingOnBadAlloc()) {</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">throw</span> MessageBadAlloc(tools::ToString(<span class="stringliteral">&quot;shmem: could not create a message of size &quot;</span>, size, <span class="stringliteral">&quot;, alignment: &quot;</span>, (alignment != 0) ? std::to_string(alignment) : <span class="stringliteral">&quot;default&quot;</span>, <span class="stringliteral">&quot;, free memory: &quot;</span>, boost::apply_visitor(SegmentFreeMemory{}, fSegments.at(fSegmentId))));</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="comment">// rateLimiter.maybe_sleep();</span></div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; std::this_thread::sleep_for(std::chrono::milliseconds(50));</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">if</span> (Interrupted()) {</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> ptr;</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; IncrementShmMsgCounter(fSegmentId);</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">if</span> (fMsgDebug-&gt;count(fSegmentId) == 0) {</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; (*fMsgDebug).emplace(fSegmentId, fShmVoidAlloc);</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; (*fMsgDebug).at(fSegmentId).emplace(</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(GetHandleFromAddress(ptr, fSegmentId)),</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; MsgDebug(getpid(), size, std::chrono::system_clock::now().time_since_epoch().count())</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; );</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; }</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <span class="keywordflow">return</span> ptr;</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; </div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordtype">void</span> Deallocate(boost::interprocess::managed_shared_memory::handle_t handle, uint16_t segmentId)</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; boost::apply_visitor(SegmentDeallocate{GetAddressFromHandle(handle, segmentId)}, fSegments.at(segmentId));</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; boost::interprocess::scoped_lock&lt;boost::interprocess::named_mutex&gt; lock(fShmMtx);</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; DecrementShmMsgCounter(segmentId);</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; (*fMsgDebug).at(segmentId).erase(handle);</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; } <span class="keywordflow">catch</span>(<span class="keyword">const</span> std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;could not locate debug container for &quot;</span> &lt;&lt; segmentId &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; oor.what();</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; }</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160;<span class="preprocessor">#endif</span></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="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordtype">char</span>* ShrinkInPlace(<span class="keywordtype">size_t</span> newSize, <span class="keywordtype">char</span>* localPtr, uint16_t segmentId)</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; {</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> boost::apply_visitor(SegmentBufferShrink{newSize, localPtr}, fSegments.at(segmentId));</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; }</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; </div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; uint16_t GetSegmentId()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fSegmentId; }</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; ~Manager()</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; {</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordtype">bool</span> lastRemoved = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; </div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; UnsubscribeFromRegionEvents();</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; </div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; {</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fHeartbeatsMtx);</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; fSendHeartbeats = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; }</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; fHeartbeatsCV.notify_one();</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (fHeartbeatThread.joinable()) {</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; fHeartbeatThread.join();</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; </div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; boost::interprocess::scoped_lock&lt;named_mutex&gt; lock(fShmMtx);</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; (fDeviceCounter-&gt;fCount)--;</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; </div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordflow">if</span> (fDeviceCounter-&gt;fCount == 0) {</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Last segment user, &quot;</span> &lt;&lt; (fNoCleanup ? <span class="stringliteral">&quot;skipping removal (--shm-no-cleanup is true).&quot;</span> : <span class="stringliteral">&quot;removing segment.&quot;</span>);</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; lastRemoved = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Other segment users present (&quot;</span> &lt;&lt; fDeviceCounter-&gt;fCount &lt;&lt; <span class="stringliteral">&quot;), skipping removal.&quot;</span>;</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; } <span class="keywordflow">catch</span> (interprocess_exception&amp; e) {</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Manager could not acquire lock: &quot;</span> &lt;&lt; e.what();</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; </div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (lastRemoved &amp;&amp; !fNoCleanup) {</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html#a612e661e8ff850117604565b5a55c8fe">Monitor::Cleanup</a>(ShmId{fShmId});</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; }</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; std::string fShmId;</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; uint16_t fSegmentId;</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; std::unordered_map&lt;uint16_t, boost::variant&lt;RBTreeBestFitSegment, SimpleSeqFitSegment&gt;&gt; fSegments;</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; boost::interprocess::managed_shared_memory fManagementSegment;</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; VoidAlloc fShmVoidAlloc;</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; boost::interprocess::named_mutex fShmMtx;</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; </div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; boost::interprocess::named_condition fRegionEventsCV;</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; std::thread fRegionEventThread;</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordtype">bool</span> fRegionEventsSubscriptionActive;</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; std::function&lt;void(<a class="code" href="structFairMQRegionInfo.html">fair::mq::RegionInfo</a>)&gt; fRegionEventCallback;</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; std::map&lt;std::pair&lt;uint16_t, bool&gt;, RegionEvent&gt; fObservedRegionEvents;</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; uint64_t fNumObservedEvents;</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; DeviceCounter* fDeviceCounter;</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; EventCounter* fEventCounter;</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; Uint16SegmentInfoHashMap* fShmSegments;</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; Uint16RegionInfoHashMap* fShmRegions;</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; std::unordered_map&lt;uint16_t, std::unique_ptr&lt;Region&gt;&gt; fRegions;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; </div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; std::atomic&lt;bool&gt; fInterrupted;</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; std::atomic&lt;int32_t&gt; fMsgCounter; <span class="comment">// TODO: find a better lifetime solution instead of the counter</span></div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;<span class="preprocessor">#ifdef FAIRMQ_DEBUG_MODE</span></div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; Uint16MsgDebugMapHashMap* fMsgDebug;</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; Uint16MsgCounterHashMap* fShmMsgCounters;</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor">#endif</span></div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; std::thread fHeartbeatThread;</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keywordtype">bool</span> fSendHeartbeats;</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; std::mutex fHeartbeatsMtx;</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; std::condition_variable fHeartbeatsCV;</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordtype">bool</span> fThrowOnBadAlloc;</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordtype">bool</span> fNoCleanup;</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;};</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">// namespace fair::mq::shmem</span></div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; </div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SHMEM_MANAGER_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1DeviceCounter_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html">fair::mq::shmem::DeviceCounter</a></div><div class="ttdef"><b>Definition:</b> Common.h:105</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1EventCounter_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1EventCounter.html">fair::mq::shmem::EventCounter</a></div><div class="ttdef"><b>Definition:</b> Common.h:114</div></div>
<div class="ttc" id="astructFairMQRegionInfo_html"><div class="ttname"><a href="structFairMQRegionInfo.html">FairMQRegionInfo</a></div><div class="ttdef"><b>Definition:</b> FairMQUnmanagedRegion.h:29</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html">fair::mq::shmem::SegmentMemoryZeroer</a></div><div class="ttdef"><b>Definition:</b> Common.h:238</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentFreeMemory_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html">fair::mq::shmem::SegmentFreeMemory</a></div><div class="ttdef"><b>Definition:</b> Common.h:244</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1shmem_1_1Manager_html"><div class="ttname"><a href="classfair_1_1mq_1_1shmem_1_1Manager.html">fair::mq::shmem::Manager</a></div><div class="ttdef"><b>Definition:</b> Manager.h:61</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentSize_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentSize.html">fair::mq::shmem::SegmentSize</a></div><div class="ttdef"><b>Definition:</b> Common.h:226</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SegmentAddress_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html">fair::mq::shmem::SegmentAddress</a></div><div class="ttdef"><b>Definition:</b> Common.h:232</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1shmem_1_1Monitor_html_a612e661e8ff850117604565b5a55c8fe"><div class="ttname"><a href="classfair_1_1mq_1_1shmem_1_1Monitor.html#a612e661e8ff850117604565b5a55c8fe">fair::mq::shmem::Monitor::Cleanup</a></div><div class="ttdeci">static std::vector&lt; std::pair&lt; std::string, bool &gt; &gt; Cleanup(const ShmId &amp;shmId, bool verbose=true)</div><div class="ttdoc">Cleanup all shared memory artifacts created by devices.</div><div class="ttdef"><b>Definition:</b> Monitor.cxx:466</div></div>
<div class="ttc" id="anamespacefair_1_1mq_1_1shmem_html"><div class="ttname"><a href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div><div class="ttdef"><b>Definition:</b> Common.h:33</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,137 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/MemoryResourceTools.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">MemoryResourceTools.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2018 CERN and copyright holders of ALICE O2 *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/FairMQTransportFactory.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/MemoryResources.h&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="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">using</span> BytePmrAllocator = pmr::polymorphic_allocator&lt;fair::mq::byte&gt;;</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">//_________________________________________________________________________________________________</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// return the message associated with the container or throw if it is not possible</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ContainerT&gt;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment">// typename std::enable_if&lt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment">// std::is_base_of&lt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment">// pmr::polymorphic_allocator&lt;typename</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">// ContainerT::value_type&gt;,</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment">// typename ContainerT::allocator_type&gt;::value == true,</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment">// FairMQMessagePtr&gt;::type</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;FairMQMessagePtr getMessage(ContainerT &amp;&amp;container_, FairMQMemoryResource *targetResource = <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;{</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">auto</span> container = std::move(container_);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">auto</span> alloc = container.get_allocator();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">auto</span> resource = <span class="keyword">dynamic_cast&lt;</span>FairMQMemoryResource *<span class="keyword">&gt;</span>(alloc.resource());</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (!resource &amp;&amp; !targetResource) {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Neither the container or target resource specified&quot;</span>);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">size_t</span> containerSizeBytes = container.size() * <span class="keyword">sizeof</span>(<span class="keyword">typename</span> ContainerT::value_type);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">if</span> ((!targetResource &amp;&amp; resource)</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; || (resource &amp;&amp; targetResource &amp;&amp; resource-&gt;is_equal(*targetResource))) {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">auto</span> message = resource-&gt;getMessage(<span class="keyword">static_cast&lt;</span><span class="keywordtype">void</span> *<span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const_cast&lt;</span>typename std::remove_const&lt;typename ContainerT::value_type&gt;::type *<span class="keyword">&gt;</span>(</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; container.data())));</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">if</span> (message)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; message-&gt;SetUsedSize(containerSizeBytes);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">return</span> message;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">//container is not required to allocate (like in std::string small string optimization)</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="comment">//in case we get no message we fall back to default (copy) behaviour)</span></div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; targetResource = resource;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> message = targetResource-&gt;getTransportFactory()-&gt;CreateMessage(containerSizeBytes);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::memcpy(<span class="keyword">static_cast&lt;</span>fair::mq::byte *<span class="keyword">&gt;</span>(message-&gt;GetData()),</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; container.data(),</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; containerSizeBytes);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> message;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,176 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/MemoryResources.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">MemoryResources.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2018 CERN and copyright holders of ALICE O2 *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright (C) 2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_MEMORY_RESOURCES_H</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIR_MQ_MEMORY_RESOURCES_H</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">#include &lt;fairmq/FairMQMessage.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">class </span><a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a>;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;boost/container/container_fwd.hpp&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;boost/container/flat_map.hpp&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;boost/container/pmr/memory_resource.hpp&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">using</span> <span class="keywordtype">byte</span> = <span class="keywordtype">unsigned</span> char;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span>pmr = boost::container::pmr;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1FairMQMemoryResource.html"> 38</a></span>&#160;<span class="keyword">class </span><a class="code" href="classfair_1_1mq_1_1FairMQMemoryResource.html">FairMQMemoryResource</a> : <span class="keyword">public</span> pmr::memory_resource</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;{</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1FairMQMemoryResource.html#ac4af63a6341db214cc350b3270543584"> 46</a></span>&#160; <span class="keyword">virtual</span> FairMQMessagePtr <a class="code" href="classfair_1_1mq_1_1FairMQMemoryResource.html#ac4af63a6341db214cc350b3270543584">getMessage</a>(<span class="keywordtype">void</span> *p) = 0;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> *setMessage(FairMQMessagePtr) = 0;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">virtual</span> <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *getTransportFactory() noexcept = 0;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; virtual <span class="keywordtype">size_t</span> getNumberOfMessages() const noexcept = 0;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;};</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ChannelResource.html"> 57</a></span>&#160;class <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">ChannelResource</a> : public <a class="code" href="classfair_1_1mq_1_1FairMQMemoryResource.html">FairMQMemoryResource</a></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *factory{<span class="keyword">nullptr</span>};</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">// TODO: for now a map to keep track of allocations, something else would</span></div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">// probably be</span></div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// faster, but for now this does not need to be fast.</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; boost::container::flat_map&lt;void *, FairMQMessagePtr&gt; messageMap;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">ChannelResource</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="classfair_1_1mq_1_1ChannelResource.html">ChannelResource</a>(<a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *_factory)</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; : <a class="code" href="classfair_1_1mq_1_1FairMQMemoryResource.html">FairMQMemoryResource</a>()</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; , factory(_factory)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; , messageMap()</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">if</span> (!_factory) {</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Tried to construct from a nullptr FairMQTransportFactory&quot;</span>);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; };</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ChannelResource.html#a86d96d680d0d8316665c8cd95b68a744"> 79</a></span>&#160; FairMQMessagePtr <a class="code" href="classfair_1_1mq_1_1ChannelResource.html#a86d96d680d0d8316665c8cd95b68a744">getMessage</a>(<span class="keywordtype">void</span> *p)<span class="keyword"> override</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">auto</span> mes = std::move(messageMap[p]);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; messageMap.erase(p);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">return</span> mes;</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">void</span> *setMessage(FairMQMessagePtr message)<span class="keyword"> override</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">void</span> *addr = message-&gt;GetData();</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; messageMap[addr] = std::move(message);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> addr;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *getTransportFactory() noexcept<span class="keyword"> override </span>{ <span class="keywordflow">return</span> factory; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">size_t</span> getNumberOfMessages() const noexcept<span class="keyword"> override </span>{ <span class="keywordflow">return</span> messageMap.size(); }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keyword">protected</span>:</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> *do_allocate(std::size_t bytes, std::size_t alignment) <span class="keyword">override</span>;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">void</span> do_deallocate(<span class="keywordtype">void</span> *p, std::size_t <span class="comment">/*bytes*/</span>, std::size_t <span class="comment">/*alignment*/</span>)<span class="keyword"> override</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; messageMap.erase(p);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; };</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">bool</span> do_is_equal(<span class="keyword">const</span> pmr::memory_resource &amp;other) <span class="keyword">const</span> noexcept <span class="keyword">override</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> <span class="keyword">this</span> == &amp;other;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; };</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;};</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_MEMORY_RESOURCES_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1FairMQMemoryResource_html_ac4af63a6341db214cc350b3270543584"><div class="ttname"><a href="classfair_1_1mq_1_1FairMQMemoryResource.html#ac4af63a6341db214cc350b3270543584">fair::mq::FairMQMemoryResource::getMessage</a></div><div class="ttdeci">virtual FairMQMessagePtr getMessage(void *p)=0</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ChannelResource_html_a86d96d680d0d8316665c8cd95b68a744"><div class="ttname"><a href="classfair_1_1mq_1_1ChannelResource.html#a86d96d680d0d8316665c8cd95b68a744">fair::mq::ChannelResource::getMessage</a></div><div class="ttdeci">FairMQMessagePtr getMessage(void *p) override</div><div class="ttdef"><b>Definition:</b> MemoryResources.h:79</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ChannelResource_html"><div class="ttname"><a href="classfair_1_1mq_1_1ChannelResource.html">fair::mq::ChannelResource</a></div><div class="ttdef"><b>Definition:</b> MemoryResources.h:58</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1FairMQMemoryResource_html"><div class="ttname"><a href="classfair_1_1mq_1_1FairMQMemoryResource.html">fair::mq::FairMQMemoryResource</a></div><div class="ttdef"><b>Definition:</b> MemoryResources.h:39</div></div>
<div class="ttc" id="aclassFairMQTransportFactory_html"><div class="ttname"><a href="classFairMQTransportFactory.html">FairMQTransportFactory</a></div><div class="ttdef"><b>Definition:</b> FairMQTransportFactory.h:30</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,192 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/shmem/Monitor.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_6475741fe3587c0a949798307da6131d.html">shmem</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Monitor.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SHMEM_MONITOR_H_</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define FAIR_MQ_SHMEM_MONITOR_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">struct </span>SessionId</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; std::string sessionId;</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> std::string()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> sessionId; }</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;};</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1SessionId.html"> 29</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1ShmId.html">ShmId</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::string shmId;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">explicit</span> <span class="keyword">operator</span> std::string()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> shmId; }</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;};</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1ShmId.html"> 35</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1BufferDebugInfo.html">BufferDebugInfo</a></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1BufferDebugInfo.html">BufferDebugInfo</a>(<span class="keywordtype">size_t</span> offset, pid_t pid, <span class="keywordtype">size_t</span> size, uint64_t creationTime)</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; : fOffset(offset)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; , fPid(pid)</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; , fSize(size)</div>
<div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1BufferDebugInfo.html"> 41</a></span>&#160; , fCreationTime(creationTime)</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; {}</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">size_t</span> fOffset;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; pid_t fPid;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">size_t</span> fSize;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; uint64_t fCreationTime;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;};</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="keyword">class </span>Monitor</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;{</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; Monitor(<span class="keyword">const</span> std::string&amp; shmId, <span class="keywordtype">bool</span> selfDestruct, <span class="keywordtype">bool</span> interactive, <span class="keywordtype">bool</span> viewOnly, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> timeoutInMS, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> intervalInMS, <span class="keywordtype">bool</span> runAsDaemon, <span class="keywordtype">bool</span> cleanOnExit);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; Monitor(<span class="keyword">const</span> Monitor&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1shmem_1_1Monitor.html"> 56</a></span>&#160; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html">Monitor</a> operator=(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html">Monitor</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html">Monitor</a>();</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordtype">void</span> CatchSignals();</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">void</span> Run();</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">static</span> std::vector&lt;std::pair&lt;std::string, bool&gt;&gt; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html#a612e661e8ff850117604565b5a55c8fe">Cleanup</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1ShmId.html">ShmId</a>&amp; shmId, <span class="keywordtype">bool</span> verbose = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">static</span> std::vector&lt;std::pair&lt;std::string, bool&gt;&gt; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html#a612e661e8ff850117604565b5a55c8fe">Cleanup</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1SessionId.html">SessionId</a>&amp; sessionId, <span class="keywordtype">bool</span> verbose = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">static</span> std::vector&lt;std::pair&lt;std::string, bool&gt;&gt; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html#ab3cc87eef0f35a4f7e09c5686d2773f6">CleanupFull</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1ShmId.html">ShmId</a>&amp; shmId, <span class="keywordtype">bool</span> verbose = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">static</span> std::vector&lt;std::pair&lt;std::string, bool&gt;&gt; <a class="code" href="classfair_1_1mq_1_1shmem_1_1Monitor.html#ab3cc87eef0f35a4f7e09c5686d2773f6">CleanupFull</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1SessionId.html">SessionId</a>&amp; sessionId, <span class="keywordtype">bool</span> verbose = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> PrintDebugInfo(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1ShmId.html">ShmId</a>&amp; shmId);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> PrintDebugInfo(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1SessionId.html">SessionId</a>&amp; shmId);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">static</span> std::unordered_map&lt;uint16_t, std::vector&lt;BufferDebugInfo&gt;&gt; GetDebugInfo(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1ShmId.html">ShmId</a>&amp; shmId);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">static</span> std::unordered_map&lt;uint16_t, std::vector&lt;BufferDebugInfo&gt;&gt; GetDebugInfo(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1SessionId.html">SessionId</a>&amp; shmId);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> RemoveObject(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> RemoveFileMapping(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> RemoveQueue(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> RemoveMutex(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">static</span> <span class="keywordtype">bool</span> RemoveCondition(<span class="keyword">const</span> std::string&amp; name);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1shmem_1_1Monitor_1_1DaemonPresent.html">DaemonPresent</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">void</span> PrintHelp();</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">void</span> MonitorHeartbeats();</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">void</span> CheckSegment();</div>
<div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1Monitor_1_1DaemonPresent.html"> 97</a></span>&#160; <span class="keywordtype">void</span> Interactive();</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">void</span> SignalMonitor();</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordtype">bool</span> fSelfDestruct; <span class="comment">// will self-destruct after the memory has been closed</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordtype">bool</span> fInteractive; <span class="comment">// running in interactive mode</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordtype">bool</span> fViewOnly; <span class="comment">// view only mode</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordtype">bool</span> fIsDaemon;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordtype">bool</span> fSeenOnce; <span class="comment">// true is segment has been opened successfully at least once</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordtype">bool</span> fCleanOnExit;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fTimeoutInMS;</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> fIntervalInMS;</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; std::string fShmId;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; std::string fSegmentName;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; std::string fManagementSegmentName;</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; std::string fControlQueueName;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; std::atomic&lt;bool&gt; fTerminating;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; std::atomic&lt;bool&gt; fHeartbeatTriggered;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; std::chrono::high_resolution_clock::time_point fLastHeartbeat;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; std::thread fSignalThread;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; std::unordered_map&lt;std::string, std::chrono::high_resolution_clock::time_point&gt; fDeviceHeartbeats;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;};</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;} <span class="comment">// namespace fair::mq::shmem</span></div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SHMEM_MONITOR_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1SessionId_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1SessionId.html">fair::mq::shmem::SessionId</a></div><div class="ttdef"><b>Definition:</b> Monitor.h:30</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1shmem_1_1Monitor_html_ab3cc87eef0f35a4f7e09c5686d2773f6"><div class="ttname"><a href="classfair_1_1mq_1_1shmem_1_1Monitor.html#ab3cc87eef0f35a4f7e09c5686d2773f6">fair::mq::shmem::Monitor::CleanupFull</a></div><div class="ttdeci">static std::vector&lt; std::pair&lt; std::string, bool &gt; &gt; CleanupFull(const ShmId &amp;shmId, bool verbose=true)</div><div class="ttdoc">Cleanup all shared memory artifacts created by devices and monitors.</div><div class="ttdef"><b>Definition:</b> Monitor.cxx:546</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1ShmId_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1ShmId.html">fair::mq::shmem::ShmId</a></div><div class="ttdef"><b>Definition:</b> Monitor.h:36</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1Monitor_1_1DaemonPresent_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1Monitor_1_1DaemonPresent.html">fair::mq::shmem::Monitor::DaemonPresent</a></div><div class="ttdef"><b>Definition:</b> Monitor.h:97</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1shmem_1_1Monitor_html"><div class="ttname"><a href="classfair_1_1mq_1_1shmem_1_1Monitor.html">fair::mq::shmem::Monitor</a></div><div class="ttdef"><b>Definition:</b> Monitor.h:57</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1shmem_1_1Monitor_html_a612e661e8ff850117604565b5a55c8fe"><div class="ttname"><a href="classfair_1_1mq_1_1shmem_1_1Monitor.html#a612e661e8ff850117604565b5a55c8fe">fair::mq::shmem::Monitor::Cleanup</a></div><div class="ttdeci">static std::vector&lt; std::pair&lt; std::string, bool &gt; &gt; Cleanup(const ShmId &amp;shmId, bool verbose=true)</div><div class="ttdoc">Cleanup all shared memory artifacts created by devices.</div><div class="ttdef"><b>Definition:</b> Monitor.cxx:466</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1BufferDebugInfo_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1BufferDebugInfo.html">fair::mq::shmem::BufferDebugInfo</a></div><div class="ttdef"><b>Definition:</b> Monitor.h:42</div></div>
<div class="ttc" id="anamespacefair_1_1mq_1_1shmem_html"><div class="ttname"><a href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div><div class="ttdef"><b>Definition:</b> Common.h:33</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,124 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Network.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Network.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_NETWORK_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_NETWORK_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;map&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;stdexcept&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// forward declarations</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span>boost</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>asio</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">class </span>io_context;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">using</span> io_service = <span class="keyword">class </span>io_context;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;} <span class="comment">// namespace asio</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;} <span class="comment">// namespace boost</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;{</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1tools_1_1DefaultRouteDetectionError.html"> 31</a></span>&#160;<span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1tools_1_1DefaultRouteDetectionError.html">DefaultRouteDetectionError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment">// returns a map with network interface names as keys and their IP addresses as values</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;std::map&lt;std::string, std::string&gt; getHostIPs();</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">// get IP address of a given interface name</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;std::string getInterfaceIP(<span class="keyword">const</span> std::string&amp; interface);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment">// get name of the default route interface</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;std::string getDefaultRouteNetworkInterface();</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;std::string getIpFromHostname(<span class="keyword">const</span> std::string&amp; hostname);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;std::string getIpFromHostname(<span class="keyword">const</span> std::string&amp; hostname, boost::asio::io_service&amp; ios);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_NETWORK_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1DefaultRouteDetectionError_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1DefaultRouteDetectionError.html">fair::mq::tools::DefaultRouteDetectionError</a></div><div class="ttdef"><b>Definition:</b> Network.h:31</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,370 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/PMIx/PMIxCommands.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li><li class="navelem"><a class="el" href="dir_066f3fccd7659c68e6e82b743d15481d.html">PMIx</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PMIxCommands.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef PMIXCOMMANDS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define PMIXCOMMANDS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;PMIx.hpp&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Semaphore.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// make_unique</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>pmix</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;std::array&lt;std::string, 47&gt; typeNames =</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; {</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="stringliteral">&quot;PMIX_UNDEF&quot;</span>,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="stringliteral">&quot;PMIX_BOOL&quot;</span>,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="stringliteral">&quot;PMIX_BYTE&quot;</span>,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="stringliteral">&quot;PMIX_STRING&quot;</span>,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="stringliteral">&quot;PMIX_SIZE&quot;</span>,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="stringliteral">&quot;PMIX_PID&quot;</span>,</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="stringliteral">&quot;PMIX_INT&quot;</span>,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="stringliteral">&quot;PMIX_INT8&quot;</span>,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <span class="stringliteral">&quot;PMIX_INT16&quot;</span>,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="stringliteral">&quot;PMIX_INT32&quot;</span>,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="stringliteral">&quot;PMIX_INT64&quot;</span>,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="stringliteral">&quot;PMIX_UINT&quot;</span>,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="stringliteral">&quot;PMIX_UINT8&quot;</span>,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="stringliteral">&quot;PMIX_UINT16&quot;</span>,</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="stringliteral">&quot;PMIX_UINT32&quot;</span>,</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="stringliteral">&quot;PMIX_UINT64&quot;</span>,</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="stringliteral">&quot;PMIX_FLOAT&quot;</span>,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="stringliteral">&quot;PMIX_DOUBLE&quot;</span>,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="stringliteral">&quot;PMIX_TIMEVAL&quot;</span>,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="stringliteral">&quot;PMIX_TIME&quot;</span>,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="stringliteral">&quot;PMIX_STATUS&quot;</span>,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="stringliteral">&quot;PMIX_VALUE&quot;</span>,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="stringliteral">&quot;PMIX_PROC&quot;</span>,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="stringliteral">&quot;PMIX_APP&quot;</span>,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="stringliteral">&quot;PMIX_INFO&quot;</span>,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="stringliteral">&quot;PMIX_PDATA&quot;</span>,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="stringliteral">&quot;PMIX_BUFFER&quot;</span>,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="stringliteral">&quot;PMIX_BYTE_OBJECT&quot;</span>,</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="stringliteral">&quot;PMIX_KVAL&quot;</span>,</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="stringliteral">&quot;PMIX_MODEX&quot;</span>,</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="stringliteral">&quot;PMIX_PERSIST&quot;</span>,</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="stringliteral">&quot;PMIX_POINTER&quot;</span>,</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="stringliteral">&quot;PMIX_SCOPE&quot;</span>,</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="stringliteral">&quot;PMIX_DATA_RANGE&quot;</span>,</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="stringliteral">&quot;PMIX_COMMAND&quot;</span>,</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="stringliteral">&quot;PMIX_INFO_DIRECTIVES&quot;</span>,</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="stringliteral">&quot;PMIX_DATA_TYPE&quot;</span>,</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="stringliteral">&quot;PMIX_PROC_STATE&quot;</span>,</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="stringliteral">&quot;PMIX_PROC_INFO&quot;</span>,</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="stringliteral">&quot;PMIX_DATA_ARRAY&quot;</span>,</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="stringliteral">&quot;PMIX_PROC_RANK&quot;</span>,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="stringliteral">&quot;PMIX_QUERY&quot;</span>,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="stringliteral">&quot;PMIX_COMPRESSED_STRING&quot;</span>,</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="stringliteral">&quot;PMIX_ALLOC_DIRECTIVE&quot;</span>,</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="stringliteral">&quot;PMIX_INFO_ARRAY&quot;</span>,</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="stringliteral">&quot;PMIX_IOF_CHANNEL&quot;</span>,</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="stringliteral">&quot;PMIX_ENVAR&quot;</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;};</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="keyword">enum class</span> Command : int</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; general = PMIX_EXTERNAL_ERR_BASE,</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; error = PMIX_EXTERNAL_ERR_BASE - 1</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;};</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="keyword">class </span>Commands</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;{</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; Commands(<span class="keyword">const</span> proc&amp; process)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; : fProcess(process)</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; , fSubscribed(false)</div>
<div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="classpmix_1_1Commands.html"> 88</a></span>&#160; {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; ~<a class="code" href="classpmix_1_1Commands.html">Commands</a>()</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; Unsubscribe();</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">void</span> Subscribe(std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; msg, <span class="keyword">const</span> proc&amp; sender)&gt; callback)</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keyword">using namespace </span>std::placeholders;</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;PMIxCommands: Subscribing...&quot;</span>;</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; fCallback = callback;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::array&lt;pmix::status, 1&gt; codes;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; codes[0] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(pmix::Command::general);</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; PMIX_INFO_LOAD(&amp;(fInfos[0]), PMIX_EVENT_RETURN_OBJECT, <span class="keyword">this</span>, PMIX_POINTER);</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; PMIx_Register_event_handler(codes.data(), codes.size(),</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; fInfos.data(), fInfos.size(),</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; &amp;Commands::Handler,</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; &amp;Commands::EventHandlerRegistration,</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keyword">this</span>);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; fBlocker.Wait();</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;PMIxCommands: Subscribing complete!&quot;</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordtype">void</span> Unsubscribe()</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; {</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span> (fSubscribed) {</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;PMIxCommands: Unsubscribing...&quot;</span>;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; PMIx_Deregister_event_handler(fHandlerRef, &amp;Commands::EventHandlerDeregistration, <span class="keyword">this</span>);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; fBlocker.Wait();</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;PMIxCommands: Unsubscribing complete!&quot;</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Unsubscribe() is called while no subscription is active&quot;</span>;</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; }</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="keyword">struct </span>Holder</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; {</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; Holder() : fData(nullptr) {}</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; ~Holder() { PMIX_DATA_ARRAY_FREE(fData); }</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; std::vector&lt;pmix::info&gt; fInfos;</div>
<div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="structpmix_1_1Commands_1_1Holder.html"> 135</a></span>&#160; pmix_data_array_t* fData;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; };</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordtype">void</span> Send(<span class="keyword">const</span> std::string&amp; msg)</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; {</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; std::vector&lt;pmix::info&gt;* infos = <span class="keyword">new</span> std::vector&lt;pmix::info&gt;();</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; infos-&gt;emplace_back(<span class="stringliteral">&quot;fairmq.cmd&quot;</span>, msg);</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; PMIx_Notify_event(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(pmix::Command::general),</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; &amp;fProcess,</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; PMIX_RANGE_NAMESPACE,</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; infos-&gt;data(), infos-&gt;size(),</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; &amp;Commands::OpCompleteCallback&lt;std::vector&lt;pmix::info&gt;&gt;,</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; infos);</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">void</span> Send(<span class="keyword">const</span> std::string&amp; msg, <a class="code" href="structpmix_1_1rank.html">rank</a> <a class="code" href="structpmix_1_1rank.html">rank</a>)</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; {</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="structpmix_1_1proc.html">pmix::proc</a> destination(fProcess);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; destination.rank = <a class="code" href="structpmix_1_1rank.html">rank</a>;</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; Send(msg, {destination});</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; }</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordtype">void</span> Send(<span class="keyword">const</span> std::string&amp; msg, <span class="keyword">const</span> std::vector&lt;proc&gt;&amp; destination)</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; std::unique_ptr&lt;Holder&gt; holder = std::make_unique&lt;Holder&gt;();</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; PMIX_DATA_ARRAY_CREATE(holder-&gt;fData, destination.size(), PMIX_PROC);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; memcpy(holder-&gt;fData-&gt;array, destination.data(), destination.size() * <span class="keyword">sizeof</span>(pmix_proc_t));</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; &quot;OLOG: &quot; &lt;&lt; msg &lt;&lt; &quot; &gt; &quot; &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(holder-&gt;fData-&gt;array)[0].nspace &lt;&lt; &quot;: &quot; &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(holder-&gt;fData-&gt;array)[0].rank;</span></div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; holder-&gt;fInfos.emplace_back(PMIX_EVENT_CUSTOM_RANGE, holder-&gt;fData);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed range: &quot; &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(static_cast&lt;pmix_data_array_t*&gt;(holder-&gt;fInfos.at(0).value.data.darray)-&gt;array)[0].nspace &lt;&lt; &quot;_&quot; &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(static_cast&lt;pmix_data_array_t*&gt;(holder-&gt;fInfos.at(0).value.data.darray)-&gt;array)[0].rank;</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed range.type: &quot; &lt;&lt; pmix::typeNames.at(holder-&gt;fInfos.at(0).value.type);</span></div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed range.array.type: &quot; &lt;&lt; pmix::typeNames.at(static_cast&lt;pmix_data_array_t*&gt;(holder-&gt;fInfos.at(0).value.data.darray)-&gt;type);</span></div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed range.array.size: &quot; &lt;&lt; static_cast&lt;pmix_data_array_t*&gt;(holder-&gt;fInfos.at(0).value.data.darray)-&gt;size;</span></div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; holder-&gt;fInfos.size();</span></div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; holder-&gt;fInfos.emplace_back(<span class="stringliteral">&quot;fairmq.cmd&quot;</span>, msg);</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed msg: &quot; &lt;&lt; holder-&gt;fInfos.at(1).value.data.string;</span></div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; msg &lt;&lt; &quot; // packed msg.type: &quot; &lt;&lt; pmix::typeNames.at(holder-&gt;fInfos.at(1).value.type);</span></div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; holder-&gt;fInfos.size();</span></div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; PMIx_Notify_event(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(pmix::Command::general),</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; &amp;fProcess,</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; PMIX_RANGE_CUSTOM,</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; holder-&gt;fInfos.data(), holder-&gt;fInfos.size(),</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; &amp;Commands::OpCompleteCallback&lt;Holder&gt;,</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; holder.get());</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; holder.release();</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; }</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> EventHandlerRegistration(pmix_status_t s, <span class="keywordtype">size_t</span> handlerRef, <span class="keywordtype">void</span>* obj)</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (s == PMIX_SUCCESS) {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Successfully registered event handler, reference = &quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span><span class="keyword">&gt;</span>(handlerRef);</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fHandlerRef = handlerRef;</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fSubscribed = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not register PMIx event handler, status = &quot;</span> &lt;&lt; s;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; }</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fBlocker.Signal();</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; </div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> EventHandlerDeregistration(pmix_status_t s, <span class="keywordtype">void</span>* obj)</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; {</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (s == PMIX_SUCCESS) {</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Successfully deregistered event handler, reference = &quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fHandlerRef;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fSubscribed = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not deregister PMIx event handler, reference = &quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fHandlerRef &lt;&lt; <span class="stringliteral">&quot;, status = &quot;</span> &lt;&lt; s;</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fBlocker.Signal();</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; }</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> OpCompleteCallback(pmix_status_t s, <span class="keywordtype">void</span>* data)</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">if</span> (s == PMIX_SUCCESS) {</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="comment">// LOG(info) &lt;&lt; &quot;Operation completed successfully&quot;;</span></div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Could not complete operation, status = &quot;</span> &lt;&lt; s;</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">if</span> (data) {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; &quot;Destroying event data...&quot;;</span></div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keyword">delete</span> <span class="keyword">static_cast&lt;</span>T*<span class="keyword">&gt;</span>(data);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; }</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> Handler(<span class="keywordtype">size_t</span> handlerId,</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; pmix_status_t s,</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keyword">const</span> pmix_proc_t* src,</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; pmix_info_t info[], <span class="keywordtype">size_t</span> ninfo,</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; pmix_info_t[] <span class="comment">/* results */</span>, <span class="keywordtype">size_t</span> nresults,</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; pmix_event_notification_cbfunc_fn_t cbfunc,</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordtype">void</span>* cbdata)</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; std::stringstream ss;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Event handler called with &quot;</span></div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; &lt;&lt; <span class="stringliteral">&quot;status: &quot;</span> &lt;&lt; s &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; &lt;&lt; <span class="stringliteral">&quot;source: &quot;</span> &lt;&lt; src-&gt;nspace &lt;&lt; <span class="stringliteral">&quot;_&quot;</span> &lt;&lt; src-&gt;rank &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; &lt;&lt; <span class="stringliteral">&quot;ninfo: &quot;</span> &lt;&lt; ninfo &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; &lt;&lt; <span class="stringliteral">&quot;nresults: &quot;</span> &lt;&lt; nresults &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; &lt;&lt; <span class="stringliteral">&quot;handlerId: &quot;</span> &lt;&lt; handlerId;</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; std::string msg;</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; Commands* obj = <span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (ninfo &gt; 0) {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;:\n&quot;</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; ninfo; ++i) {</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot; [&quot;</span> &lt;&lt; i &lt;&lt; <span class="stringliteral">&quot;]: key: &#39;&quot;</span> &lt;&lt; info[i].key</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; &lt;&lt; <span class="stringliteral">&quot;&#39;, value: &#39;&quot;</span> &lt;&lt; pmix::get_value_str(info[i].value)</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; &lt;&lt; <span class="stringliteral">&quot;&#39;, value.type: &#39;&quot;</span> &lt;&lt; pmix::typeNames.at(info[i].value.type)</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; &lt;&lt; <span class="stringliteral">&quot;&#39;, flags: &quot;</span> &lt;&lt; info[i].flags;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">if</span> (std::strcmp(info[i].key, <span class="stringliteral">&quot;fairmq.cmd&quot;</span>) == 0) {</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; msg = pmix::get_value_str(info[i].value);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</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">if</span> (std::strcmp(info[i].key, PMIX_EVENT_RETURN_OBJECT) == 0) {</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; obj = <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(info[i].value.data.ptr);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; }</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keywordflow">if</span> (i &lt; ninfo - 1) {</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; }</div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; </div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="keywordflow">if</span> (obj != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fProcess.rank != src-&gt;rank) {</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="comment">// LOG(warn) &lt;&lt; ss.str();</span></div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">static_cast&lt;</span>Commands*<span class="keyword">&gt;</span>(obj)-&gt;fCallback(msg, proc(<span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(src-&gt;nspace), rank(src-&gt;rank)));</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// LOG(trace) &lt;&lt; &quot;suppressing message from itself&quot;;</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; LOG(ERROR) &lt;&lt; <span class="stringliteral">&quot;ERROR&quot;</span>;</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; }</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="keywordflow">if</span> (cbfunc != <span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; cbfunc(PMIX_SUCCESS, <span class="keyword">nullptr</span>, 0, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, cbdata);</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; }</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; }</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keyword">const</span> proc&amp; fProcess;</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">size_t</span> fHandlerRef;</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; std::function&lt;void(<span class="keyword">const</span> std::string&amp; msg, <span class="keyword">const</span> proc&amp; sender)&gt; fCallback;</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; std::array&lt;pmix_info_t, 1&gt; fInfos;</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">bool</span> fSubscribed;</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">fair::mq::tools::SharedSemaphore</a> fBlocker;</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; </div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;} <span class="comment">/* namespace pmix */</span></div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PMIXCOMMANDS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructpmix_1_1rank_html"><div class="ttname"><a href="structpmix_1_1rank.html">pmix::rank</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:49</div></div>
<div class="ttc" id="astructpmix_1_1proc_html"><div class="ttname"><a href="structpmix_1_1proc.html">pmix::proc</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:68</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1SharedSemaphore_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">fair::mq::tools::SharedSemaphore</a></div><div class="ttdoc">A simple copyable blocking semaphore.</div><div class="ttdef"><b>Definition:</b> Semaphore.h:51</div></div>
<div class="ttc" id="aclasspmix_1_1Commands_html"><div class="ttname"><a href="classpmix_1_1Commands.html">pmix::Commands</a></div><div class="ttdef"><b>Definition:</b> PMIxCommands.h:89</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,168 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/PMIx/PMIxPlugin.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li><li class="navelem"><a class="el" href="dir_066f3fccd7659c68e6e82b743d15481d.html">PMIx</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PMIxPlugin.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINS_PMIX</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINS_PMIX</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;PMIx.hpp&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;PMIxCommands.h&quot;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/Plugin.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/Version.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;unistd.h&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</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="keyword">namespace </span>fair::mq::plugins</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">class </span>PMIxPlugin : <span class="keyword">public</span> Plugin</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;{</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; PMIxPlugin(<span class="keyword">const</span> std::string&amp; name,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keyword">const</span> Plugin::Version version,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keyword">const</span> std::string&amp; maintainer,</div>
<div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1plugins_1_1PMIxPlugin.html"> 36</a></span>&#160; <span class="keyword">const</span> std::string&amp; homepage,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <a class="code" href="classfair_1_1mq_1_1PluginServices.html">PluginServices</a>* pluginServices);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; ~<a class="code" href="classfair_1_1mq_1_1plugins_1_1PMIxPlugin.html">PMIxPlugin</a>();</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keyword">auto</span> PMIxClient() const -&gt; std::<span class="keywordtype">string</span> { <span class="keywordflow">return</span> fPMIxClient; };</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="structpmix_1_1proc.html">pmix::proc</a> fProcess;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; pid_t fPid;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::string fPMIxClient;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::string fDeviceId;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <a class="code" href="classpmix_1_1Commands.html">pmix::Commands</a> fCommands;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::set&lt;uint32_t&gt; fStateChangeSubscribers;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; uint32_t fLastExternalController;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordtype">bool</span> fExitingAckedByLastExternalController;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; std::condition_variable fExitingAcked;</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; std::mutex fStateChangeSubscriberMutex;</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; DeviceState fCurrentState;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; DeviceState fLastState;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> Init() -&gt; <a class="code" href="structpmix_1_1proc.html">pmix::proc</a>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> Publish() -&gt; void;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">auto</span> Fence() -&gt; void;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">auto</span> Fence(<span class="keyword">const</span> std::string&amp; label) -&gt; void;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">auto</span> Lookup() -&gt; void;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keyword">auto</span> SubscribeForCommands() -&gt; void;</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">auto</span> WaitForExitingAck() -&gt; void;</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; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;Plugin::ProgOptions PMIxProgramOptions()</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;{</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; boost::program_options::options_description options(<span class="stringliteral">&quot;PMIx Plugin&quot;</span>);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; options.add_options()</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; (<span class="stringliteral">&quot;pmix-dummy&quot;</span>, boost::program_options::value&lt;int&gt;()-&gt;default_value(0), <span class="stringliteral">&quot;Dummy.&quot;</span>);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> options;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;}</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;REGISTER_FAIRMQ_PLUGIN(</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; PMIxPlugin, <span class="comment">// Class name</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; pmix, <span class="comment">// Plugin name (string, lower case chars only)</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; (Plugin::Version{FAIRMQ_VERSION_MAJOR,</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; FAIRMQ_VERSION_MINOR,</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; FAIRMQ_VERSION_PATCH}), <span class="comment">// Version</span></div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="stringliteral">&quot;FairRootGroup &lt;fairroot@gsi.de&gt;&quot;</span>, <span class="comment">// Maintainer</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="stringliteral">&quot;https://github.com/FairRootGroup/FairMQ&quot;</span>, <span class="comment">// Homepage</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; PMIxProgramOptions <span class="comment">// custom program options for the plugin</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;)</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;} <span class="comment">// namespace fair::mq::plugins</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINS_PMIX */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html">fair::mq::PluginServices</a></div><div class="ttdoc">Facilitates communication between devices and plugins.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:46</div></div>
<div class="ttc" id="astructpmix_1_1proc_html"><div class="ttname"><a href="structpmix_1_1proc.html">pmix::proc</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:68</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1plugins_1_1PMIxPlugin_html"><div class="ttname"><a href="classfair_1_1mq_1_1plugins_1_1PMIxPlugin.html">fair::mq::plugins::PMIxPlugin</a></div><div class="ttdef"><b>Definition:</b> PMIxPlugin.h:37</div></div>
<div class="ttc" id="aclasspmix_1_1Commands_html"><div class="ttname"><a href="classpmix_1_1Commands.html">pmix::Commands</a></div><div class="ttdef"><b>Definition:</b> PMIxCommands.h:89</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,397 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/plugins/PMIx/PMIx.hpp 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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_c2fe5dddc7ffa165dbdae926a051158e.html">plugins</a></li><li class="navelem"><a class="el" href="dir_066f3fccd7659c68e6e82b743d15481d.html">PMIx</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PMIx.hpp</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef PMIX_HPP</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define PMIX_HPP</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;pmix.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment">// C++ PMIx v2.2 API</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="keyword">namespace </span>pmix</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;{</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">struct </span>runtime_error : std::runtime_error</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keyword">using</span> std::runtime_error::runtime_error;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;};</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">using</span> status = pmix_status_t;</div>
<div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="structpmix_1_1runtime__error.html"> 35</a></span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using</span> nspace = pmix_nspace_t;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="keyword">using</span> key = pmix_key_t;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="keyword">using</span> data_type = pmix_data_type_t;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">struct </span><a class="code" href="structpmix_1_1rank.html">rank</a></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keyword">enum</span> named : pmix_rank_t</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; undef = PMIX_RANK_UNDEF,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; wildcard = PMIX_RANK_WILDCARD,</div>
<div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="structpmix_1_1rank.html"> 48</a></span>&#160; local_node = PMIX_RANK_LOCAL_NODE</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; };</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structpmix_1_1rank.html">rank</a>(pmix_rank_t r)</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; : m_value(r)</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {}</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">operator</span> pmix_rank_t() { <span class="keywordflow">return</span> m_value; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; pmix_rank_t m_value;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;};</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">struct </span>proc : pmix_proc_t</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; proc() { PMIX_PROC_CONSTRUCT(<span class="keyword">static_cast&lt;</span>pmix_proc_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; ~proc() { PMIX_PROC_DESTRUCT(<span class="keyword">static_cast&lt;</span>pmix_proc_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; proc(pmix::nspace ns, <a class="code" href="structpmix_1_1rank.html">pmix::rank</a> r)</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structpmix_1_1proc.html"> 67</a></span>&#160; {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; PMIX_PROC_LOAD(<span class="keyword">static_cast&lt;</span>pmix_proc_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>), ns, <span class="keyword">static_cast&lt;</span>pmix_rank_t<span class="keyword">&gt;</span>(r));</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</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="keyword">friend</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="structpmix_1_1proc.html">proc</a>&amp; p)</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; p.nspace &lt;&lt; <span class="stringliteral">&quot;_&quot;</span> &lt;&lt; p.rank;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;};</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="keyword">struct </span>value : pmix_value_t</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;{</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; value() { PMIX_VALUE_CONSTRUCT(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; ~value() { PMIX_VALUE_DESTRUCT(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; value(<span class="keyword">const</span> value&amp; rhs)</div>
<div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structpmix_1_1value.html"> 83</a></span>&#160; {</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; status rc;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">auto</span> lhs(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>));</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; PMIX_VALUE_XFER(rc, lhs, <span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">const_cast&lt;</span><a class="code" href="structpmix_1_1value.html">value</a>*<span class="keyword">&gt;</span>(&amp;rhs)));</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="structpmix_1_1runtime__error.html">runtime_error</a>(<span class="stringliteral">&quot;pmix::value copy ctor failed: rc=&quot;</span> + rc);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structpmix_1_1value.html">value</a>(T)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="structpmix_1_1runtime__error.html">runtime_error</a>(<span class="stringliteral">&quot;Given value type not supported or not yet implemented.&quot;</span>);</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keyword">explicit</span> value(<span class="keyword">const</span> <span class="keywordtype">char</span>* val)</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; {</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; PMIX_VALUE_LOAD(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>), <span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(val), PMIX_STRING);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keyword">explicit</span> value(<span class="keyword">const</span> std::string&amp; val)</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; PMIX_VALUE_LOAD(</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>), <span class="keyword">const_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(val.c_str()), PMIX_STRING);</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keyword">explicit</span> value(<span class="keywordtype">int</span> val)</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; PMIX_VALUE_LOAD(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>), &amp;val, PMIX_INT);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">explicit</span> value(pmix_data_array_t* val)</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; PMIX_VALUE_LOAD(<span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>), val, PMIX_DATA_ARRAY);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;};</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;<span class="keyword">struct </span>info : pmix_info_t</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;{</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; info() { PMIX_INFO_CONSTRUCT(<span class="keyword">static_cast&lt;</span>pmix_info_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; ~info() { PMIX_INFO_DESTRUCT(<span class="keyword">static_cast&lt;</span>pmix_info_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="structpmix_1_1info.html"> 127</a></span>&#160; <a class="code" href="structpmix_1_1info.html">info</a>(<span class="keyword">const</span> std::string&amp; k, Args&amp;&amp;... args)</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; (void)strncpy(key, k.c_str(), PMIX_MAX_KEYLEN);</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; flags = 0;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="structpmix_1_1value.html">pmix::value</a> rhs(std::forward&lt;Args&gt;(args)...);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">auto</span> lhs(&amp;<a class="code" href="structpmix_1_1value.html">value</a>);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; status rc;</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; PMIX_VALUE_XFER(rc, lhs, <span class="keyword">static_cast&lt;</span>pmix_value_t*<span class="keyword">&gt;</span>(&amp;rhs));</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="structpmix_1_1runtime__error.html">runtime_error</a>(<span class="stringliteral">&quot;pmix::info ctor failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keyword">friend</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> <a class="code" href="structpmix_1_1info.html">info</a>&amp; i)</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;key=&quot;</span> &lt;&lt; i.key &lt;&lt; <span class="stringliteral">&quot;,value=&#39;&quot;</span> &lt;&lt; i.value.data.string &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; }</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; info(<span class="keyword">const</span> info&amp; rhs)</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; PMIX_INFO_XFER(<span class="keyword">static_cast&lt;</span>pmix_info_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>),</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">static_cast&lt;</span>pmix_info_t*<span class="keyword">&gt;</span>(<span class="keyword">const_cast&lt;</span>info*<span class="keyword">&gt;</span>(&amp;rhs)));</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;};</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;<span class="keyword">struct </span>pdata : pmix_pdata_t</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;{</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; pdata() { PMIX_PDATA_CONSTRUCT(<span class="keyword">static_cast&lt;</span>pmix_pdata_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; ~pdata() { PMIX_PDATA_DESTRUCT(<span class="keyword">static_cast&lt;</span>pmix_pdata_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)); }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; pdata(<span class="keyword">const</span> pdata&amp; rhs)</div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structpmix_1_1pdata.html"> 160</a></span>&#160; {</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; PMIX_PDATA_XFER(<span class="keyword">static_cast&lt;</span>pmix_pdata_t*<span class="keyword">&gt;</span>(<span class="keyword">this</span>),</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keyword">static_cast&lt;</span>pmix_pdata_t*<span class="keyword">&gt;</span>(<span class="keyword">const_cast&lt;</span><a class="code" href="structpmix_1_1pdata.html">pdata</a>*<span class="keyword">&gt;</span>(&amp;rhs)));</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keyword">auto</span> set_key(<span class="keyword">const</span> std::string&amp; new_key) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; (void)strncpy(key, new_key.c_str(), PMIX_MAX_KEYLEN);</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;};</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;<span class="keyword">auto</span> init(<span class="keyword">const</span> std::vector&lt;info&gt;&amp; info = {}) -&gt; proc</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160;{</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; proc res;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; status rc;</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; rc = PMIx_Init(&amp;res, <span class="keyword">const_cast&lt;</span><a class="code" href="structpmix_1_1info.html">pmix::info</a>*<span class="keyword">&gt;</span>(info.data()), info.size());</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">throw</span> runtime_error(<span class="stringliteral">&quot;pmix::init() failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">return</span> res;</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;}</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="keyword">auto</span> initialized() -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> !!PMIx_Initialized(); }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; </div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="keyword">auto</span> get_version() -&gt; std::string { <span class="keywordflow">return</span> {PMIx_Get_version()}; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="keyword">auto</span> finalize(<span class="keyword">const</span> std::vector&lt;info&gt;&amp; info = {}) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;{</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; status rc;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; rc = PMIx_Finalize(info.data(), info.size());</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">throw</span> runtime_error(<span class="stringliteral">&quot;pmix::finalize() failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;}</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="keyword">auto</span> publish(<span class="keyword">const</span> std::vector&lt;info&gt;&amp; info) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;{</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; status rc;</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; rc = PMIx_Publish(info.data(), info.size());</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordflow">throw</span> runtime_error(<span class="stringliteral">&quot;pmix::publish() failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;}</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="keyword">auto</span> fence(<span class="keyword">const</span> std::vector&lt;proc&gt;&amp; procs = {}, <span class="keyword">const</span> std::vector&lt;info&gt;&amp; info = {}) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;{</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; status rc;</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; </div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; rc = PMIx_Fence(procs.data(), procs.size(), info.data(), info.size());</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <span class="keywordflow">throw</span> runtime_error(<span class="stringliteral">&quot;pmix::fence() failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;}</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; </div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;<span class="keyword">auto</span> lookup(std::vector&lt;pdata&gt;&amp; pdata, <span class="keyword">const</span> std::vector&lt;info&gt;&amp; info = {}) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; status rc;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; rc = PMIx_Lookup(pdata.data(), pdata.size(), info.data(), info.size());</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">if</span> (rc != PMIX_SUCCESS) {</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">throw</span> runtime_error(<span class="stringliteral">&quot;pmix::lookup() failed: rc=&quot;</span> + std::to_string(rc));</div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;}</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;std::string get_info(<span class="keyword">const</span> std::string&amp; name, <a class="code" href="structpmix_1_1proc.html">pmix::proc</a>&amp; process)</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; pmix_value_t* v;</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; pmix::status rc = PMIx_Get(&amp;process, name.c_str(), <span class="keyword">nullptr</span>, 0, &amp;v);</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (rc == PMIX_SUCCESS) {</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; std::stringstream ss;</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; <span class="keywordflow">switch</span> (v-&gt;type) {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">case</span> PMIX_SIZE: ss &lt;&lt; static_cast&lt;size_t&gt;(v-&gt;data.size) &lt;&lt; <span class="stringliteral">&quot; (size_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">case</span> PMIX_INT: ss &lt;&lt; static_cast&lt;int&gt;(v-&gt;data.integer) &lt;&lt; <span class="stringliteral">&quot; (int)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">case</span> PMIX_INT8: ss &lt;&lt; static_cast&lt;int8_t&gt;(v-&gt;data.int8) &lt;&lt; <span class="stringliteral">&quot; (int8_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">case</span> PMIX_INT16: ss &lt;&lt; static_cast&lt;int16_t&gt;(v-&gt;data.int16) &lt;&lt; <span class="stringliteral">&quot; (int16_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">case</span> PMIX_INT32: ss &lt;&lt; static_cast&lt;int32_t&gt;(v-&gt;data.int32) &lt;&lt; <span class="stringliteral">&quot; (int32_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">case</span> PMIX_INT64: ss &lt;&lt; static_cast&lt;int64_t&gt;(v-&gt;data.int64) &lt;&lt; <span class="stringliteral">&quot; (int64_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">case</span> PMIX_UINT: ss &lt;&lt; static_cast&lt;unsigned int&gt;(v-&gt;data.uint) &lt;&lt; <span class="stringliteral">&quot; (unsigned int)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">case</span> PMIX_UINT8: ss &lt;&lt; static_cast&lt;uint8_t&gt;(v-&gt;data.uint8) &lt;&lt; <span class="stringliteral">&quot; (uint8_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">case</span> PMIX_UINT16: ss &lt;&lt; static_cast&lt;uint16_t&gt;(v-&gt;data.uint16) &lt;&lt; <span class="stringliteral">&quot; (uint16_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">case</span> PMIX_UINT32: ss &lt;&lt; static_cast&lt;uint32_t&gt;(v-&gt;data.uint32) &lt;&lt; <span class="stringliteral">&quot; (uint32_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">case</span> PMIX_UINT64: ss &lt;&lt; static_cast&lt;uint64_t&gt;(v-&gt;data.uint64) &lt;&lt; <span class="stringliteral">&quot; (uint64_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">case</span> PMIX_FLOAT: ss &lt;&lt; static_cast&lt;float&gt;(v-&gt;data.fval) &lt;&lt; <span class="stringliteral">&quot; (float)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">case</span> PMIX_DOUBLE: ss &lt;&lt; static_cast&lt;double&gt;(v-&gt;data.dval) &lt;&lt; <span class="stringliteral">&quot; (double)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">case</span> PMIX_PID: ss &lt;&lt; static_cast&lt;pid_t&gt;(v-&gt;data.pid) &lt;&lt; <span class="stringliteral">&quot; (pid_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">case</span> PMIX_STRING: ss &lt;&lt; static_cast&lt;char*&gt;(v-&gt;data.string) &lt;&lt; <span class="stringliteral">&quot; (string)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">case</span> PMIX_PROC_RANK: ss &lt;&lt; static_cast&lt;uint32_t&gt;(v-&gt;data.rank) &lt;&lt; <span class="stringliteral">&quot; (pmix_rank_t)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordflow">case</span> PMIX_PROC: ss &lt;&lt; <span class="stringliteral">&quot;proc.nspace: &quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span>pmix_proc_t*<span class="keyword">&gt;</span>(v-&gt;data.proc)-&gt;nspace</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, proc.rank: &quot;</span> &lt;&lt; <span class="keyword">static_cast&lt;</span>pmix_proc_t*<span class="keyword">&gt;</span>(v-&gt;data.proc)-&gt;rank &lt;&lt; <span class="stringliteral">&quot; (pmix_proc_t*)&quot;</span>; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keywordflow">default</span>:</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;unknown type: &quot;</span> &lt;&lt; v-&gt;type;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; }</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">return</span> ss.str();</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (rc == PMIX_ERR_NOT_FOUND) {</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// LOG(error) &lt;&lt; &quot;PMIx_Get failed: PMIX_ERR_NOT_FOUND&quot;;</span></div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// LOG(error) &lt;&lt; &quot;PMIx_Get failed: &quot; &lt;&lt; rc;</span></div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;&lt;undefined&gt;&quot;</span>;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;}</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;std::string get_value_str(<span class="keyword">const</span> pmix_value_t&amp; v)</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;{</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">switch</span> (v.type) {</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">case</span> PMIX_BOOL: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">bool</span><span class="keyword">&gt;</span>(v.data.flag));</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">case</span> PMIX_SIZE: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">size_t</span><span class="keyword">&gt;</span>(v.data.size));</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">case</span> PMIX_INT: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(v.data.integer));</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="keywordflow">case</span> PMIX_INT8: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>int8_t<span class="keyword">&gt;</span>(v.data.int8));</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">case</span> PMIX_INT16: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>int16_t<span class="keyword">&gt;</span>(v.data.int16));</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">case</span> PMIX_INT32: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(v.data.int32));</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">case</span> PMIX_INT64: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>int64_t<span class="keyword">&gt;</span>(v.data.int64));</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">case</span> PMIX_UINT: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">&gt;</span>(v.data.uint));</div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">case</span> PMIX_UINT8: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(v.data.uint8));</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">case</span> PMIX_UINT16: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>uint16_t<span class="keyword">&gt;</span>(v.data.uint16));</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">case</span> PMIX_UINT32: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(v.data.uint32));</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">case</span> PMIX_UINT64: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(v.data.uint64));</div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">case</span> PMIX_FLOAT: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">float</span><span class="keyword">&gt;</span>(v.data.fval));</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">case</span> PMIX_DOUBLE: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span><span class="keywordtype">double</span><span class="keyword">&gt;</span>(v.data.dval));</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">case</span> PMIX_PID: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>pid_t<span class="keyword">&gt;</span>(v.data.pid));</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">case</span> PMIX_STRING: <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(v.data.string);</div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">case</span> PMIX_PROC_RANK: <span class="keywordflow">return</span> std::to_string(<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(v.data.rank));</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keywordflow">case</span> PMIX_POINTER: { std::stringstream ss; ss &lt;&lt; static_cast&lt;void*&gt;(v.data.ptr); <span class="keywordflow">return</span> ss.str(); }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">case</span> PMIX_DATA_ARRAY: {</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">if</span> (v.data.darray-&gt;type == PMIX_PROC) {</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;[&quot;</span>;</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; v.data.darray-&gt;size; ++i) {</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; ss &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(<span class="keyword">static_cast&lt;</span>pmix_data_array_t*<span class="keyword">&gt;</span>(v.data.darray)-&gt;array)[0].nspace;</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;_&quot;</span>;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; ss &lt;&lt; static_cast&lt;pmix_proc_t*&gt;(<span class="keyword">static_cast&lt;</span>pmix_data_array_t*<span class="keyword">&gt;</span>(v.data.darray)-&gt;array)[0].rank;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (i &lt; v.data.darray-&gt;size - 1) {</div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;]&quot;</span>;</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> ss.str();</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> <span class="stringliteral">&quot;UNKNOWN TYPE IN DATA ARRAY&quot;</span>;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div>
<div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; }</div>
<div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">default</span>: <span class="keywordflow">return</span> <span class="stringliteral">&quot;UNKNOWN TYPE&quot;</span>;</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;}</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;} <span class="comment">/* namespace pmix */</span></div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* PMIX_HPP */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructpmix_1_1rank_html"><div class="ttname"><a href="structpmix_1_1rank.html">pmix::rank</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:49</div></div>
<div class="ttc" id="astructpmix_1_1proc_html"><div class="ttname"><a href="structpmix_1_1proc.html">pmix::proc</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:68</div></div>
<div class="ttc" id="astructpmix_1_1info_html"><div class="ttname"><a href="structpmix_1_1info.html">pmix::info</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:128</div></div>
<div class="ttc" id="astructpmix_1_1runtime__error_html"><div class="ttname"><a href="structpmix_1_1runtime__error.html">pmix::runtime_error</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:36</div></div>
<div class="ttc" id="astructpmix_1_1value_html"><div class="ttname"><a href="structpmix_1_1value.html">pmix::value</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:84</div></div>
<div class="ttc" id="astructpmix_1_1pdata_html"><div class="ttname"><a href="structpmix_1_1pdata.html">pmix::pdata</a></div><div class="ttdef"><b>Definition:</b> PMIx.hpp:161</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/PluginManager.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PluginManager.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINMANAGER_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINMANAGER_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/Plugin.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/PluginServices.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define BOOST_FILESYSTEM_VERSION 3</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#define BOOST_FILESYSTEM_NO_DEPRECATED</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/optional.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;boost/program_options.hpp&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;boost/dll/import.hpp&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;boost/dll/shared_library.hpp&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;boost/dll/runtime_symbol_info.hpp&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// forward</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginManager.html"> 46</a></span>&#160;<span class="keyword">class </span><a class="code" href="classfair_1_1mq_1_1PluginManager.html">PluginManager</a></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">using</span> PluginFactory = std::unique_ptr&lt;fair::mq::Plugin&gt;(<a class="code" href="classfair_1_1mq_1_1PluginServices.html">PluginServices</a>&amp;);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classfair_1_1mq_1_1PluginManager.html">PluginManager</a>();</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classfair_1_1mq_1_1PluginManager.html">PluginManager</a>(<span class="keyword">const</span> std::vector&lt;std::string&gt; args);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; ~<a class="code" href="classfair_1_1mq_1_1PluginManager.html">PluginManager</a>()</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Shutting down Plugin Manager&quot;</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">auto</span> SetSearchPaths(<span class="keyword">const</span> std::vector&lt;boost::filesystem::path&gt;&amp;) -&gt; void;</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">auto</span> AppendSearchPath(<span class="keyword">const</span> boost::filesystem::path&amp;) -&gt; void;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">auto</span> PrependSearchPath(<span class="keyword">const</span> boost::filesystem::path&amp;) -&gt; void;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">auto</span> SearchPaths() <span class="keyword">const</span> -&gt; <span class="keyword">const</span> std::vector&lt;boost::filesystem::path&gt;&amp; { <span class="keywordflow">return</span> fSearchPaths; }</div>
<div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PluginManager_1_1BadSearchPath.html"> 63</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1PluginManager_1_1BadSearchPath.html">BadSearchPath</a> : std::invalid_argument { <span class="keyword">using</span> std::invalid_argument::invalid_argument; };</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">auto</span> LoadPlugin(<span class="keyword">const</span> std::string&amp; pluginName) -&gt; void;</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keyword">auto</span> LoadPlugins(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; pluginNames) -&gt; <span class="keywordtype">void</span> { <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pluginName : pluginNames) { LoadPlugin(pluginName); } }</div>
<div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PluginManager_1_1PluginLoadError.html"> 67</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1PluginManager_1_1PluginLoadError.html">PluginLoadError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">auto</span> InstantiatePlugins() -&gt; void;</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PluginManager_1_1PluginInstantiationError.html"> 69</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1PluginManager_1_1PluginInstantiationError.html">PluginInstantiationError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</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="keyword">static</span> <span class="keyword">auto</span> ProgramOptions() -&gt; boost::program_options::options_description;</div>
<div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PluginManager_1_1ProgramOptionsParseError.html"> 72</a></span>&#160; <span class="keyword">struct </span><a class="code" href="structfair_1_1mq_1_1PluginManager_1_1ProgramOptionsParseError.html">ProgramOptionsParseError</a> : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> LibPrefix() -&gt; <span class="keyword">const</span> std::string&amp; { <span class="keywordflow">return</span> fgkLibPrefix; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">auto</span> ForEachPlugin(std::function&lt;<span class="keywordtype">void</span> (<a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>&amp;)&gt; func) -&gt; <span class="keywordtype">void</span> { <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; p : fPluginOrder) { func(*fPlugins[p]); } }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">auto</span> ForEachPluginProgOptions(std::function&lt;<span class="keywordtype">void</span> (boost::program_options::options_description)&gt; func) <span class="keyword">const</span> -&gt; <span class="keywordtype">void</span> { <span class="keywordflow">for</span>(<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair : fPluginProgOptions) { func(pair.second); } }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">auto</span> EmplacePluginServices(Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span> { fPluginServices = std::make_unique&lt;PluginServices&gt;(std::forward&lt;Args&gt;(args)...); }</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">auto</span> WaitForPluginsToReleaseDeviceControl() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;WaitForReleaseDeviceControl(); }</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; </div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> ValidateSearchPath(<span class="keyword">const</span> boost::filesystem::path&amp;) -&gt; void;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">auto</span> LoadPluginPrelinkedDynamic(<span class="keyword">const</span> std::string&amp; pluginName) -&gt; void;</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">auto</span> LoadPluginDynamic(<span class="keyword">const</span> std::string&amp; pluginName) -&gt; void;</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">auto</span> LoadPluginStatic(<span class="keyword">const</span> std::string&amp; pluginName) -&gt; void;</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span>... Args&gt;</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">auto</span> LoadSymbols(<span class="keyword">const</span> std::string&amp; pluginName, Args&amp;&amp;... args) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">using namespace </span>boost::dll;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keyword">using</span> fair::mq::tools::ToString;</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">auto</span> lib = shared_library{std::forward&lt;Args&gt;(args)...};</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; fgDLLKeepAlive.push_back(lib);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; fPluginFactories[pluginName] = import_alias&lt;PluginFactory&gt;(</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; shared_library{lib},</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; ToString(<span class="stringliteral">&quot;make_&quot;</span>, pluginName, <span class="stringliteral">&quot;_plugin&quot;</span>)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; );</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; fPluginProgOptions.insert({</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; pluginName,</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; lib.get_alias&lt;Plugin::ProgOptions()&gt;(ToString(<span class="stringliteral">&quot;get_&quot;</span>, pluginName, <span class="stringliteral">&quot;_plugin_progoptions&quot;</span>))().value()</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; });</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">catch</span> (<span class="keyword">const</span> boost::bad_optional_access&amp; e) { <span class="comment">/* just ignore, if no prog options are declared */</span> }</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">auto</span> InstantiatePlugin(<span class="keyword">const</span> std::string&amp; pluginName) -&gt; void;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">static</span> <span class="keyword">const</span> std::string fgkLibPrefix;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; std::vector&lt;boost::filesystem::path&gt; fSearchPaths;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">static</span> std::vector&lt;boost::dll::shared_library&gt; fgDLLKeepAlive;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; std::map&lt;std::string, std::function&lt;PluginFactory&gt;&gt; fPluginFactories;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; std::unique_ptr&lt;PluginServices&gt; fPluginServices;</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; std::map&lt;std::string, std::unique_ptr&lt;Plugin&gt;&gt; fPlugins;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::vector&lt;std::string&gt; fPluginOrder;</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; std::map&lt;std::string, boost::program_options::options_description&gt; fPluginProgOptions;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}; <span class="comment">/* class PluginManager */</span></div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINMANAGER_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html">fair::mq::PluginServices</a></div><div class="ttdoc">Facilitates communication between devices and plugins.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:46</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PluginManager_1_1PluginInstantiationError_html"><div class="ttname"><a href="structfair_1_1mq_1_1PluginManager_1_1PluginInstantiationError.html">fair::mq::PluginManager::PluginInstantiationError</a></div><div class="ttdef"><b>Definition:</b> PluginManager.h:69</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginManager_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginManager.html">fair::mq::PluginManager</a></div><div class="ttdoc">manages and owns plugin instances</div><div class="ttdef"><b>Definition:</b> PluginManager.h:47</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PluginManager_1_1BadSearchPath_html"><div class="ttname"><a href="structfair_1_1mq_1_1PluginManager_1_1BadSearchPath.html">fair::mq::PluginManager::BadSearchPath</a></div><div class="ttdef"><b>Definition:</b> PluginManager.h:63</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PluginManager_1_1PluginLoadError_html"><div class="ttname"><a href="structfair_1_1mq_1_1PluginManager_1_1PluginLoadError.html">fair::mq::PluginManager::PluginLoadError</a></div><div class="ttdef"><b>Definition:</b> PluginManager.h:67</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1Plugin_html"><div class="ttname"><a href="classfair_1_1mq_1_1Plugin.html">fair::mq::Plugin</a></div><div class="ttdoc">Base class for FairMQ plugins.</div><div class="ttdef"><b>Definition:</b> Plugin.h:43</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PluginManager_1_1ProgramOptionsParseError_html"><div class="ttname"><a href="structfair_1_1mq_1_1PluginManager_1_1ProgramOptionsParseError.html">fair::mq::PluginManager::ProgramOptionsParseError</a></div><div class="ttdef"><b>Definition:</b> PluginManager.h:72</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,287 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/PluginServices.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PluginServices.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGINSERVICES_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGINSERVICES_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/States.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;FairMQDevice.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptions.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;boost/optional.hpp&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;boost/optional/optional_io.hpp&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">class </span>PluginServices</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; PluginServices() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; PluginServices(ProgOptions&amp; config, <a class="code" href="classFairMQDevice.html">FairMQDevice</a>&amp; device)</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; : fConfig(config)</div>
<div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html"> 45</a></span>&#160; , fDevice(device)</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; , fDeviceController()</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; , fDeviceControllerMutex()</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; , fReleaseDeviceControlCondition()</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; ~<a class="code" href="classfair_1_1mq_1_1PluginServices.html">PluginServices</a>()</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Shutting down Plugin Services&quot;</span>;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; PluginServices(<span class="keyword">const</span> PluginServices&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; PluginServices operator=(<span class="keyword">const</span> PluginServices&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">using</span> DeviceState = fair::mq::State;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">using</span> DeviceStateTransition = fair::mq::Transition;</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="comment">// Control API</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#aba55018cac4ae8341f491c662c482130">ToDeviceState</a>(<span class="keyword">const</span> std::string&amp; state) -&gt; DeviceState { <span class="keywordflow">return</span> GetState(state); }</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#aba55018cac4ae8341f491c662c482130"> 75</a></span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a7f74475cef8ab1c39b87f8948b35e0a0">ToDeviceStateTransition</a>(<span class="keyword">const</span> std::string&amp; transition) -&gt; DeviceStateTransition { <span class="keywordflow">return</span> GetTransition(transition); }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">ToStr</a>(DeviceState state) -&gt; std::string { <span class="keywordflow">return</span> GetStateName(state); }</div>
<div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a7f74475cef8ab1c39b87f8948b35e0a0"> 81</a></span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">ToStr</a>(DeviceStateTransition transition) -&gt; std::string { <span class="keywordflow">return</span> GetTransitionName(transition); }</div>
<div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69"> 86</a></span>&#160; </div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ac93964a0e35ca0ed91bfbaab6405be82">GetCurrentDeviceState</a>() const -&gt; DeviceState { <span class="keywordflow">return</span> fDevice.<a class="code" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a>(); }</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ab2bab89d575dd90828d492cf2d0d2f5e">TakeDeviceControl</a>(<span class="keyword">const</span> std::string&amp; controller) -&gt; void;</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keyword">struct </span>DeviceControlError : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a546360c16172c5d3c83f483871fa0c7e">StealDeviceControl</a>(<span class="keyword">const</span> std::string&amp; controller) -&gt; void;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#af7127f156ba970298a23b8b67550a43b">ReleaseDeviceControl</a>(<span class="keyword">const</span> std::string&amp; controller) -&gt; void;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#aba93554ad3553a1d14d1affd85e1dea1">GetDeviceController</a>() const -&gt; boost::optional&lt;std::<span class="keywordtype">string</span>&gt;;</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a79645639828ffaebcb81e29dc49ca6a4">WaitForReleaseDeviceControl</a>() -&gt; <span class="keywordtype">void</span>;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1PluginServices.html#adb2b7857434e48018dfe6b17044dcef9">ChangeDeviceState</a>(const std::<span class="keywordtype">string</span>&amp; controller, const DeviceStateTransition next) -&gt; <span class="keywordtype">bool</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; auto <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a98b235e5119d863dbb7adeb00938d449">SubscribeToDeviceStateChange</a>(const std::<span class="keywordtype">string</span>&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(DeviceState <span class="comment">/*newState*/</span>)&gt; callback) -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; fDevice.<a class="code" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a>(subscriber, [&amp;,callback](fair::mq::State newState){</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; callback(newState);</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; });</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div>
<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a98b235e5119d863dbb7adeb00938d449"> 138</a></span>&#160; </div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a657506e2afe946ada3deff4ecc40e4d1">UnsubscribeFromDeviceStateChange</a>(<span class="keyword">const</span> std::string&amp; subscriber) -&gt; <span class="keywordtype">void</span> { fDevice.<a class="code" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a>(subscriber); }</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// Config API</span></div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ab97f8394a3e1552277ff2564e16c6a">PropertyExists</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span> -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a95494fa84eea46fae7c666f0b82f7048">Count</a>(key) &gt; 0; }</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ae06ecdf4d79d3a1e7d850dfab4239200">SetProperty</a>(<span class="keyword">const</span> std::string&amp; key, T val) -&gt; <span class="keywordtype">void</span> { fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(key, val); }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ad186ca529c4c374d35d9229019e83e10">SetProperties</a>(<span class="keyword">const</span> fair::mq::Properties&amp; props) { fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ae9f743fc76dee8566eb843640120e8f3">SetProperties</a>(props); }</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a4622c8b748222585a14de5623eea4cd2">UpdateProperty</a>(<span class="keyword">const</span> std::string&amp; key, T val) { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a95467b4bdb44c73cf960a60ff0457df2">UpdateProperty</a>(key, val); }</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a56f00de35770ed226b3d9c467c6b0f6e">UpdateProperties</a>(<span class="keyword">const</span> fair::mq::Properties&amp; input) { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a6b014a8adcf80aa6fe8b3471e87f13e6">UpdateProperties</a>(input); }</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#aea4d010d8cecae6e801df6308e8f6197">DeleteProperty</a>(<span class="keyword">const</span> std::string&amp; key) { fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a8e9af05d7ca5f7ac372971a9c7450195">DeleteProperty</a>(key); }</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#aea4d010d8cecae6e801df6308e8f6197"> 178</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">GetProperty</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span> -&gt; T { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>&lt;T&gt;(key); }</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359"> 184</a></span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; T <a class="code" href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">GetProperty</a>(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> T&amp; ifNotFound)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>(key, ifNotFound); }</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">GetPropertyAsString</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span> -&gt; std::string { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(key); }</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">GetPropertyAsString</a>(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> std::string&amp; ifNotFound) <span class="keyword">const</span> -&gt; std::string { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(key, ifNotFound); }</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; fair::mq::Properties <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a352fad62f282e921b0c722dfcbaaa73d">GetProperties</a>(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a59e98e064e01188e0e52b9ae6f2f83a2">GetProperties</a>(q); }</div>
<div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a352fad62f282e921b0c722dfcbaaa73d"> 215</a></span>&#160; fair::mq::Properties <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a9f48923e4b80022827bd416ffe8f38bc">GetPropertiesStartingWith</a>(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a69e8c85c5d7778f361244ae554af9f5b">GetPropertiesStartingWith</a>(q); }</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; std::map&lt;std::string, std::string&gt; <a class="code" href="classfair_1_1mq_1_1PluginServices.html#af4d3fd1caf8beffefc992b89e7479007">GetPropertiesAsString</a>(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#abcbfe2950b7cf1239cbc7fcf085a8f01">GetPropertiesAsString</a>(q); }</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#af4d3fd1caf8beffefc992b89e7479007"> 225</a></span>&#160; std::map&lt;std::string, std::string&gt; <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a118417e34fd4f398e77f7f5fe7153661">GetPropertiesAsStringStartingWith</a>(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#aad0d6d0e82c486c9ba09ae5a3e0e4f25">GetPropertiesAsStringStartingWith</a>(q); }</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ab966df2353bbce792a5b938f420080c0">GetChannelInfo</a>() const -&gt; std::unordered_map&lt;std::<span class="keywordtype">string</span>, <span class="keywordtype">int</span>&gt; { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af890f73cfd75cdf5189be7fa936c7bf0">GetChannelInfo</a>(); }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a4e090fa0029724f23a1ef3fcacb928d2">GetPropertyKeys</a>() const -&gt; std::vector&lt;std::<span class="keywordtype">string</span>&gt; { <span class="keywordflow">return</span> fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a67ef979cc694a245f28084389b8cffc0">GetPropertyKeys</a>(); }</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#abd34c038f5c3c94338419bbd887f3d14">SubscribeToPropertyChange</a>(<span class="keyword">const</span> std::string&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; key, T)&gt; callback) <span class="keyword">const</span> -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#afbf4111312c5cd350dc7b924f8524c43">Subscribe</a>&lt;T&gt;(subscriber, callback);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1b96fc3f61efccfa5c2048eb578b60e5">UnsubscribeFromPropertyChange</a>(<span class="keyword">const</span> std::string&amp; subscriber) -&gt; <span class="keywordtype">void</span> { fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af5afa61b1a9eebb4a9558da3fc8b576a">Unsubscribe</a>&lt;T&gt;(subscriber); }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#ad6c37fce55cb631d9f5be45b93a544f9">SubscribeToPropertyChangeAsString</a>(<span class="keyword">const</span> std::string&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; key, std::string)&gt; callback) <span class="keyword">const</span> -&gt; <span class="keywordtype">void</span></div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a3de4a0e1a29cdeccd54e67da544ab184">SubscribeAsString</a>(subscriber, callback);</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; }</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a746aba1505ae9117a28886de85111e16">UnsubscribeFromPropertyChangeAsString</a>(<span class="keyword">const</span> std::string&amp; subscriber) -&gt; <span class="keywordtype">void</span> { fConfig.<a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af5a595dbee8a9331d33e0cd3eaefb4ae">UnsubscribeAsString</a>(subscriber); }</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a7e4ee07b3e64aca15079165f94ef4580">CycleLogConsoleSeverityUp</a>() -&gt; <span class="keywordtype">void</span> { Logger::CycleConsoleSeverityUp(); }</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a69294d8b0771e3b65d4d4157c4559c52">CycleLogConsoleSeverityDown</a>() -&gt; <span class="keywordtype">void</span> { Logger::CycleConsoleSeverityDown(); }</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a364225377b53067f0bfa1e006fbe069e">CycleLogVerbosityUp</a>() -&gt; <span class="keywordtype">void</span> { Logger::CycleVerbosityUp(); }</div>
<div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a7e4ee07b3e64aca15079165f94ef4580"> 272</a></span>&#160; <span class="keyword">auto</span> <a class="code" href="classfair_1_1mq_1_1PluginServices.html#a95095ff2174a531e48d83ee1cfa293d5">CycleLogVerbosityDown</a>() -&gt; <span class="keywordtype">void</span> { Logger::CycleVerbosityDown(); }</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a69294d8b0771e3b65d4d4157c4559c52"> 274</a></span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>&amp; fConfig;</div>
<div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a364225377b53067f0bfa1e006fbe069e"> 276</a></span>&#160; <a class="code" href="classFairMQDevice.html">FairMQDevice</a>&amp; fDevice;</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; boost::optional&lt;std::string&gt; fDeviceController;</div>
<div class="line"><a name="l00278"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PluginServices.html#a95095ff2174a531e48d83ee1cfa293d5"> 278</a></span>&#160; <span class="keyword">mutable</span> std::mutex fDeviceControllerMutex;</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; std::condition_variable fReleaseDeviceControlCondition;</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;}; <span class="comment">/* class PluginServices */</span></div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; </div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGINSERVICES_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ae06ecdf4d79d3a1e7d850dfab4239200"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ae06ecdf4d79d3a1e7d850dfab4239200">fair::mq::PluginServices::SetProperty</a></div><div class="ttdeci">auto SetProperty(const std::string &amp;key, T val) -&gt; void</div><div class="ttdoc">Set config property.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:163</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a69294d8b0771e3b65d4d4157c4559c52"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a69294d8b0771e3b65d4d4157c4559c52">fair::mq::PluginServices::CycleLogConsoleSeverityDown</a></div><div class="ttdeci">auto CycleLogConsoleSeverityDown() -&gt; void</div><div class="ttdoc">Decreases console logging severity, or sets it to highest if it is already lowest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:274</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ac93964a0e35ca0ed91bfbaab6405be82"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ac93964a0e35ca0ed91bfbaab6405be82">fair::mq::PluginServices::GetCurrentDeviceState</a></div><div class="ttdeci">auto GetCurrentDeviceState() const -&gt; DeviceState</div><div class="ttdef"><b>Definition:</b> PluginServices.h:94</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a746aba1505ae9117a28886de85111e16"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a746aba1505ae9117a28886de85111e16">fair::mq::PluginServices::UnsubscribeFromPropertyChangeAsString</a></div><div class="ttdeci">auto UnsubscribeFromPropertyChangeAsString(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from property updates that convert to string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:269</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html">fair::mq::PluginServices</a></div><div class="ttdoc">Facilitates communication between devices and plugins.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:46</div></div>
<div class="ttc" id="aclassFairMQDevice_html_a7ba52b2fc3908c6bf1391eb5f27b03bd"><div class="ttname"><a href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">FairMQDevice::GetCurrentState</a></div><div class="ttdeci">fair::mq::State GetCurrentState() const</div><div class="ttdoc">Returns the current state.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:473</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a67ef979cc694a245f28084389b8cffc0"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a67ef979cc694a245f28084389b8cffc0">fair::mq::ProgOptions::GetPropertyKeys</a></div><div class="ttdeci">std::vector&lt; std::string &gt; GetPropertyKeys() const</div><div class="ttdoc">Discover the list of property keys.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:189</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_adb2b7857434e48018dfe6b17044dcef9"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#adb2b7857434e48018dfe6b17044dcef9">fair::mq::PluginServices::ChangeDeviceState</a></div><div class="ttdeci">auto ChangeDeviceState(const std::string &amp;controller, const DeviceStateTransition next) -&gt; bool</div><div class="ttdoc">Request a device state transition.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:15</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a69e8c85c5d7778f361244ae554af9f5b"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a69e8c85c5d7778f361244ae554af9f5b">fair::mq::ProgOptions::GetPropertiesStartingWith</a></div><div class="ttdeci">fair::mq::Properties GetPropertiesStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:256</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a95467b4bdb44c73cf960a60ff0457df2"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a95467b4bdb44c73cf960a60ff0457df2">fair::mq::ProgOptions::UpdateProperty</a></div><div class="ttdeci">bool UpdateProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Updates an existing config property (or fails if it doesn't exist)</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:152</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a95095ff2174a531e48d83ee1cfa293d5"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a95095ff2174a531e48d83ee1cfa293d5">fair::mq::PluginServices::CycleLogVerbosityDown</a></div><div class="ttdeci">auto CycleLogVerbosityDown() -&gt; void</div><div class="ttdoc">Decreases logging verbosity, or sets it to highest if it is already lowest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:278</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a7e4ee07b3e64aca15079165f94ef4580"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a7e4ee07b3e64aca15079165f94ef4580">fair::mq::PluginServices::CycleLogConsoleSeverityUp</a></div><div class="ttdeci">auto CycleLogConsoleSeverityUp() -&gt; void</div><div class="ttdoc">Increases console logging severity, or sets it to lowest if it is already highest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:272</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af5afa61b1a9eebb4a9558da3fc8b576a"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af5afa61b1a9eebb4a9558da3fc8b576a">fair::mq::ProgOptions::Unsubscribe</a></div><div class="ttdeci">void Unsubscribe(const std::string &amp;subscriber) const</div><div class="ttdoc">Unsubscribe from property updates of type T.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:202</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a9f48923e4b80022827bd416ffe8f38bc"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a9f48923e4b80022827bd416ffe8f38bc">fair::mq::PluginServices::GetPropertiesStartingWith</a></div><div class="ttdeci">fair::mq::Properties GetPropertiesStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:221</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a4e090fa0029724f23a1ef3fcacb928d2"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a4e090fa0029724f23a1ef3fcacb928d2">fair::mq::PluginServices::GetPropertyKeys</a></div><div class="ttdeci">auto GetPropertyKeys() const -&gt; std::vector&lt; std::string &gt;</div><div class="ttdoc">Discover the list of property keys.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:239</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_aba93554ad3553a1d14d1affd85e1dea1"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#aba93554ad3553a1d14d1affd85e1dea1">fair::mq::PluginServices::GetDeviceController</a></div><div class="ttdeci">auto GetDeviceController() const -&gt; boost::optional&lt; std::string &gt;</div><div class="ttdoc">Get current device controller.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:70</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a98b235e5119d863dbb7adeb00938d449"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a98b235e5119d863dbb7adeb00938d449">fair::mq::PluginServices::SubscribeToDeviceStateChange</a></div><div class="ttdeci">auto SubscribeToDeviceStateChange(const std::string &amp;subscriber, std::function&lt; void(DeviceState)&gt; callback) -&gt; void</div><div class="ttdoc">Subscribe with a callback to device state changes.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:138</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_aba55018cac4ae8341f491c662c482130"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#aba55018cac4ae8341f491c662c482130">fair::mq::PluginServices::ToDeviceState</a></div><div class="ttdeci">static auto ToDeviceState(const std::string &amp;state) -&gt; DeviceState</div><div class="ttdoc">Convert string to DeviceState.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:75</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a4622c8b748222585a14de5623eea4cd2"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a4622c8b748222585a14de5623eea4cd2">fair::mq::PluginServices::UpdateProperty</a></div><div class="ttdeci">bool UpdateProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Updates an existing config property (or fails if it doesn't exist)</div><div class="ttdef"><b>Definition:</b> PluginServices.h:171</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a7f74475cef8ab1c39b87f8948b35e0a0"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a7f74475cef8ab1c39b87f8948b35e0a0">fair::mq::PluginServices::ToDeviceStateTransition</a></div><div class="ttdeci">static auto ToDeviceStateTransition(const std::string &amp;transition) -&gt; DeviceStateTransition</div><div class="ttdoc">Convert string to DeviceStateTransition.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:81</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a56f00de35770ed226b3d9c467c6b0f6e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a56f00de35770ed226b3d9c467c6b0f6e">fair::mq::PluginServices::UpdateProperties</a></div><div class="ttdeci">bool UpdateProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Updates multiple existing config properties (or fails of any of then do not exist,...</div><div class="ttdef"><b>Definition:</b> PluginServices.h:174</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_aea4d010d8cecae6e801df6308e8f6197"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#aea4d010d8cecae6e801df6308e8f6197">fair::mq::PluginServices::DeleteProperty</a></div><div class="ttdeci">void DeleteProperty(const std::string &amp;key)</div><div class="ttdoc">Deletes a property with the given key from the config store.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:178</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a118417e34fd4f398e77f7f5fe7153661"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a118417e34fd4f398e77f7f5fe7153661">fair::mq::PluginServices::GetPropertiesAsStringStartingWith</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsStringStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:231</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a9d0a829555bafa0f19a3f072aa5d0097"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">fair::mq::ProgOptions::GetPropertyAsString</a></div><div class="ttdeci">std::string GetPropertyAsString(const std::string &amp;key) const</div><div class="ttdoc">Read config property as string, throw if no property with this key exists.</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ab2bab89d575dd90828d492cf2d0d2f5e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ab2bab89d575dd90828d492cf2d0d2f5e">fair::mq::PluginServices::TakeDeviceControl</a></div><div class="ttdeci">auto TakeDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Become device controller.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:31</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a272f25798b948992a560df32d405517c"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">fair::mq::ProgOptions::SetProperty</a></div><div class="ttdeci">void SetProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Set config property.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:136</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_abcbfe2950b7cf1239cbc7fcf085a8f01"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#abcbfe2950b7cf1239cbc7fcf085a8f01">fair::mq::ProgOptions::GetPropertiesAsString</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsString(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:271</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a657506e2afe946ada3deff4ecc40e4d1"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a657506e2afe946ada3deff4ecc40e4d1">fair::mq::PluginServices::UnsubscribeFromDeviceStateChange</a></div><div class="ttdeci">auto UnsubscribeFromDeviceStateChange(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from device state changes.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:147</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_abd34c038f5c3c94338419bbd887f3d14"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#abd34c038f5c3c94338419bbd887f3d14">fair::mq::PluginServices::SubscribeToPropertyChange</a></div><div class="ttdeci">auto SubscribeToPropertyChange(const std::string &amp;subscriber, std::function&lt; void(const std::string &amp;key, T)&gt; callback) const -&gt; void</div><div class="ttdoc">Subscribe to property updates of type T.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:247</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a79645639828ffaebcb81e29dc49ca6a4"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a79645639828ffaebcb81e29dc49ca6a4">fair::mq::PluginServices::WaitForReleaseDeviceControl</a></div><div class="ttdeci">auto WaitForReleaseDeviceControl() -&gt; void</div><div class="ttdoc">Block until control is released.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:77</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a3de4a0e1a29cdeccd54e67da544ab184"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a3de4a0e1a29cdeccd54e67da544ab184">fair::mq::ProgOptions::SubscribeAsString</a></div><div class="ttdeci">void SubscribeAsString(const std::string &amp;subscriber, std::function&lt; void(typename fair::mq::PropertyChange::KeyType, std::string)&gt; func) const</div><div class="ttdoc">Subscribe to property updates, with values converted to string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:213</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a364225377b53067f0bfa1e006fbe069e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a364225377b53067f0bfa1e006fbe069e">fair::mq::PluginServices::CycleLogVerbosityUp</a></div><div class="ttdeci">auto CycleLogVerbosityUp() -&gt; void</div><div class="ttdoc">Increases logging verbosity, or sets it to lowest if it is already highest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:276</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_af4d3fd1caf8beffefc992b89e7479007"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#af4d3fd1caf8beffefc992b89e7479007">fair::mq::PluginServices::GetPropertiesAsString</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsString(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:225</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1ab97f8394a3e1552277ff2564e16c6a"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1ab97f8394a3e1552277ff2564e16c6a">fair::mq::PluginServices::PropertyExists</a></div><div class="ttdeci">auto PropertyExists(const std::string &amp;key) const -&gt; bool</div><div class="ttdoc">Checks a property with the given key exist in the configuration.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:154</div></div>
<div class="ttc" id="aclassFairMQDevice_html_ae3c2c8524082bf37eafaa26030ee7452"><div class="ttname"><a href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">FairMQDevice::SubscribeToStateChange</a></div><div class="ttdeci">void SubscribeToStateChange(const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</div><div class="ttdoc">Subscribe with a callback to state changes.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:454</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a6b014a8adcf80aa6fe8b3471e87f13e6"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a6b014a8adcf80aa6fe8b3471e87f13e6">fair::mq::ProgOptions::UpdateProperties</a></div><div class="ttdeci">bool UpdateProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Updates multiple existing config properties (or fails of any of then do not exist,...</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:323</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1b96fc3f61efccfa5c2048eb578b60e5"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1b96fc3f61efccfa5c2048eb578b60e5">fair::mq::PluginServices::UnsubscribeFromPropertyChange</a></div><div class="ttdeci">auto UnsubscribeFromPropertyChange(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from property updates of type T.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:255</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_afbf4111312c5cd350dc7b924f8524c43"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#afbf4111312c5cd350dc7b924f8524c43">fair::mq::ProgOptions::Subscribe</a></div><div class="ttdeci">void Subscribe(const std::string &amp;subscriber, std::function&lt; void(typename fair::mq::PropertyChange::KeyType, T)&gt; func) const</div><div class="ttdoc">Subscribe to property updates of type T.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:191</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ab966df2353bbce792a5b938f420080c0"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ab966df2353bbce792a5b938f420080c0">fair::mq::PluginServices::GetChannelInfo</a></div><div class="ttdeci">auto GetChannelInfo() const -&gt; std::unordered_map&lt; std::string, int &gt;</div><div class="ttdoc">Retrieve current channel information.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:235</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a49179c80826ae5ec87d77b8d50d8ec44"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">fair::mq::PluginServices::GetPropertyAsString</a></div><div class="ttdeci">auto GetPropertyAsString(const std::string &amp;key) const -&gt; std::string</div><div class="ttdoc">Read config property as string, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:200</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af5a595dbee8a9331d33e0cd3eaefb4ae"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af5a595dbee8a9331d33e0cd3eaefb4ae">fair::mq::ProgOptions::UnsubscribeAsString</a></div><div class="ttdeci">void UnsubscribeAsString(const std::string &amp;subscriber) const</div><div class="ttdoc">Unsubscribe from property updates that convert to string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:221</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a546360c16172c5d3c83f483871fa0c7e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a546360c16172c5d3c83f483871fa0c7e">fair::mq::PluginServices::StealDeviceControl</a></div><div class="ttdeci">auto StealDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Become device controller by force.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:47</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_aad0d6d0e82c486c9ba09ae5a3e0e4f25"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#aad0d6d0e82c486c9ba09ae5a3e0e4f25">fair::mq::ProgOptions::GetPropertiesAsStringStartingWith</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsStringStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:291</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ae9f743fc76dee8566eb843640120e8f3"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ae9f743fc76dee8566eb843640120e8f3">fair::mq::ProgOptions::SetProperties</a></div><div class="ttdeci">void SetProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Set multiple config properties.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:306</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a59e98e064e01188e0e52b9ae6f2f83a2"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a59e98e064e01188e0e52b9ae6f2f83a2">fair::mq::ProgOptions::GetProperties</a></div><div class="ttdeci">fair::mq::Properties GetProperties(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:236</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a95494fa84eea46fae7c666f0b82f7048"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a95494fa84eea46fae7c666f0b82f7048">fair::mq::ProgOptions::Count</a></div><div class="ttdeci">int Count(const std::string &amp;key) const</div><div class="ttdoc">Checks a property with the given key exist in the configuration.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:155</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a8e9af05d7ca5f7ac372971a9c7450195"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a8e9af05d7ca5f7ac372971a9c7450195">fair::mq::ProgOptions::DeleteProperty</a></div><div class="ttdeci">void DeleteProperty(const std::string &amp;key)</div><div class="ttdoc">Deletes a property with the given key from the config store.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:349</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_af7127f156ba970298a23b8b67550a43b"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#af7127f156ba970298a23b8b67550a43b">fair::mq::PluginServices::ReleaseDeviceControl</a></div><div class="ttdeci">auto ReleaseDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Release device controller role.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:54</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a352fad62f282e921b0c722dfcbaaa73d"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a352fad62f282e921b0c722dfcbaaa73d">fair::mq::PluginServices::GetProperties</a></div><div class="ttdeci">fair::mq::Properties GetProperties(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:215</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ad186ca529c4c374d35d9229019e83e10"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ad186ca529c4c374d35d9229019e83e10">fair::mq::PluginServices::SetProperties</a></div><div class="ttdeci">void SetProperties(const fair::mq::Properties &amp;props)</div><div class="ttdoc">Set multiple config properties.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:166</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ad6c37fce55cb631d9f5be45b93a544f9"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ad6c37fce55cb631d9f5be45b93a544f9">fair::mq::PluginServices::SubscribeToPropertyChangeAsString</a></div><div class="ttdeci">auto SubscribeToPropertyChangeAsString(const std::string &amp;subscriber, std::function&lt; void(const std::string &amp;key, std::string)&gt; callback) const -&gt; void</div><div class="ttdoc">Subscribe to property updates.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:262</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_adc2f2ddc5a3e2d6a5846672d40cac359"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">fair::mq::PluginServices::GetProperty</a></div><div class="ttdeci">auto GetProperty(const std::string &amp;key) const -&gt; T</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:184</div></div>
<div class="ttc" id="aclassFairMQDevice_html"><div class="ttname"><a href="classFairMQDevice.html">FairMQDevice</a></div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:50</div></div>
<div class="ttc" id="aclassFairMQDevice_html_af9b5b7a5469bff53feb6a1e000230e73"><div class="ttname"><a href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">FairMQDevice::UnsubscribeFromStateChange</a></div><div class="ttdeci">void UnsubscribeFromStateChange(const std::string &amp;key)</div><div class="ttdoc">Unsubscribe from state changes.</div><div class="ttdef"><b>Definition:</b> FairMQDevice.h:457</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af890f73cfd75cdf5189be7fa936c7bf0"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af890f73cfd75cdf5189be7fa936c7bf0">fair::mq::ProgOptions::GetChannelInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, int &gt; GetChannelInfo() const</div><div class="ttdoc">Retrieve current channel information.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:161</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1ed12471e1736e2545645f3a12238d69"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">fair::mq::PluginServices::ToStr</a></div><div class="ttdeci">static auto ToStr(DeviceState state) -&gt; std::string</div><div class="ttdoc">Convert DeviceState to string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:86</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,249 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/Plugin.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Plugin.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017-2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PLUGIN_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PLUGIN_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Version.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/PluginServices.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;boost/dll/alias.hpp&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;boost/optional.hpp&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;boost/program_options.hpp&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</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="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;{</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">class </span>Plugin</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">using</span> ProgOptions = boost::optional&lt;boost::program_options::options_description&gt;;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; </div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keyword">using</span> Version = tools::Version;</div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1Plugin.html"> 42</a></span>&#160; </div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>(std::string name,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Version</a> version,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; std::string maintainer,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::string homepage,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classfair_1_1mq_1_1PluginServices.html">PluginServices</a>* pluginServices);</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a> operator=(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>&amp;) = <span class="keyword">delete</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="keyword">virtual</span> ~<a class="code" href="classfair_1_1mq_1_1Plugin.html">Plugin</a>();</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keyword">auto</span> GetName() const -&gt; const std::<span class="keywordtype">string</span>&amp; { <span class="keywordflow">return</span> fkName; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keyword">auto</span> GetVersion() const -&gt; const Version { <span class="keywordflow">return</span> fkVersion; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keyword">auto</span> GetMaintainer() const -&gt; const std::<span class="keywordtype">string</span>&amp; { <span class="keywordflow">return</span> fkMaintainer; }</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keyword">auto</span> GetHomepage() const -&gt; const std::<span class="keywordtype">string</span>&amp; { <span class="keywordflow">return</span> fkHomepage; }</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator==(<span class="keyword">const</span> Plugin&amp; lhs, <span class="keyword">const</span> Plugin&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> std::make_tuple(lhs.GetName(), lhs.GetVersion()) == std::make_tuple(rhs.GetName(), rhs.GetVersion()); }</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator!=(<span class="keyword">const</span> Plugin&amp; lhs, <span class="keyword">const</span> Plugin&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> !(lhs == rhs); }</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> Plugin&amp; p) -&gt; std::ostream&amp;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> os &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span> &lt;&lt; p.GetName() &lt;&lt; <span class="stringliteral">&quot;&#39;, &quot;</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; &lt;&lt; <span class="stringliteral">&quot;version &#39;&quot;</span> &lt;&lt; p.GetVersion() &lt;&lt; <span class="stringliteral">&quot;&#39;, &quot;</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; &lt;&lt; <span class="stringliteral">&quot;maintainer &#39;&quot;</span> &lt;&lt; p.GetMaintainer() &lt;&lt; <span class="stringliteral">&quot;&#39;, &quot;</span></div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; &lt;&lt; <span class="stringliteral">&quot;homepage &#39;&quot;</span> &lt;&lt; p.GetHomepage() &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> NoProgramOptions() -&gt; ProgOptions { <span class="keywordflow">return</span> boost::none; }</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="comment">// device control API</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">// see &lt;fairmq/PluginServices.h&gt; for docs</span></div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keyword">using</span> DeviceState = fair::mq::PluginServices::DeviceState;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">using</span> DeviceStateTransition = fair::mq::PluginServices::DeviceStateTransition;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">auto</span> ToDeviceState(<span class="keyword">const</span> std::string&amp; state) <span class="keyword">const</span> -&gt; DeviceState { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#aba55018cac4ae8341f491c662c482130">ToDeviceState</a>(state); }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keyword">auto</span> ToDeviceStateTransition(<span class="keyword">const</span> std::string&amp; transition) <span class="keyword">const</span> -&gt; DeviceStateTransition { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a7f74475cef8ab1c39b87f8948b35e0a0">ToDeviceStateTransition</a>(transition); }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">auto</span> ToStr(DeviceState state) <span class="keyword">const</span> -&gt; std::string { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">ToStr</a>(state); }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keyword">auto</span> ToStr(DeviceStateTransition transition) <span class="keyword">const</span> -&gt; std::string { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">ToStr</a>(transition); }</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">auto</span> GetCurrentDeviceState() const -&gt; DeviceState { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ac93964a0e35ca0ed91bfbaab6405be82">GetCurrentDeviceState</a>(); }</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keyword">auto</span> TakeDeviceControl() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ab2bab89d575dd90828d492cf2d0d2f5e">TakeDeviceControl</a>(fkName); };</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keyword">auto</span> StealDeviceControl() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a546360c16172c5d3c83f483871fa0c7e">StealDeviceControl</a>(fkName); };</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keyword">auto</span> ReleaseDeviceControl() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#af7127f156ba970298a23b8b67550a43b">ReleaseDeviceControl</a>(fkName); };</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">auto</span> ChangeDeviceState(<span class="keyword">const</span> DeviceStateTransition next) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#adb2b7857434e48018dfe6b17044dcef9">ChangeDeviceState</a>(fkName, next); }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keyword">auto</span> SubscribeToDeviceStateChange(std::function&lt;<span class="keywordtype">void</span>(DeviceState)&gt; callback) -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a98b235e5119d863dbb7adeb00938d449">SubscribeToDeviceStateChange</a>(fkName, callback); }</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keyword">auto</span> UnsubscribeFromDeviceStateChange() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a657506e2afe946ada3deff4ecc40e4d1">UnsubscribeFromDeviceStateChange</a>(fkName); }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// device config API</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// see &lt;fairmq/PluginServices.h&gt; for docs</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keyword">auto</span> PropertyExists(<span class="keyword">const</span> std::string&amp; key) -&gt; <span class="keywordtype">int</span> { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1ab97f8394a3e1552277ff2564e16c6a">PropertyExists</a>(key); }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; T GetProperty(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">GetProperty</a>&lt;T&gt;(key); }</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; T GetProperty(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> T&amp; ifNotFound)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">GetProperty</a>(key, ifNotFound); }</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; std::string GetPropertyAsString(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">GetPropertyAsString</a>(key); }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; std::string GetPropertyAsString(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> std::string&amp; ifNotFound)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">GetPropertyAsString</a>(key, ifNotFound); }</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; fair::mq::Properties GetProperties(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a352fad62f282e921b0c722dfcbaaa73d">GetProperties</a>(q); }</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; fair::mq::Properties GetPropertiesStartingWith(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a9f48923e4b80022827bd416ffe8f38bc">GetPropertiesStartingWith</a>(q); };</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::map&lt;std::string, std::string&gt; GetPropertiesAsString(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#af4d3fd1caf8beffefc992b89e7479007">GetPropertiesAsString</a>(q); }</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::map&lt;std::string, std::string&gt; GetPropertiesAsStringStartingWith(<span class="keyword">const</span> std::string&amp; q)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a118417e34fd4f398e77f7f5fe7153661">GetPropertiesAsStringStartingWith</a>(q); };</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keyword">auto</span> GetChannelInfo() const -&gt; std::unordered_map&lt;std::<span class="keywordtype">string</span>, <span class="keywordtype">int</span>&gt; { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ab966df2353bbce792a5b938f420080c0">GetChannelInfo</a>(); }</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keyword">auto</span> GetPropertyKeys() const -&gt; std::vector&lt;std::<span class="keywordtype">string</span>&gt; { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a4e090fa0029724f23a1ef3fcacb928d2">GetPropertyKeys</a>(); }</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">auto</span> SetProperty(<span class="keyword">const</span> std::string&amp; key, T val) -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ae06ecdf4d79d3a1e7d850dfab4239200">SetProperty</a>(key, val); }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">void</span> SetProperties(<span class="keyword">const</span> fair::mq::Properties&amp; props) { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ad186ca529c4c374d35d9229019e83e10">SetProperties</a>(props); }</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordtype">bool</span> UpdateProperty(<span class="keyword">const</span> std::string&amp; key, T val) { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a4622c8b748222585a14de5623eea4cd2">UpdateProperty</a>(key, val); }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordtype">bool</span> UpdateProperties(<span class="keyword">const</span> fair::mq::Properties&amp; input) { <span class="keywordflow">return</span> fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a56f00de35770ed226b3d9c467c6b0f6e">UpdateProperties</a>(input); }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">void</span> DeleteProperty(<span class="keyword">const</span> std::string&amp; key) { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#aea4d010d8cecae6e801df6308e8f6197">DeleteProperty</a>(key); }</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keyword">auto</span> SubscribeToPropertyChange(std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; key, T newValue)&gt; callback) -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#abd34c038f5c3c94338419bbd887f3d14">SubscribeToPropertyChange</a>&lt;T&gt;(fkName, callback); }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keyword">auto</span> UnsubscribeFromPropertyChange() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a1b96fc3f61efccfa5c2048eb578b60e5">UnsubscribeFromPropertyChange</a>&lt;T&gt;(fkName); }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">auto</span> SubscribeToPropertyChangeAsString(std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> std::string&amp; key, std::string newValue)&gt; callback) -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#ad6c37fce55cb631d9f5be45b93a544f9">SubscribeToPropertyChangeAsString</a>(fkName, callback); }</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">auto</span> UnsubscribeFromPropertyChangeAsString() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a746aba1505ae9117a28886de85111e16">UnsubscribeFromPropertyChangeAsString</a>(fkName); }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">auto</span> CycleLogConsoleSeverityUp() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a7e4ee07b3e64aca15079165f94ef4580">CycleLogConsoleSeverityUp</a>(); }</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keyword">auto</span> CycleLogConsoleSeverityDown() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a69294d8b0771e3b65d4d4157c4559c52">CycleLogConsoleSeverityDown</a>(); }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keyword">auto</span> CycleLogVerbosityUp() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a364225377b53067f0bfa1e006fbe069e">CycleLogVerbosityUp</a>(); }</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keyword">auto</span> CycleLogVerbosityDown() -&gt; <span class="keywordtype">void</span> { fPluginServices-&gt;<a class="code" href="classfair_1_1mq_1_1PluginServices.html#a95095ff2174a531e48d83ee1cfa293d5">CycleLogVerbosityDown</a>(); }</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keyword">const</span> std::string fkName;</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keyword">const</span> Version fkVersion;</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">const</span> std::string fkMaintainer;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keyword">const</span> std::string fkHomepage;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; PluginServices* fPluginServices;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}; <span class="comment">/* class Plugin */</span></div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;<span class="preprocessor">#define REGISTER_FAIRMQ_PLUGIN(KLASS, NAME, VERSION, MAINTAINER, HOMEPAGE, PROGOPTIONS) \</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">static auto Make_##NAME##_Plugin(fair::mq::PluginServices* pluginServices) -&gt; std::unique_ptr&lt;fair::mq::Plugin&gt; \</span></div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="preprocessor">{ \</span></div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;<span class="preprocessor"> return std::make_unique&lt;KLASS&gt;(std::string{#NAME}, VERSION, std::string{MAINTAINER}, std::string{HOMEPAGE}, pluginServices); \</span></div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="preprocessor">} \</span></div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;<span class="preprocessor">BOOST_DLL_ALIAS(Make_##NAME##_Plugin, make_##NAME##_plugin) \</span></div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;<span class="preprocessor">BOOST_DLL_ALIAS(PROGOPTIONS, get_##NAME##_plugin_progoptions)</span></div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PLUGIN_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ae06ecdf4d79d3a1e7d850dfab4239200"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ae06ecdf4d79d3a1e7d850dfab4239200">fair::mq::PluginServices::SetProperty</a></div><div class="ttdeci">auto SetProperty(const std::string &amp;key, T val) -&gt; void</div><div class="ttdoc">Set config property.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:163</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a69294d8b0771e3b65d4d4157c4559c52"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a69294d8b0771e3b65d4d4157c4559c52">fair::mq::PluginServices::CycleLogConsoleSeverityDown</a></div><div class="ttdeci">auto CycleLogConsoleSeverityDown() -&gt; void</div><div class="ttdoc">Decreases console logging severity, or sets it to highest if it is already lowest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:274</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ac93964a0e35ca0ed91bfbaab6405be82"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ac93964a0e35ca0ed91bfbaab6405be82">fair::mq::PluginServices::GetCurrentDeviceState</a></div><div class="ttdeci">auto GetCurrentDeviceState() const -&gt; DeviceState</div><div class="ttdef"><b>Definition:</b> PluginServices.h:94</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a746aba1505ae9117a28886de85111e16"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a746aba1505ae9117a28886de85111e16">fair::mq::PluginServices::UnsubscribeFromPropertyChangeAsString</a></div><div class="ttdeci">auto UnsubscribeFromPropertyChangeAsString(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from property updates that convert to string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:269</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html">fair::mq::PluginServices</a></div><div class="ttdoc">Facilitates communication between devices and plugins.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:46</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_adb2b7857434e48018dfe6b17044dcef9"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#adb2b7857434e48018dfe6b17044dcef9">fair::mq::PluginServices::ChangeDeviceState</a></div><div class="ttdeci">auto ChangeDeviceState(const std::string &amp;controller, const DeviceStateTransition next) -&gt; bool</div><div class="ttdoc">Request a device state transition.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:15</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a95095ff2174a531e48d83ee1cfa293d5"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a95095ff2174a531e48d83ee1cfa293d5">fair::mq::PluginServices::CycleLogVerbosityDown</a></div><div class="ttdeci">auto CycleLogVerbosityDown() -&gt; void</div><div class="ttdoc">Decreases logging verbosity, or sets it to highest if it is already lowest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:278</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a7e4ee07b3e64aca15079165f94ef4580"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a7e4ee07b3e64aca15079165f94ef4580">fair::mq::PluginServices::CycleLogConsoleSeverityUp</a></div><div class="ttdeci">auto CycleLogConsoleSeverityUp() -&gt; void</div><div class="ttdoc">Increases console logging severity, or sets it to lowest if it is already highest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:272</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a9f48923e4b80022827bd416ffe8f38bc"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a9f48923e4b80022827bd416ffe8f38bc">fair::mq::PluginServices::GetPropertiesStartingWith</a></div><div class="ttdeci">fair::mq::Properties GetPropertiesStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:221</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a4e090fa0029724f23a1ef3fcacb928d2"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a4e090fa0029724f23a1ef3fcacb928d2">fair::mq::PluginServices::GetPropertyKeys</a></div><div class="ttdeci">auto GetPropertyKeys() const -&gt; std::vector&lt; std::string &gt;</div><div class="ttdoc">Discover the list of property keys.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:239</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a98b235e5119d863dbb7adeb00938d449"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a98b235e5119d863dbb7adeb00938d449">fair::mq::PluginServices::SubscribeToDeviceStateChange</a></div><div class="ttdeci">auto SubscribeToDeviceStateChange(const std::string &amp;subscriber, std::function&lt; void(DeviceState)&gt; callback) -&gt; void</div><div class="ttdoc">Subscribe with a callback to device state changes.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:138</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_aba55018cac4ae8341f491c662c482130"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#aba55018cac4ae8341f491c662c482130">fair::mq::PluginServices::ToDeviceState</a></div><div class="ttdeci">static auto ToDeviceState(const std::string &amp;state) -&gt; DeviceState</div><div class="ttdoc">Convert string to DeviceState.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:75</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a4622c8b748222585a14de5623eea4cd2"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a4622c8b748222585a14de5623eea4cd2">fair::mq::PluginServices::UpdateProperty</a></div><div class="ttdeci">bool UpdateProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Updates an existing config property (or fails if it doesn't exist)</div><div class="ttdef"><b>Definition:</b> PluginServices.h:171</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a7f74475cef8ab1c39b87f8948b35e0a0"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a7f74475cef8ab1c39b87f8948b35e0a0">fair::mq::PluginServices::ToDeviceStateTransition</a></div><div class="ttdeci">static auto ToDeviceStateTransition(const std::string &amp;transition) -&gt; DeviceStateTransition</div><div class="ttdoc">Convert string to DeviceStateTransition.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:81</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a56f00de35770ed226b3d9c467c6b0f6e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a56f00de35770ed226b3d9c467c6b0f6e">fair::mq::PluginServices::UpdateProperties</a></div><div class="ttdeci">bool UpdateProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Updates multiple existing config properties (or fails of any of then do not exist,...</div><div class="ttdef"><b>Definition:</b> PluginServices.h:174</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_aea4d010d8cecae6e801df6308e8f6197"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#aea4d010d8cecae6e801df6308e8f6197">fair::mq::PluginServices::DeleteProperty</a></div><div class="ttdeci">void DeleteProperty(const std::string &amp;key)</div><div class="ttdoc">Deletes a property with the given key from the config store.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:178</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a118417e34fd4f398e77f7f5fe7153661"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a118417e34fd4f398e77f7f5fe7153661">fair::mq::PluginServices::GetPropertiesAsStringStartingWith</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsStringStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:231</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ab2bab89d575dd90828d492cf2d0d2f5e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ab2bab89d575dd90828d492cf2d0d2f5e">fair::mq::PluginServices::TakeDeviceControl</a></div><div class="ttdeci">auto TakeDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Become device controller.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:31</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a657506e2afe946ada3deff4ecc40e4d1"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a657506e2afe946ada3deff4ecc40e4d1">fair::mq::PluginServices::UnsubscribeFromDeviceStateChange</a></div><div class="ttdeci">auto UnsubscribeFromDeviceStateChange(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from device state changes.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:147</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_abd34c038f5c3c94338419bbd887f3d14"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#abd34c038f5c3c94338419bbd887f3d14">fair::mq::PluginServices::SubscribeToPropertyChange</a></div><div class="ttdeci">auto SubscribeToPropertyChange(const std::string &amp;subscriber, std::function&lt; void(const std::string &amp;key, T)&gt; callback) const -&gt; void</div><div class="ttdoc">Subscribe to property updates of type T.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:247</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a364225377b53067f0bfa1e006fbe069e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a364225377b53067f0bfa1e006fbe069e">fair::mq::PluginServices::CycleLogVerbosityUp</a></div><div class="ttdeci">auto CycleLogVerbosityUp() -&gt; void</div><div class="ttdoc">Increases logging verbosity, or sets it to lowest if it is already highest.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:276</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_af4d3fd1caf8beffefc992b89e7479007"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#af4d3fd1caf8beffefc992b89e7479007">fair::mq::PluginServices::GetPropertiesAsString</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsString(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:225</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1ab97f8394a3e1552277ff2564e16c6a"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1ab97f8394a3e1552277ff2564e16c6a">fair::mq::PluginServices::PropertyExists</a></div><div class="ttdeci">auto PropertyExists(const std::string &amp;key) const -&gt; bool</div><div class="ttdoc">Checks a property with the given key exist in the configuration.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:154</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1b96fc3f61efccfa5c2048eb578b60e5"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1b96fc3f61efccfa5c2048eb578b60e5">fair::mq::PluginServices::UnsubscribeFromPropertyChange</a></div><div class="ttdeci">auto UnsubscribeFromPropertyChange(const std::string &amp;subscriber) -&gt; void</div><div class="ttdoc">Unsubscribe from property updates of type T.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:255</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ab966df2353bbce792a5b938f420080c0"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ab966df2353bbce792a5b938f420080c0">fair::mq::PluginServices::GetChannelInfo</a></div><div class="ttdeci">auto GetChannelInfo() const -&gt; std::unordered_map&lt; std::string, int &gt;</div><div class="ttdoc">Retrieve current channel information.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:235</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a49179c80826ae5ec87d77b8d50d8ec44"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a49179c80826ae5ec87d77b8d50d8ec44">fair::mq::PluginServices::GetPropertyAsString</a></div><div class="ttdeci">auto GetPropertyAsString(const std::string &amp;key) const -&gt; std::string</div><div class="ttdoc">Read config property as string, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:200</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a546360c16172c5d3c83f483871fa0c7e"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a546360c16172c5d3c83f483871fa0c7e">fair::mq::PluginServices::StealDeviceControl</a></div><div class="ttdeci">auto StealDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Become device controller by force.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:47</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_af7127f156ba970298a23b8b67550a43b"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#af7127f156ba970298a23b8b67550a43b">fair::mq::PluginServices::ReleaseDeviceControl</a></div><div class="ttdeci">auto ReleaseDeviceControl(const std::string &amp;controller) -&gt; void</div><div class="ttdoc">Release device controller role.</div><div class="ttdef"><b>Definition:</b> PluginServices.cxx:54</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a352fad62f282e921b0c722dfcbaaa73d"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a352fad62f282e921b0c722dfcbaaa73d">fair::mq::PluginServices::GetProperties</a></div><div class="ttdeci">fair::mq::Properties GetProperties(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:215</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ad186ca529c4c374d35d9229019e83e10"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ad186ca529c4c374d35d9229019e83e10">fair::mq::PluginServices::SetProperties</a></div><div class="ttdeci">void SetProperties(const fair::mq::Properties &amp;props)</div><div class="ttdoc">Set multiple config properties.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:166</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_ad6c37fce55cb631d9f5be45b93a544f9"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#ad6c37fce55cb631d9f5be45b93a544f9">fair::mq::PluginServices::SubscribeToPropertyChangeAsString</a></div><div class="ttdeci">auto SubscribeToPropertyChangeAsString(const std::string &amp;subscriber, std::function&lt; void(const std::string &amp;key, std::string)&gt; callback) const -&gt; void</div><div class="ttdoc">Subscribe to property updates.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:262</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_adc2f2ddc5a3e2d6a5846672d40cac359"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#adc2f2ddc5a3e2d6a5846672d40cac359">fair::mq::PluginServices::GetProperty</a></div><div class="ttdeci">auto GetProperty(const std::string &amp;key) const -&gt; T</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:184</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1Plugin_html"><div class="ttname"><a href="classfair_1_1mq_1_1Plugin.html">fair::mq::Plugin</a></div><div class="ttdoc">Base class for FairMQ plugins.</div><div class="ttdef"><b>Definition:</b> Plugin.h:43</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1PluginServices_html_a1ed12471e1736e2545645f3a12238d69"><div class="ttname"><a href="classfair_1_1mq_1_1PluginServices.html#a1ed12471e1736e2545645f3a12238d69">fair::mq::PluginServices::ToStr</a></div><div class="ttdeci">static auto ToStr(DeviceState state) -&gt; std::string</div><div class="ttdoc">Convert DeviceState to string.</div><div class="ttdef"><b>Definition:</b> PluginServices.h:86</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,105 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Process.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Process.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_PROCESS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_PROCESS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">struct </span>execute_result</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; std::string console_out;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keywordtype">int</span> exit_code;</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;};</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;execute_result execute(<span class="keyword">const</span> std::string&amp; cmd,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keyword">const</span> std::string&amp; prefix = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">const</span> std::string&amp; input = <span class="stringliteral">&quot;&quot;</span>,</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">int</span> sig = -1);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_PROCESS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,96 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/ProgOptionsFwd.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ProgOptionsFwd.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PROGOPTIONSFWD_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PROGOPTIONSFWD_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;{</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">class </span>ProgOptions;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;}</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">using</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">FairMQProgOptions</a> = <a class="code" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>;</div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PROGOPTIONSFWD_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,296 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/ProgOptions.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">ProgOptions.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PROGOPTIONS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_PROGOPTIONS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;FairMQChannel.h&quot;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;FairMQLogger.h&quot;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/EventManager.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/ProgOptionsFwd.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/program_options.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;{</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">struct </span>PropertyNotFoundError : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">class </span>ProgOptions</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="keyword">public</span>:</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; ProgOptions();</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PropertyNotFoundError.html"> 38</a></span>&#160; <span class="keyword">virtual</span> ~<a class="code" href="classfair_1_1mq_1_1ProgOptions.html">ProgOptions</a>() {}</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html"> 40</a></span>&#160; <span class="keywordtype">void</span> ParseAll(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; cmdArgs, <span class="keywordtype">bool</span> allowUnregistered);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> ParseAll(<span class="keyword">const</span> <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> <span class="keyword">const</span>* <span class="keyword">const</span>* argv, <span class="keywordtype">bool</span> allowUnregistered = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">void</span> Notify();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <span class="keywordtype">void</span> AddToCmdLineOptions(<span class="keyword">const</span> boost::program_options::options_description optDesc, <span class="keywordtype">bool</span> visible = <span class="keyword">true</span>);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; boost::program_options::options_description&amp; GetCmdLineOptions();</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordtype">int</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a95494fa84eea46fae7c666f0b82f7048">Count</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::unordered_map&lt;std::string, int&gt; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af890f73cfd75cdf5189be7fa936c7bf0">GetChannelInfo</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a67ef979cc694a245f28084389b8cffc0">GetPropertyKeys</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; T <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>(<span class="keyword">const</span> std::string&amp; key)<span class="keyword"> const</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (fVarMap.count(key)) {</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> fVarMap[key].as&lt;T&gt;();</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac"> 69</a></span>&#160; <span class="keywordflow">throw</span> <a class="code" href="structfair_1_1mq_1_1PropertyNotFoundError.html">PropertyNotFoundError</a>(fair::mq::tools::ToString(<span class="stringliteral">&quot;Config has no key: &quot;</span>, key));</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; }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; T <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">GetProperty</a>(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> T&amp; ifNotFound)<span class="keyword"> const</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (fVarMap.count(key)) {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">return</span> fVarMap[key].as&lt;T&gt;();</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#a4bc1ba359ddeebaa7158d5ebb42ce162"> 84</a></span>&#160; <span class="keywordflow">return</span> ifNotFound;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; std::string <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::string <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> std::string&amp; ifNotFound) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; fair::mq::Properties <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a59e98e064e01188e0e52b9ae6f2f83a2">GetProperties</a>(<span class="keyword">const</span> std::string&amp; q) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; fair::mq::Properties <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a69e8c85c5d7778f361244ae554af9f5b">GetPropertiesStartingWith</a>(<span class="keyword">const</span> std::string&amp; q) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; std::map&lt;std::string, std::string&gt; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#abcbfe2950b7cf1239cbc7fcf085a8f01">GetPropertiesAsString</a>(<span class="keyword">const</span> std::string&amp; q) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; std::map&lt;std::string, std::string&gt; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#aad0d6d0e82c486c9ba09ae5a3e0e4f25">GetPropertiesAsStringStartingWith</a>(<span class="keyword">const</span> std::string&amp; q) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(<span class="keyword">const</span> std::string&amp; key, T val)</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; SetVarMapValue&lt;typename std::decay&lt;T&gt;::type&gt;(key, val);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
<div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c"> 136</a></span>&#160; lock.unlock();</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; fEvents.Emit&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChange.html">fair::mq::PropertyChange</a>, <span class="keyword">typename</span> std::decay&lt;T&gt;::type&gt;(key, val);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; fEvents.Emit&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChangeAsString.html">fair::mq::PropertyChangeAsString</a>, std::string&gt;(key, <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(key));</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a95467b4bdb44c73cf960a60ff0457df2">UpdateProperty</a>(<span class="keyword">const</span> std::string&amp; key, T val)</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; {</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (fVarMap.count(key)) {</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; SetVarMapValue&lt;typename std::decay&lt;T&gt;::type&gt;(key, val);</div>
<div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#a95467b4bdb44c73cf960a60ff0457df2"> 152</a></span>&#160; </div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; lock.unlock();</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; fEvents.Emit&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChange.html">fair::mq::PropertyChange</a>, <span class="keyword">typename</span> std::decay&lt;T&gt;::type&gt;(key, val);</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; fEvents.Emit&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChangeAsString.html">fair::mq::PropertyChangeAsString</a>, std::string&gt;(key, <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">GetPropertyAsString</a>(key));</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;UpdateProperty failed, no property found with key &#39;&quot;</span> &lt;&lt; key &lt;&lt; <span class="stringliteral">&quot;&#39;&quot;</span>;</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; }</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ae9f743fc76dee8566eb843640120e8f3">SetProperties</a>(<span class="keyword">const</span> fair::mq::Properties&amp; input);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a6b014a8adcf80aa6fe8b3471e87f13e6">UpdateProperties</a>(<span class="keyword">const</span> fair::mq::Properties&amp; input);</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a8e9af05d7ca5f7ac372971a9c7450195">DeleteProperty</a>(<span class="keyword">const</span> std::string&amp; key);</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#ac1e7828be92f2bb8419c26e8f5670c8c">AddChannel</a>(<span class="keyword">const</span> std::string&amp; name, <span class="keyword">const</span> <a class="code" href="classFairMQChannel.html">FairMQChannel</a>&amp; channel);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#afbf4111312c5cd350dc7b924f8524c43">Subscribe</a>(<span class="keyword">const</span> std::string&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">typename</span> fair::mq::PropertyChange::KeyType, T)&gt; func)<span class="keyword"> const</span></div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; static_assert(!std::is_same&lt;T,const char*&gt;::value || !std::is_same&lt;T, char*&gt;::value,</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="stringliteral">&quot;In template member ProgOptions::Subscribe&lt;T&gt;(key,Lambda) the types const char* or char* for the calback signatures are not supported.&quot;</span>);</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; fEvents.Subscribe&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChange.html">fair::mq::PropertyChange</a>, T&gt;(subscriber, func);</div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#afbf4111312c5cd350dc7b924f8524c43"> 191</a></span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af5afa61b1a9eebb4a9558da3fc8b576a">Unsubscribe</a>(<span class="keyword">const</span> std::string&amp; subscriber)<span class="keyword"> const</span></div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; fEvents.Unsubscribe&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChange.html">fair::mq::PropertyChange</a>, T&gt;(subscriber);</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; }</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a3de4a0e1a29cdeccd54e67da544ab184">SubscribeAsString</a>(<span class="keyword">const</span> std::string&amp; subscriber, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">typename</span> fair::mq::PropertyChange::KeyType, std::string)&gt; func)<span class="keyword"> const</span></div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; fEvents.Subscribe&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChangeAsString.html">fair::mq::PropertyChangeAsString</a>, std::string&gt;(subscriber, func);</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#af5a595dbee8a9331d33e0cd3eaefb4ae">UnsubscribeAsString</a>(<span class="keyword">const</span> std::string&amp; subscriber)<span class="keyword"> const</span></div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword"> </span>{</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; fEvents.Unsubscribe&lt;<a class="code" href="structfair_1_1mq_1_1PropertyChangeAsString.html">fair::mq::PropertyChangeAsString</a>, std::string&gt;(subscriber);</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a96cf8720fd0dff3f4470973cccb9cb3b">PrintHelp</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a1bbba3bdd59e4a928602999635a09db7">PrintOptions</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a72b6fe74ff97eb4c318dd53791143a02">PrintOptionsRaw</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">const</span> boost::program_options::variables_map&amp; <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a2ded0c21581b765a64fd09ac5c52bdce">GetVarMap</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fVarMap; }</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#a2ded0c21581b765a64fd09ac5c52bdce"> 235</a></span>&#160; T <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a5b941eebf2020ad9db2307b2052fbe0f">GetValue</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span> <span class="comment">/* TODO: deprecate this */</span></div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; {</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (fVarMap.count(key)) {</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">return</span> fVarMap[key].as&lt;T&gt;();</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1ProgOptions.html#a5b941eebf2020ad9db2307b2052fbe0f"> 241</a></span>&#160; LOG(warn) &lt;&lt; <span class="stringliteral">&quot;Config has no key: &quot;</span> &lt;&lt; key &lt;&lt; <span class="stringliteral">&quot;. Returning default constructed object.&quot;</span>;</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">return</span> T();</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; }</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">int</span> SetValue(<span class="keyword">const</span> std::string&amp; key, T val) <span class="comment">/* TODO: deprecate this */</span> { <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">SetProperty</a>(key, val); <span class="keywordflow">return</span> 0; }</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; std::string <a class="code" href="classfair_1_1mq_1_1ProgOptions.html#a2a83424f7420f8d1ddab01fb85f07221">GetStringValue</a>(<span class="keyword">const</span> std::string&amp; key) <span class="keyword">const</span>; <span class="comment">/* TODO: deprecate this */</span></div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">void</span> ParseDefaults();</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; std::unordered_map&lt;std::string, int&gt; GetChannelInfoImpl() <span class="keyword">const</span>;</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; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">void</span> SetVarMapValue(<span class="keyword">const</span> std::string&amp; key, <span class="keyword">const</span> T&amp; val)</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; std::map&lt;std::string, boost::program_options::variable_value&gt;&amp; vm = fVarMap;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; vm[key].value() = boost::any(val);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; }</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; boost::program_options::variables_map fVarMap; </div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; boost::program_options::options_description fAllOptions; </div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; std::vector&lt;std::string&gt; fUnregisteredOptions; </div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; </div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <span class="keyword">mutable</span> <a class="code" href="classfair_1_1mq_1_1EventManager.html">fair::mq::EventManager</a> fEvents;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="keyword">mutable</span> std::mutex fMtx;</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;};</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PROGOPTIONS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:41</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a67ef979cc694a245f28084389b8cffc0"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a67ef979cc694a245f28084389b8cffc0">fair::mq::ProgOptions::GetPropertyKeys</a></div><div class="ttdeci">std::vector&lt; std::string &gt; GetPropertyKeys() const</div><div class="ttdoc">Discover the list of property keys.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:189</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a2ded0c21581b765a64fd09ac5c52bdce"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a2ded0c21581b765a64fd09ac5c52bdce">fair::mq::ProgOptions::GetVarMap</a></div><div class="ttdeci">const boost::program_options::variables_map &amp; GetVarMap() const</div><div class="ttdoc">returns the property container</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:235</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a69e8c85c5d7778f361244ae554af9f5b"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a69e8c85c5d7778f361244ae554af9f5b">fair::mq::ProgOptions::GetPropertiesStartingWith</a></div><div class="ttdeci">fair::mq::Properties GetPropertiesStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:256</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a95467b4bdb44c73cf960a60ff0457df2"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a95467b4bdb44c73cf960a60ff0457df2">fair::mq::ProgOptions::UpdateProperty</a></div><div class="ttdeci">bool UpdateProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Updates an existing config property (or fails if it doesn't exist)</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:152</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af5afa61b1a9eebb4a9558da3fc8b576a"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af5afa61b1a9eebb4a9558da3fc8b576a">fair::mq::ProgOptions::Unsubscribe</a></div><div class="ttdeci">void Unsubscribe(const std::string &amp;subscriber) const</div><div class="ttdoc">Unsubscribe from property updates of type T.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:202</div></div>
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ac1e7828be92f2bb8419c26e8f5670c8c"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ac1e7828be92f2bb8419c26e8f5670c8c">fair::mq::ProgOptions::AddChannel</a></div><div class="ttdeci">void AddChannel(const std::string &amp;name, const FairMQChannel &amp;channel)</div><div class="ttdoc">Takes the provided channel and creates properties based on it.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:357</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ab68955211261d786ddec42aa986484ac"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ab68955211261d786ddec42aa986484ac">fair::mq::ProgOptions::GetProperty</a></div><div class="ttdeci">T GetProperty(const std::string &amp;key) const</div><div class="ttdoc">Read config property, throw if no property with this key exists.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:69</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a9d0a829555bafa0f19a3f072aa5d0097"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a9d0a829555bafa0f19a3f072aa5d0097">fair::mq::ProgOptions::GetPropertyAsString</a></div><div class="ttdeci">std::string GetPropertyAsString(const std::string &amp;key) const</div><div class="ttdoc">Read config property as string, throw if no property with this key exists.</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a272f25798b948992a560df32d405517c"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a272f25798b948992a560df32d405517c">fair::mq::ProgOptions::SetProperty</a></div><div class="ttdeci">void SetProperty(const std::string &amp;key, T val)</div><div class="ttdoc">Set config property.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:136</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_abcbfe2950b7cf1239cbc7fcf085a8f01"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#abcbfe2950b7cf1239cbc7fcf085a8f01">fair::mq::ProgOptions::GetPropertiesAsString</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsString(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:271</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a96cf8720fd0dff3f4470973cccb9cb3b"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a96cf8720fd0dff3f4470973cccb9cb3b">fair::mq::ProgOptions::PrintHelp</a></div><div class="ttdeci">void PrintHelp() const</div><div class="ttdoc">prints full options description</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:383</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PropertyChange_html"><div class="ttname"><a href="structfair_1_1mq_1_1PropertyChange.html">fair::mq::PropertyChange</a></div><div class="ttdef"><b>Definition:</b> Properties.h:37</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a3de4a0e1a29cdeccd54e67da544ab184"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a3de4a0e1a29cdeccd54e67da544ab184">fair::mq::ProgOptions::SubscribeAsString</a></div><div class="ttdeci">void SubscribeAsString(const std::string &amp;subscriber, std::function&lt; void(typename fair::mq::PropertyChange::KeyType, std::string)&gt; func) const</div><div class="ttdoc">Subscribe to property updates, with values converted to string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:213</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PropertyNotFoundError_html"><div class="ttname"><a href="structfair_1_1mq_1_1PropertyNotFoundError.html">fair::mq::PropertyNotFoundError</a></div><div class="ttdef"><b>Definition:</b> ProgOptions.h:38</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1EventManager_html"><div class="ttname"><a href="classfair_1_1mq_1_1EventManager.html">fair::mq::EventManager</a></div><div class="ttdoc">Manages event callbacks from different subscribers.</div><div class="ttdef"><b>Definition:</b> EventManager.h:56</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a6b014a8adcf80aa6fe8b3471e87f13e6"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a6b014a8adcf80aa6fe8b3471e87f13e6">fair::mq::ProgOptions::UpdateProperties</a></div><div class="ttdeci">bool UpdateProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Updates multiple existing config properties (or fails of any of then do not exist,...</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:323</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_afbf4111312c5cd350dc7b924f8524c43"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#afbf4111312c5cd350dc7b924f8524c43">fair::mq::ProgOptions::Subscribe</a></div><div class="ttdeci">void Subscribe(const std::string &amp;subscriber, std::function&lt; void(typename fair::mq::PropertyChange::KeyType, T)&gt; func) const</div><div class="ttdoc">Subscribe to property updates of type T.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:191</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af5a595dbee8a9331d33e0cd3eaefb4ae"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af5a595dbee8a9331d33e0cd3eaefb4ae">fair::mq::ProgOptions::UnsubscribeAsString</a></div><div class="ttdeci">void UnsubscribeAsString(const std::string &amp;subscriber) const</div><div class="ttdoc">Unsubscribe from property updates that convert to string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:221</div></div>
<div class="ttc" id="aclassFairMQChannel_html"><div class="ttname"><a href="classFairMQChannel.html">FairMQChannel</a></div><div class="ttdoc">Wrapper class for FairMQSocket and related methods.</div><div class="ttdef"><b>Definition:</b> FairMQChannel.h:35</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_aad0d6d0e82c486c9ba09ae5a3e0e4f25"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#aad0d6d0e82c486c9ba09ae5a3e0e4f25">fair::mq::ProgOptions::GetPropertiesAsStringStartingWith</a></div><div class="ttdeci">std::map&lt; std::string, std::string &gt; GetPropertiesAsStringStartingWith(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties as string whose keys start with the provided string.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:291</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a72b6fe74ff97eb4c318dd53791143a02"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a72b6fe74ff97eb4c318dd53791143a02">fair::mq::ProgOptions::PrintOptionsRaw</a></div><div class="ttdeci">void PrintOptionsRaw() const</div><div class="ttdoc">prints full options description in a compact machine-readable format</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:432</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_ae9f743fc76dee8566eb843640120e8f3"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#ae9f743fc76dee8566eb843640120e8f3">fair::mq::ProgOptions::SetProperties</a></div><div class="ttdeci">void SetProperties(const fair::mq::Properties &amp;input)</div><div class="ttdoc">Set multiple config properties.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:306</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a59e98e064e01188e0e52b9ae6f2f83a2"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a59e98e064e01188e0e52b9ae6f2f83a2">fair::mq::ProgOptions::GetProperties</a></div><div class="ttdeci">fair::mq::Properties GetProperties(const std::string &amp;q) const</div><div class="ttdoc">Read several config properties whose keys match the provided regular expression.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:236</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a95494fa84eea46fae7c666f0b82f7048"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a95494fa84eea46fae7c666f0b82f7048">fair::mq::ProgOptions::Count</a></div><div class="ttdeci">int Count(const std::string &amp;key) const</div><div class="ttdoc">Checks a property with the given key exist in the configuration.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:155</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a8e9af05d7ca5f7ac372971a9c7450195"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a8e9af05d7ca5f7ac372971a9c7450195">fair::mq::ProgOptions::DeleteProperty</a></div><div class="ttdeci">void DeleteProperty(const std::string &amp;key)</div><div class="ttdoc">Deletes a property with the given key from the config store.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:349</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1PropertyChangeAsString_html"><div class="ttname"><a href="structfair_1_1mq_1_1PropertyChangeAsString.html">fair::mq::PropertyChangeAsString</a></div><div class="ttdef"><b>Definition:</b> Properties.h:38</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a2a83424f7420f8d1ddab01fb85f07221"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a2a83424f7420f8d1ddab01fb85f07221">fair::mq::ProgOptions::GetStringValue</a></div><div class="ttdeci">std::string GetStringValue(const std::string &amp;key) const</div><div class="ttdoc">Read config property as string, return default-constructed object if key doesn't exist.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:213</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a5b941eebf2020ad9db2307b2052fbe0f"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a5b941eebf2020ad9db2307b2052fbe0f">fair::mq::ProgOptions::GetValue</a></div><div class="ttdeci">T GetValue(const std::string &amp;key) const</div><div class="ttdoc">Read config property, return default-constructed object if key doesn't exist.</div><div class="ttdef"><b>Definition:</b> ProgOptions.h:241</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_a1bbba3bdd59e4a928602999635a09db7"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#a1bbba3bdd59e4a928602999635a09db7">fair::mq::ProgOptions::PrintOptions</a></div><div class="ttdeci">void PrintOptions() const</div><div class="ttdoc">prints properties stored in the property container</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:388</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1ProgOptions_html_af890f73cfd75cdf5189be7fa936c7bf0"><div class="ttname"><a href="classfair_1_1mq_1_1ProgOptions.html#af890f73cfd75cdf5189be7fa936c7bf0">fair::mq::ProgOptions::GetChannelInfo</a></div><div class="ttdeci">std::unordered_map&lt; std::string, int &gt; GetChannelInfo() const</div><div class="ttdoc">Retrieve current channel information.</div><div class="ttdef"><b>Definition:</b> ProgOptions.cxx:161</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,152 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/Properties.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Properties.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PROPERTIES_H</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define FAIR_MQ_PROPERTIES_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;fairmq/EventManager.h&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;boost/any.hpp&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;boost/core/demangle.hpp&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;typeindex&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;typeinfo&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></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; </div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">using</span> Property = boost::any;</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="keyword">using</span> Properties = std::map&lt;std::string, Property&gt;;</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="keyword">struct </span>PropertyChange : Event&lt;std::string&gt; {};</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">struct </span>PropertyChangeAsString : Event&lt;std::string&gt; {};</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">class </span>PropertyHelper</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="keyword">public</span>:</div>
<div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PropertyChange.html"> 37</a></span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> T&gt;</div>
<div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1PropertyChangeAsString.html"> 38</a></span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> AddType(std::string label = <span class="stringliteral">&quot;&quot;</span>)</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; {</div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1PropertyHelper.html"> 40</a></span>&#160; <span class="keywordflow">if</span> (label == <span class="stringliteral">&quot;&quot;</span>) {</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; label = boost::core::demangle(<span class="keyword">typeid</span>(T).name());</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; }</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; fTypeInfos[std::type_index(<span class="keyword">typeid</span>(T))] = [label](<span class="keyword">const</span> Property&amp; p) {</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; std::stringstream ss;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; ss &lt;&lt; boost::any_cast&lt;T&gt;(p);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> std::pair&lt;std::string, std::string&gt;{ss.str(), label};</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; };</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; fEventEmitters[std::type_index(<span class="keyword">typeid</span>(T))] = [](<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1EventManager.html">fair::mq::EventManager</a>&amp; em, <span class="keyword">const</span> std::string&amp; k, <span class="keyword">const</span> Property&amp; p) {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; em.Emit&lt;PropertyChange, T&gt;(k, boost::any_cast&lt;T&gt;(p));</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; };</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; }</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="keyword">static</span> std::string ConvertPropertyToString(<span class="keyword">const</span> Property&amp; p)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span> fTypeInfos.at(p.type())(p).first;</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// returns &lt;valueAsString, typenameAsString&gt;</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keyword">static</span> std::pair&lt;std::string, std::string&gt; GetPropertyInfo(<span class="keyword">const</span> Property&amp; p)</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordflow">try</span> {</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> fTypeInfos.at(p.type())(p);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; } <span class="keywordflow">catch</span> (std::out_of_range&amp; oor) {</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> {<span class="stringliteral">&quot;[unidentified_type]&quot;</span>, <span class="stringliteral">&quot;[unidentified_type]&quot;</span>};</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</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; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keyword">static</span> std::unordered_map&lt;std::type_index, void(*)(<span class="keyword">const</span> <a class="code" href="classfair_1_1mq_1_1EventManager.html">fair::mq::EventManager</a>&amp;, <span class="keyword">const</span> std::string&amp;, <span class="keyword">const</span> Property&amp;)&gt; fEventEmitters;</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">static</span> std::unordered_map&lt;std::type_index, std::function&lt;std::pair&lt;std::string, std::string&gt;(<span class="keyword">const</span> Property&amp;)&gt;&gt; fTypeInfos;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;};</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PROPERTIES_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1EventManager_html"><div class="ttname"><a href="classfair_1_1mq_1_1EventManager.html">fair::mq::EventManager</a></div><div class="ttdoc">Manages event callbacks from different subscribers.</div><div class="ttdef"><b>Definition:</b> EventManager.h:56</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,98 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/PropertyOutput.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">PropertyOutput.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_PROPERTYOUT_H</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define FAIR_MQ_PROPERTYOUT_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160; </div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="keyword">namespace </span>boost</div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;{</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> boost::any&amp; p)</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="keywordflow">return</span> os &lt;&lt; fair::mq::PropertyHelper::GetPropertyInfo(p).first;</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;}</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_PROPERTYOUT_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,187 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/RateLimit.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">RateLimit.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_RATELIMIT_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_RATELIMIT_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;cassert&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="comment">// #include &lt;iostream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">class </span>RateLimiter</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;{</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keyword">using</span> clock = std::chrono::steady_clock;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">explicit</span> <a class="code" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a593f79d4621ad7a54dddec55d4435adb">RateLimiter</a>(<span class="keywordtype">float</span> rate)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; : tw_req(std::chrono::seconds(1))</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; , start_time(clock::now())</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (rate &lt;= 0) {</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; tw_req = std::chrono::nanoseconds(1);</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; tw_req = std::chrono::duration_cast&lt;clock::duration&gt;(tw_req / rate);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; skip_check_count = std::max(1, <span class="keywordtype">int</span>(std::chrono::milliseconds(5) / tw_req));</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; count = skip_check_count;</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// std::cerr &lt;&lt; &quot;skip_check_count: &quot; &lt;&lt; skip_check_count &lt;&lt; &#39;\n&#39;;</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a593f79d4621ad7a54dddec55d4435adb"> 59</a></span>&#160; }</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a577dffe74db4af027a7e43ff90fea679">maybe_sleep</a>()</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keyword">using namespace </span>std::chrono;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (--count == 0) {</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keyword">auto</span> now = clock::now();</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span> (tw == clock::duration::zero()) {</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; tw = (now - start_time) / skip_check_count;</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; tw = (1 * tw + 3 * (now - start_time) / skip_check_count) / 4;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">// std::ostringstream s; s &lt;&lt; &quot;tw = &quot; &lt;&lt; std::setw(10) &lt;&lt;</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">// duration_cast&lt;nanoseconds&gt;(tw).count() &lt;&lt; &quot;ns, req = &quot; &lt;&lt;</span></div>
<div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a577dffe74db4af027a7e43ff90fea679"> 80</a></span>&#160; <span class="comment">// duration_cast&lt;nanoseconds&gt;(tw_req).count() &lt;&lt; &quot;ns, &quot;;</span></div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (tw &gt; tw_req * 65 / 64) {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">// the time between maybe_sleep calls is more than 1% too long</span></div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="comment">// fix it by reducing ts towards 0 and if ts = 0 doesn&#39;t suffice, increase</span></div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// skip_check_count</span></div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">if</span> (ts &gt; clock::duration::zero()) {</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; ts = std::max(clock::duration::zero(), ts - (tw - tw_req) * skip_check_count * 1 / 2);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// std::cerr &lt;&lt; s.str() &lt;&lt; &quot;maybe_sleep: going too slow; sleep less: &quot; &lt;&lt;</span></div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">// duration_cast&lt;microseconds&gt;(ts).count() &lt;&lt; &quot;µs\n&quot;;</span></div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; skip_check_count =</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; std::min(<span class="keywordtype">int</span>(seconds(1) / tw_req), <span class="comment">// recheck at least every second</span></div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; (skip_check_count * 5 + 3) / 4);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// std::cerr &lt;&lt; s.str() &lt;&lt; &quot;maybe_sleep: going too slow; work more: &quot; &lt;&lt;</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// skip_check_count &lt;&lt; &quot;\n&quot;;</span></div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (tw &lt; tw_req * 63 / 64) {</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// the time between maybe_sleep calls is more than 1% too short</span></div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// fix it by reducing skip_check_count towards 1 and if skip_check_count = 1</span></div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// doesn&#39;t suffice, increase ts</span></div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="comment">// The minimum work count is defined such that a typical sleep time is greater</span></div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="comment">// than 1ms.</span></div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="comment">// The user requested 1/tw_req work iterations per second. Divided by 1000, that&#39;s</span></div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="comment">// the count per ms.</span></div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> min_skip_count = std::max(1, <span class="keywordtype">int</span>(milliseconds(5) / tw_req));</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (skip_check_count &gt; min_skip_count) {</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; assert(ts == clock::duration::zero());</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; skip_check_count = std::max(min_skip_count, skip_check_count * 3 / 4);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">// std::cerr &lt;&lt; s.str() &lt;&lt; &quot;maybe_sleep: going too fast; work less: &quot; &lt;&lt;</span></div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="comment">// skip_check_count &lt;&lt; &quot;\n&quot;;</span></div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; ts += (tw_req - tw) * (skip_check_count * 7) / 8;</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="comment">// std::cerr &lt;&lt; s.str() &lt;&lt; &quot;maybe_sleep: going too fast; sleep more: &quot; &lt;&lt;</span></div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// duration_cast&lt;microseconds&gt;(ts).count() &lt;&lt; &quot;µs\n&quot;;</span></div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; }</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; start_time = now;</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; count = skip_check_count;</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span> (ts &gt; clock::duration::zero()) {</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; std::this_thread::sleep_for(ts);</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; }</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; </div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; clock::duration tw{}, </div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; ts{}, </div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; tw_req; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; clock::time_point start_time;</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">int</span> count = 1;</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordtype">int</span> skip_check_count = 1;</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;};</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">#endif // FAIR_MQ_TOOLS_RATELIMIT_H</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassfair_1_1mq_1_1tools_1_1RateLimiter_html_a593f79d4621ad7a54dddec55d4435adb"><div class="ttname"><a href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a593f79d4621ad7a54dddec55d4435adb">fair::mq::tools::RateLimiter::RateLimiter</a></div><div class="ttdeci">RateLimiter(float rate)</div><div class="ttdef"><b>Definition:</b> RateLimit.h:59</div></div>
<div class="ttc" id="aclassfair_1_1mq_1_1tools_1_1RateLimiter_html_a577dffe74db4af027a7e43ff90fea679"><div class="ttname"><a href="classfair_1_1mq_1_1tools_1_1RateLimiter.html#a577dffe74db4af027a7e43ff90fea679">fair::mq::tools::RateLimiter::maybe_sleep</a></div><div class="ttdeci">void maybe_sleep()</div><div class="ttdef"><b>Definition:</b> RateLimit.h:80</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,348 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/shmem/Region.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_6475741fe3587c0a949798307da6131d.html">shmem</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Region.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">* Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">* *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">* This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">* GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">* copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">********************************************************************************/</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SHMEM_REGION_H_</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define FAIR_MQ_SHMEM_REGION_H_</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">#include &quot;Common.h&quot;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;FairMQLogger.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;FairMQUnmanagedRegion.h&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;boost/filesystem.hpp&gt;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &lt;boost/process.hpp&gt;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &lt;boost/date_time/posix_time/posix_time.hpp&gt;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/managed_shared_memory.hpp&gt;</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/file_mapping.hpp&gt;</span></div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#include &lt;boost/interprocess/ipc/message_queue.hpp&gt;</span></div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span> <span class="comment">// min</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &lt;thread&gt;</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span> <span class="comment">// make_unique</span></div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="preprocessor">#include &lt;cerrno&gt;</span></div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;ios&gt;</span></div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; </div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="keyword">struct </span>Region</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;{</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; Region(<span class="keyword">const</span> std::string&amp; shmId, uint16_t <span class="keywordtype">id</span>, uint64_t size, <span class="keywordtype">bool</span> remote, RegionCallback callback, RegionBulkCallback bulkCallback, <span class="keyword">const</span> std::string&amp; path, <span class="keywordtype">int</span> flags)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; : fRemote(remote)</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; , fLinger(100)</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; , fStop(false)</div>
<div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1shmem_1_1Region.html"> 51</a></span>&#160; , fName(<span class="stringliteral">&quot;fmq_&quot;</span> + shmId + <span class="stringliteral">&quot;_rg_&quot;</span> + std::to_string(id))</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; , fQueueName(<span class="stringliteral">&quot;fmq_&quot;</span> + shmId + <span class="stringliteral">&quot;_rgq_&quot;</span> + std::to_string(id))</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; , fShmemObject()</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; , fFile(nullptr)</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; , fFileMapping()</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; , fQueue(nullptr)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; , fAcksReceiver()</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; , fAcksSender()</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; , fCallback(callback)</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; , fBulkCallback(bulkCallback)</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="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">if</span> (path != <span class="stringliteral">&quot;&quot;</span>) {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; fName = std::string(path + fName);</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="keywordflow">if</span> (!fRemote) {</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="comment">// create a file</span></div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; std::filebuf fbuf;</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (fbuf.open(fName, std::ios_base::in | std::ios_base::out | std::ios_base::trunc | std::ios_base::binary)) {</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// set the size</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; fbuf.pubseekoff(size - 1, std::ios_base::beg);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; fbuf.sputc(0);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; fFile = fopen(fName.c_str(), <span class="stringliteral">&quot;r+&quot;</span>);</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">if</span> (!fFile) {</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;Failed to initialize file: &quot;</span> &lt;&lt; fName;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; LOG(error) &lt;&lt; <span class="stringliteral">&quot;errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="stringliteral">&quot;: &quot;</span> &lt;&lt; strerror(errno);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">throw</span> std::runtime_error(tools::ToString(<span class="stringliteral">&quot;Failed to initialize file for shared memory region: &quot;</span>, strerror(errno)));</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; fFileMapping = file_mapping(fName.c_str(), read_write);</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;shmem: initialized file: &quot;</span> &lt;&lt; fName;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; fRegion = mapped_region(fFileMapping, read_write, 0, size, 0, flags);</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">if</span> (fRemote) {</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; fShmemObject = shared_memory_object(open_only, fName.c_str(), read_write);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; fShmemObject = shared_memory_object(create_only, fName.c_str(), read_write);</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; fShmemObject.truncate(size);</div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; fRegion = mapped_region(fShmemObject, read_write, 0, 0, 0, flags);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; }</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; </div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; InitializeQueues();</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; StartSendingAcks();</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;shmem: initialized region: &quot;</span> &lt;&lt; fName;</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; </div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1Region.html">Region</a>() = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1Region.html">Region</a>(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1shmem_1_1Region.html">Region</a>&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="structfair_1_1mq_1_1shmem_1_1Region.html">Region</a>(<a class="code" href="structfair_1_1mq_1_1shmem_1_1Region.html">Region</a>&amp;&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordtype">void</span> InitializeQueues()</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keyword">using namespace </span>boost::interprocess;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (fRemote) {</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; fQueue = std::make_unique&lt;message_queue&gt;(open_only, fQueueName.c_str());</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; fQueue = std::make_unique&lt;message_queue&gt;(create_only, fQueueName.c_str(), 1024, fAckBunchSize * <span class="keyword">sizeof</span>(<a class="code" href="structFairMQRegionBlock.html">RegionBlock</a>));</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;shmem: initialized region queue: &quot;</span> &lt;&lt; fQueueName;</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordtype">void</span> StartSendingAcks() { fAcksSender = std::thread(&amp;Region::SendAcks, <span class="keyword">this</span>); }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordtype">void</span> SendAcks()</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; std::unique_ptr&lt;RegionBlock[]&gt; blocks = std::make_unique&lt;RegionBlock[]&gt;(fAckBunchSize);</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordtype">size_t</span> blocksToSend = 0;</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="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; blocksToSend = 0;</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; {</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fBlockMtx);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="comment">// try to get &lt;fAckBunchSize&gt; blocks</span></div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (fBlocksToFree.size() &lt; fAckBunchSize) {</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; fBlockSendCV.wait_for(lock, std::chrono::milliseconds(500));</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="comment">// send whatever blocks we have</span></div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; blocksToSend = std::min(fBlocksToFree.size(), fAckBunchSize);</div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; copy_n(fBlocksToFree.end() - blocksToSend, blocksToSend, blocks.get());</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; fBlocksToFree.resize(fBlocksToFree.size() - blocksToSend);</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">if</span> (blocksToSend &gt; 0) {</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">while</span> (!fQueue-&gt;try_send(blocks.get(), blocksToSend * <span class="keyword">sizeof</span>(RegionBlock), 0) &amp;&amp; !fStop) {</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// receiver slow? yield and try again...</span></div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; std::this_thread::yield();</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; }</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;Sent &quot; &lt;&lt; blocksToSend &lt;&lt; &quot; blocks.&quot;;</span></div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; } <span class="keywordflow">else</span> { <span class="comment">// blocksToSend == 0</span></div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">if</span> (fStop) {</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; }</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="l00155"></a><span class="lineno"> 155</span>&#160; LOG(trace) &lt;&lt; <span class="stringliteral">&quot;AcksSender for &quot;</span> &lt;&lt; fName &lt;&lt; <span class="stringliteral">&quot; leaving &quot;</span> &lt;&lt; <span class="stringliteral">&quot;(blocks left to free: &quot;</span> &lt;&lt; fBlocksToFree.size() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; &lt;&lt; <span class="stringliteral">&quot; blocks left to send: &quot;</span> &lt;&lt; blocksToSend &lt;&lt; <span class="stringliteral">&quot;).&quot;</span>;</div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; </div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordtype">void</span> StartReceivingAcks() { fAcksReceiver = std::thread(&amp;Region::ReceiveAcks, <span class="keyword">this</span>); }</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">void</span> ReceiveAcks()</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> priority;</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; boost::interprocess::message_queue::size_type recvdSize;</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; std::unique_ptr&lt;RegionBlock[]&gt; blocks = std::make_unique&lt;RegionBlock[]&gt;(fAckBunchSize);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; std::vector&lt;fair::mq::RegionBlock&gt; result;</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; result.reserve(fAckBunchSize);</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; </div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; uint32_t timeout = 100;</div>
<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordtype">bool</span> leave = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span> (fStop) {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; timeout = fLinger;</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; leave = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keyword">auto</span> rcvTill = boost::posix_time::microsec_clock::universal_time() + boost::posix_time::milliseconds(timeout);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">while</span> (fQueue-&gt;timed_receive(blocks.get(), fAckBunchSize * <span class="keyword">sizeof</span>(RegionBlock), recvdSize, priority, rcvTill)) {</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keyword">const</span> <span class="keyword">auto</span> numBlocks = recvdSize / <span class="keyword">sizeof</span>(RegionBlock);</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;Received &quot; &lt;&lt; numBlocks &lt;&lt; &quot; blocks (recvdSize: &quot; &lt;&lt; recvdSize &lt;&lt; &quot;). (remaining queue size: &quot; &lt;&lt; fQueue-&gt;get_num_msg() &lt;&lt; &quot;).&quot;;</span></div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">if</span> (fBulkCallback) {</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; result.clear();</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; numBlocks; i++) {</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; result.emplace_back(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(fRegion.get_address()) + blocks[i].fHandle, blocks[i].fSize, <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(blocks[i].fHint));</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; }</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; fBulkCallback(result);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fCallback) {</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; numBlocks; i++) {</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; fCallback(<span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(fRegion.get_address()) + blocks[i].fHandle, blocks[i].fSize, <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">void</span>*<span class="keyword">&gt;</span>(blocks[i].fHint));</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (leave) {</div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">break</span>;</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; LOG(trace) &lt;&lt; <span class="stringliteral">&quot;AcksReceiver for &quot;</span> &lt;&lt; fName &lt;&lt; <span class="stringliteral">&quot; leaving (remaining queue size: &quot;</span> &lt;&lt; fQueue-&gt;get_num_msg() &lt;&lt; <span class="stringliteral">&quot;).&quot;</span>;</div>
<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; }</div>
<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">void</span> ReleaseBlock(<span class="keyword">const</span> RegionBlock&amp; block)</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; {</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fBlockMtx);</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; fBlocksToFree.emplace_back(block);</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (fBlocksToFree.size() &gt;= fAckBunchSize) {</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; lock.unlock();</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; fBlockSendCV.notify_one();</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; }</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordtype">void</span> SetLinger(uint32_t linger) { fLinger = linger; }</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; uint32_t GetLinger()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> fLinger; }</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; ~Region()</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; {</div>
<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; fStop = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (fAcksSender.joinable()) {</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; fBlockSendCV.notify_one();</div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; fAcksSender.join();</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (!fRemote) {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span> (fAcksReceiver.joinable()) {</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; fAcksReceiver.join();</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</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; <span class="keywordflow">if</span> (boost::interprocess::shared_memory_object::remove(fName.c_str())) {</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Region &#39;&quot;</span> &lt;&lt; fName &lt;&lt; <span class="stringliteral">&quot;&#39; destroyed.&quot;</span>;</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; }</div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; </div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (boost::interprocess::file_mapping::remove(fName.c_str())) {</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;File mapping &#39;&quot;</span> &lt;&lt; fName &lt;&lt; <span class="stringliteral">&quot;&#39; destroyed.&quot;</span>;</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span> (fFile) {</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; fclose(fFile);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; }</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; </div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">if</span> (boost::interprocess::message_queue::remove(fQueueName.c_str())) {</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Region queue &#39;&quot;</span> &lt;&lt; fQueueName &lt;&lt; <span class="stringliteral">&quot;&#39; destroyed.&quot;</span>;</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// LOG(debug) &lt;&lt; &quot;shmem: region &#39;&quot; &lt;&lt; fName &lt;&lt; &quot;&#39; is remote, no cleanup necessary.&quot;;</span></div>
<div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Region queue &#39;&quot;</span> &lt;&lt; fQueueName &lt;&lt; <span class="stringliteral">&quot;&#39; is remote, no cleanup necessary&quot;</span>;</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; LOG(debug) &lt;&lt; <span class="stringliteral">&quot;Region &#39;&quot;</span> &lt;&lt; fName &lt;&lt; <span class="stringliteral">&quot;&#39; (&quot;</span> &lt;&lt; (fRemote ? <span class="stringliteral">&quot;remote&quot;</span> : <span class="stringliteral">&quot;local&quot;</span>) &lt;&lt; <span class="stringliteral">&quot;) destructed.&quot;</span>;</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; }</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keywordtype">bool</span> fRemote;</div>
<div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; uint32_t fLinger;</div>
<div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; std::atomic&lt;bool&gt; fStop;</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; std::string fName;</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; std::string fQueueName;</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; boost::interprocess::shared_memory_object fShmemObject;</div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; FILE* fFile;</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; boost::interprocess::file_mapping fFileMapping;</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; boost::interprocess::mapped_region fRegion;</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; std::mutex fBlockMtx;</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; std::condition_variable fBlockSendCV;</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; std::vector&lt;RegionBlock&gt; fBlocksToFree;</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keyword">const</span> std::size_t fAckBunchSize = 256;</div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; std::unique_ptr&lt;boost::interprocess::message_queue&gt; fQueue;</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; std::thread fAcksReceiver;</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; std::thread fAcksSender;</div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; RegionCallback fCallback;</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; RegionBulkCallback fBulkCallback;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;};</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;} <span class="comment">// namespace fair::mq::shmem</span></div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SHMEM_REGION_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructFairMQRegionBlock_html"><div class="ttname"><a href="structFairMQRegionBlock.html">FairMQRegionBlock</a></div><div class="ttdef"><b>Definition:</b> FairMQUnmanagedRegion.h:56</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1shmem_1_1Region_html"><div class="ttname"><a href="structfair_1_1mq_1_1shmem_1_1Region.html">fair::mq::shmem::Region</a></div><div class="ttdef"><b>Definition:</b> Region.h:52</div></div>
<div class="ttc" id="anamespacefair_1_1mq_1_1shmem_html"><div class="ttname"><a href="namespacefair_1_1mq_1_1shmem.html">fair::mq::shmem</a></div><div class="ttdef"><b>Definition:</b> Common.h:33</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

101
v1.4.33/SDK_8h_source.html Normal file
View File

@@ -0,0 +1,101 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/SDK.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SDK.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// IWYU pragma: begin_exports</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/AsioAsyncOp.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/AsioBase.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSAgent.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSEnvironment.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSInfo.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSSession.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSTask.h&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/DDSTopology.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Error.h&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Topology.h&gt;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;fairmq/sdk/Traits.h&gt;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment">// IWYU pragma: end_exports</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif // FAIR_MQ_SDK_H</span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,128 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Semaphore.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Semaphore.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_SEMAPHORE_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_SEMAPHORE_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;mutex&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="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">struct </span>Semaphore</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; Semaphore();</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">explicit</span> Semaphore(std::size_t initial_count);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; <span class="keyword">auto</span> Wait() -&gt; void;</div>
<div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1tools_1_1Semaphore.html"> 31</a></span>&#160; <span class="keyword">auto</span> Signal() -&gt; void;</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keyword">auto</span> GetCount() const -&gt; std::<span class="keywordtype">size_t</span>;</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;private:</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; std::<span class="keywordtype">size_t</span> fCount;</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; mutable std::mutex fMutex;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; std::condition_variable fCv;</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;};</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;struct <a class="code" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">SharedSemaphore</a></div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;{</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">SharedSemaphore</a>();</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keyword">explicit</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">SharedSemaphore</a>(std::size_t initial_count);</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keyword">auto</span> Wait() -&gt; void;</div>
<div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html"> 50</a></span>&#160; <span class="keyword">auto</span> Signal() -&gt; void;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">auto</span> GetCount() const -&gt; std::<span class="keywordtype">size_t</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;private:</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::shared_ptr&lt;<a class="code" href="structfair_1_1mq_1_1tools_1_1Semaphore.html">Semaphore</a>&gt; fSemaphore;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_SEMAPHORE_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1SharedSemaphore_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html">fair::mq::tools::SharedSemaphore</a></div><div class="ttdoc">A simple copyable blocking semaphore.</div><div class="ttdef"><b>Definition:</b> Semaphore.h:51</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Semaphore_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Semaphore.html">fair::mq::tools::Semaphore</a></div><div class="ttdoc">A simple blocking semaphore.</div><div class="ttdef"><b>Definition:</b> Semaphore.h:32</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,135 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/StateMachine.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">StateMachine.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQSTATEMACHINE_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQSTATEMACHINE_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/States.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;functional&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">class </span>StateMachine</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; StateMachine();</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">virtual</span> ~StateMachine();</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1StateMachine.html"> 28</a></span>&#160; <span class="keywordtype">bool</span> ChangeState(<span class="keyword">const</span> Transition transition);</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordtype">bool</span> ChangeState(<span class="keyword">const</span> std::string&amp; transition) { <span class="keywordflow">return</span> ChangeState(GetTransition(transition)); }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; <span class="keywordtype">void</span> SubscribeToStateChange(<span class="keyword">const</span> std::string&amp; key, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> State)&gt; callback);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordtype">void</span> UnsubscribeFromStateChange(<span class="keyword">const</span> std::string&amp; key);</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <span class="keywordtype">void</span> HandleStates(std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> State)&gt; callback);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordtype">void</span> StopHandlingStates();</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; <span class="keywordtype">void</span> SubscribeToNewTransition(<span class="keyword">const</span> std::string&amp; key, std::function&lt;<span class="keywordtype">void</span>(<span class="keyword">const</span> Transition)&gt; callback);</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordtype">void</span> UnsubscribeFromNewTransition(<span class="keyword">const</span> std::string&amp; key);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <span class="keywordtype">bool</span> NewStatePending() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; <span class="keywordtype">void</span> WaitForPendingState() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordtype">bool</span> WaitForPendingStateFor(<span class="keyword">const</span> <span class="keywordtype">int</span> durationInMs) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; State GetCurrentState() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; std::string GetCurrentStateName() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">void</span> Start();</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">void</span> ProcessWork();</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keyword">struct </span>ErrorStateException : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</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="keyword">private</span>:</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; std::shared_ptr&lt;void&gt; fFsm;</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;};</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSTATEMACHINE_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,168 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/StateQueue.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">StateQueue.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQSTATEQUEUE_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQSTATEQUEUE_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/States.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;queue&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;mutex&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;utility&gt;</span> <span class="comment">// pair</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;condition_variable&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;{</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">class </span>StateQueue</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;{</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">public</span>:</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; StateQueue() {}</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; ~StateQueue() {}</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
<div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classfair_1_1mq_1_1StateQueue.html"> 29</a></span>&#160; fair::mq::State WaitForNext()</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; {</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; <span class="keywordflow">while</span> (fStates.empty()) {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; fCV.wait_for(lock, std::chrono::milliseconds(50));</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; }</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; fair::mq::State state = fStates.front();</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">if</span> (state == fair::mq::State::Error) {</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; <span class="keywordflow">throw</span> <a class="code" href="structfair_1_1mq_1_1DeviceErrorState.html">DeviceErrorState</a>(<span class="stringliteral">&quot;Controlled device transitioned to error state.&quot;</span>);</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; }</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; fStates.pop();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <span class="keywordflow">return</span> state;</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Rep, <span class="keyword">typename</span> Period&gt;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; std::pair&lt;bool, fair::mq::State&gt; WaitForNext(std::chrono::duration&lt;Rep, Period&gt; <span class="keyword">const</span>&amp; duration)</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; std::unique_lock&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; fCV.wait_for(lock, duration);</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (fStates.empty()) {</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> { <span class="keyword">false</span>, fair::mq::State::Ok };</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; fair::mq::State state = fStates.front();</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span> (state == fair::mq::State::Error) {</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">throw</span> DeviceErrorState(<span class="stringliteral">&quot;Controlled device transitioned to error state.&quot;</span>);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</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; fStates.pop();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">return</span> { <span class="keyword">true</span>, state };</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; }</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">void</span> WaitForState(fair::mq::State state) { <span class="keywordflow">while</span> (WaitForNext() != state) {} }</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordtype">void</span> Push(fair::mq::State state)</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</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; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; fStates.push(state);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; }</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; fCV.notify_all();</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordtype">void</span> Clear()</div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; std::lock_guard&lt;std::mutex&gt; lock(fMtx);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; fStates = std::queue&lt;fair::mq::State&gt;();</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keyword">private</span>:</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; std::queue&lt;fair::mq::State&gt; fStates;</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::mutex fMtx;</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; std::condition_variable fCV;</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;};</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; </div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSTATEQUEUE_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<div class="ttc" id="astructfair_1_1mq_1_1DeviceErrorState_html"><div class="ttname"><a href="structfair_1_1mq_1_1DeviceErrorState.html">fair::mq::DeviceErrorState</a></div><div class="ttdef"><b>Definition:</b> States.h:66</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,143 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/States.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">States.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIRMQSTATES_H_</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIRMQSTATES_H_</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></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; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">enum class</span> State : int</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; Undefined = 0,</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; Ok,</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; Error,</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; Idle,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; InitializingDevice,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; Initialized,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; Binding,</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; Bound,</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; Connecting,</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; DeviceReady,</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; InitializingTask,</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; Ready,</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; Running,</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; ResettingTask,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; ResettingDevice,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; Exiting</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;};</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="keyword">enum class</span> Transition : int</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; Auto = 0,</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; InitDevice,</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; CompleteInit,</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; Bind,</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; Connect,</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; InitTask,</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; Run,</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; Stop,</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; ResetTask,</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; ResetDevice,</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; End,</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; ErrorFound</div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;};</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; </div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;std::string GetStateName(State);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;std::string GetTransitionName(Transition);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;State GetState(<span class="keyword">const</span> std::string&amp; state);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;Transition GetTransition(<span class="keyword">const</span> std::string&amp; transition);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; </div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="keyword">struct </span>DeviceErrorState : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</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="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> State&amp; state) { <span class="keywordflow">return</span> os &lt;&lt; GetStateName(state); }</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="keyword">inline</span> std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> Transition&amp; transition) { <span class="keywordflow">return</span> os &lt;&lt; GetTransitionName(transition); }</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1DeviceErrorState.html"> 66</a></span>&#160; </div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIRMQSTATES_H_ */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,115 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Strings.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Strings.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_STRINGS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_STRINGS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;initializer_list&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;vector&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="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> ... T&gt;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">auto</span> ToString(T&amp;&amp;... t) -&gt; std::string</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; std::stringstream ss;</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; (void)std::initializer_list&lt;int&gt;{(ss &lt;&lt; t, 0)...};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; <span class="keywordflow">return</span> ss.str();</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;}</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">inline</span> <span class="keyword">auto</span> ToStrVector(<span class="keyword">const</span> <span class="keywordtype">int</span> argc, <span class="keywordtype">char</span>*<span class="keyword">const</span>* argv, <span class="keyword">const</span> <span class="keywordtype">bool</span> dropProgramName = <span class="keyword">true</span>) -&gt; std::vector&lt;std::string&gt;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;{</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <span class="keywordflow">if</span> (dropProgramName) {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <span class="keywordflow">return</span> std::vector&lt;std::string&gt;(argv + 1, argv + argc);</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keywordflow">return</span> std::vector&lt;std::string&gt;(argv, argv + argc);</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; }</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;}</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_STRINGS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,164 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/SuboptParser.cxx File Reference</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#namespaces">Namespaces</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">SuboptParser.cxx File Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Parser implementation for key-value subopt format.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &lt;fairmq/SuboptParser.h&gt;</code><br />
<code>#include &lt;fairmq/JSONParser.h&gt;</code><br />
<code>#include &lt;fairlogger/Logger.h&gt;</code><br />
<code>#include &lt;boost/property_tree/ptree.hpp&gt;</code><br />
<code>#include &lt;string_view&gt;</code><br />
<code>#include &lt;utility&gt;</code><br />
<code>#include &lt;cstring&gt;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for SuboptParser.cxx:</div>
<div class="dyncontent">
<div class="center"><img src="SuboptParser_8cxx__incl.png" border="0" usemap="#fairmq_2SuboptParser_8cxx" alt=""/></div>
<map name="fairmq_2SuboptParser_8cxx" id="fairmq_2SuboptParser_8cxx">
<area shape="rect" title="Parser implementation for key&#45;value subopt format." alt="" coords="1341,5,1521,32"/>
<area shape="rect" href="SuboptParser_8h_source.html" title=" " alt="" coords="678,87,843,114"/>
<area shape="rect" title=" " alt="" coords="1352,333,1412,360"/>
<area shape="rect" href="JSONParser_8h_source.html" title=" " alt="" coords="142,87,294,114"/>
<area shape="rect" title=" " alt="" coords="1359,87,1503,114"/>
<area shape="rect" title=" " alt="" coords="1528,80,1678,121"/>
<area shape="rect" title=" " alt="" coords="1702,87,1800,114"/>
<area shape="rect" title=" " alt="" coords="1824,87,1891,114"/>
<area shape="rect" href="Properties_8h_source.html" title=" " alt="" coords="623,177,770,203"/>
<area shape="rect" title=" " alt="" coords="188,333,247,360"/>
<area shape="rect" title=" " alt="" coords="794,177,857,203"/>
<area shape="rect" href="EventManager_8h_source.html" title=" " alt="" coords="672,259,846,285"/>
<area shape="rect" title=" " alt="" coords="1241,333,1328,360"/>
<area shape="rect" title=" " alt="" coords="272,333,396,360"/>
<area shape="rect" title=" " alt="" coords="1130,333,1217,360"/>
<area shape="rect" title=" " alt="" coords="420,333,532,360"/>
<area shape="rect" title=" " alt="" coords="922,259,1108,285"/>
<area shape="rect" title=" " alt="" coords="1132,259,1183,285"/>
<area shape="rect" title=" " alt="" coords="306,259,393,285"/>
<area shape="rect" title=" " alt="" coords="469,259,545,285"/>
<area shape="rect" title=" " alt="" coords="1028,333,1106,360"/>
<area shape="rect" title=" " alt="" coords="556,333,620,360"/>
<area shape="rect" title=" " alt="" coords="645,333,836,360"/>
<area shape="rect" title=" " alt="" coords="860,333,1004,360"/>
<area shape="rect" title=" " alt="" coords="29,169,180,211"/>
</map>
</div>
</div><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:namespacefair_1_1mq"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacefair_1_1mq.html">fair::mq</a></td></tr>
<tr class="memdesc:namespacefair_1_1mq"><td class="mdescLeft">&#160;</td><td class="mdescRight">Tools for interfacing containers to the transport via polymorphic allocators. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a52eadbe26f86865bc788dec7dff08530"><td class="memItemLeft" align="right" valign="top"><a id="a52eadbe26f86865bc788dec7dff08530"></a>enum &#160;</td><td class="memItemRight" valign="bottom"><b>channelOptionKeyIds</b> { <br />
&#160;&#160;<b>NAME</b> = 0,
<b>TYPE</b>,
<b>METHOD</b>,
<b>ADDRESS</b>,
<br />
&#160;&#160;<b>TRANSPORT</b>,
<b>SNDBUFSIZE</b>,
<b>RCVBUFSIZE</b>,
<b>SNDKERNELSIZE</b>,
<br />
&#160;&#160;<b>RCVKERNELSIZE</b>,
<b>LINGER</b>,
<b>RATELOGGING</b>,
<b>PORTRANGEMIN</b>,
<br />
&#160;&#160;<b>PORTRANGEMAX</b>,
<b>AUTOBIND</b>,
<b>NUMSOCKETS</b>,
<b>lastsocketkey</b>
<br />
}</td></tr>
<tr class="separator:a52eadbe26f86865bc788dec7dff08530"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a1486a99015b84751cfcd1cac55bb351e"><td class="memItemLeft" align="right" valign="top"><a id="a1486a99015b84751cfcd1cac55bb351e"></a>
Properties&#160;</td><td class="memItemRight" valign="bottom"><b>fair::mq::SuboptParser</b> (const vector&lt; string &gt; &amp;channelConfig, const string &amp;deviceId)</td></tr>
<tr class="separator:a1486a99015b84751cfcd1cac55bb351e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Parser implementation for key-value subopt format. </p>
<dl class="section author"><dt>Author</dt><dd><a href="#" onclick="location.href='mai'+'lto:'+'Mat'+'th'+'ias'+'.R'+'ich'+'te'+'r@s'+'ci'+'eq.'+'ne'+'t'; return false;">Matth<span style="display: none;">.nosp@m.</span>ias.<span style="display: none;">.nosp@m.</span>Richt<span style="display: none;">.nosp@m.</span>er@s<span style="display: none;">.nosp@m.</span>cieq.<span style="display: none;">.nosp@m.</span>net</a> </dd></dl>
<dl class="section since"><dt>Since</dt><dd>2017-03-30 </dd></dl>
</div></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,27 @@
<map id="fairmq/SuboptParser.cxx" name="fairmq/SuboptParser.cxx">
<area shape="rect" id="node1" title="Parser implementation for key&#45;value subopt format." alt="" coords="1341,5,1521,32"/>
<area shape="rect" id="node2" href="$SuboptParser_8h_source.html" title=" " alt="" coords="678,87,843,114"/>
<area shape="rect" id="node10" title=" " alt="" coords="1352,333,1412,360"/>
<area shape="rect" id="node20" href="$JSONParser_8h_source.html" title=" " alt="" coords="142,87,294,114"/>
<area shape="rect" id="node22" title=" " alt="" coords="1359,87,1503,114"/>
<area shape="rect" id="node23" title=" " alt="" coords="1528,80,1678,121"/>
<area shape="rect" id="node24" title=" " alt="" coords="1702,87,1800,114"/>
<area shape="rect" id="node25" title=" " alt="" coords="1824,87,1891,114"/>
<area shape="rect" id="node3" href="$Properties_8h_source.html" title=" " alt="" coords="623,177,770,203"/>
<area shape="rect" id="node7" title=" " alt="" coords="188,333,247,360"/>
<area shape="rect" id="node19" title=" " alt="" coords="794,177,857,203"/>
<area shape="rect" id="node4" href="$EventManager_8h_source.html" title=" " alt="" coords="672,259,846,285"/>
<area shape="rect" id="node8" title=" " alt="" coords="1241,333,1328,360"/>
<area shape="rect" id="node9" title=" " alt="" coords="272,333,396,360"/>
<area shape="rect" id="node11" title=" " alt="" coords="1130,333,1217,360"/>
<area shape="rect" id="node12" title=" " alt="" coords="420,333,532,360"/>
<area shape="rect" id="node15" title=" " alt="" coords="922,259,1108,285"/>
<area shape="rect" id="node16" title=" " alt="" coords="1132,259,1183,285"/>
<area shape="rect" id="node17" title=" " alt="" coords="306,259,393,285"/>
<area shape="rect" id="node18" title=" " alt="" coords="469,259,545,285"/>
<area shape="rect" id="node5" title=" " alt="" coords="1028,333,1106,360"/>
<area shape="rect" id="node6" title=" " alt="" coords="556,333,620,360"/>
<area shape="rect" id="node13" title=" " alt="" coords="645,333,836,360"/>
<area shape="rect" id="node14" title=" " alt="" coords="860,333,1004,360"/>
<area shape="rect" id="node21" title=" " alt="" coords="29,169,180,211"/>
</map>

View File

@@ -0,0 +1 @@
1f89d47a55f5a8d8c8c3082212ef6a5d

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@@ -0,0 +1,101 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/SuboptParser.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">SuboptParser.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public License (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SUBOPTPARSER_H</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define FAIR_MQ_SUBOPTPARSER_H</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/Properties.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;vector&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="namespacefair_1_1mq.html#a9d21f3651cb922015015a9768eb46e9f"> 42</a></span>&#160;Properties SuboptParser(<span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; channelConfig, <span class="keyword">const</span> std::string&amp; deviceId);</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;}</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SUBOPTPARSER_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,99 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/Tools.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Tools.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// IWYU pragma: begin_exports</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/CppSTL.h&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/InstanceLimit.h&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Network.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Process.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/RateLimit.h&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Semaphore.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Unique.h&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Version.h&gt;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment">// IWYU pragma: end_exports</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif // FAIR_MQ_TOOLS_H</span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,121 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/sdk/Traits.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_02bd51ad6cbd3c7b005f7a6d7cf0a7f8.html">sdk</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Traits.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2019 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_SDK_TRAITS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_SDK_TRAITS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;asio/associated_allocator.hpp&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;asio/associated_executor.hpp&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;type_traits&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">namespace </span>asio::detail {</div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Executor&gt;</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">struct </span>associated_executor_impl&lt;T,</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; Executor,</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; std::enable_if_t&lt;is_executor&lt;typename T::ExecutorType&gt;::value&gt;&gt;</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; <span class="keyword">using</span> type = <span class="keyword">typename</span> T::ExecutorType;</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="structasio_1_1detail_1_1associated__executor__impl_3_01T_00_01Executor_00_01std_1_1enable__if__t8594d9cbb34abbbc0c8a1aee673127b7.html"> 26</a></span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> get(<span class="keyword">const</span> T&amp; obj, <span class="keyword">const</span> Executor&amp; <span class="comment">/*ex = Executor()*/</span>) noexcept -&gt; type</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; {</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keywordflow">return</span> obj.GetExecutor();</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; }</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;};</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> T, <span class="keyword">typename</span> Allocator&gt;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">struct </span>associated_allocator_impl&lt;T,</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; Allocator,</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; std::enable_if_t&lt;T::AllocatorType&gt;&gt;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;{</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; <span class="keyword">using</span> type = <span class="keyword">typename</span> T::AllocatorType;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; </div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="structasio_1_1detail_1_1associated__allocator__impl_3_01T_00_01Allocator_00_01std_1_1enable__if_9f6cfaeba1a998a7065a3c7ab77dfaec.html"> 40</a></span>&#160; <span class="keyword">static</span> <span class="keyword">auto</span> get(<span class="keyword">const</span> T&amp; obj, <span class="keyword">const</span> Allocator&amp; <span class="comment">/*alloc = Allocator()*/</span>) noexcept -&gt; type</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <span class="keywordflow">return</span> obj.GetAllocator();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; }</div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;};</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;} <span class="comment">/* namespace asio::detail */</span></div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; </div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_SDK_TRAITS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,141 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/Transports.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Transports.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2014-2018 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TRANSPORTS_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TRANSPORTS_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;fairmq/tools/Strings.h&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &lt;memory&gt;</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;stdexcept&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;{</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">enum class</span> Transport</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;{</div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; DEFAULT,</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; ZMQ,</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; SHM,</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; OFI</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;};</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="keyword">struct </span>TransportError : std::runtime_error { <span class="keyword">using</span> std::runtime_error::runtime_error; };</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacefair_1_1mq.html">fair::mq</a></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"><a class="line" href="structfair_1_1mq_1_1TransportError.html"> 36</a></span>&#160; </div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="keyword">static</span> std::unordered_map&lt;std::string, Transport&gt; TransportTypes {</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160; { <span class="stringliteral">&quot;default&quot;</span>, Transport::DEFAULT },</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160; { <span class="stringliteral">&quot;zeromq&quot;</span>, Transport::ZMQ },</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; { <span class="stringliteral">&quot;shmem&quot;</span>, Transport::SHM },</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; { <span class="stringliteral">&quot;ofi&quot;</span>, Transport::OFI }</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;};</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="keyword">static</span> std::unordered_map&lt;Transport, std::string&gt; TransportNames {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; { Transport::DEFAULT, <span class="stringliteral">&quot;default&quot;</span> },</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; { Transport::ZMQ, <span class="stringliteral">&quot;zeromq&quot;</span> },</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; { Transport::SHM, <span class="stringliteral">&quot;shmem&quot;</span> },</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; { Transport::OFI, <span class="stringliteral">&quot;ofi&quot;</span> }</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;};</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; </div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="keyword">inline</span> std::string TransportName(Transport transport)</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="keywordflow">return</span> TransportNames[transport];</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;}</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">inline</span> Transport TransportType(<span class="keyword">const</span> std::string&amp; transport)</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="keyword">try</span> {</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> TransportTypes.at(transport);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;} <span class="keywordflow">catch</span> (std::out_of_range&amp;) {</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">throw</span> TransportError(tools::ToString(<span class="stringliteral">&quot;Unknown transport provided: &quot;</span>, transport));</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; </div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;} <span class="comment">// namespace fair::mq</span></div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TRANSPORTS_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="anamespacefair_1_1mq_html"><div class="ttname"><a href="namespacefair_1_1mq.html">fair::mq</a></div><div class="ttdoc">Tools for interfacing containers to the transport via polymorphic allocators.</div><div class="ttdef"><b>Definition:</b> DeviceRunner.h:23</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,100 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Unique.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Unique.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_UNIQUE_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_UNIQUE_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160; </div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;{</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment">// generates UUID string</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;std::string Uuid();</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">// generates UUID and returns its hash</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;std::size_t UuidHash();</div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_UNIQUE_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,109 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: fairmq/tools/Version.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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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_d6b28f7731906a8cbc4171450df4b180.html">fairmq</a></li><li class="navelem"><a class="el" href="dir_b7a9729ec9acb584ba3af78f8b60e470.html">tools</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">Version.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/********************************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright (C) 2017 GSI Helmholtzzentrum fuer Schwerionenforschung GmbH *</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * *</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * This software is distributed under the terms of the *</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * GNU Lesser General Public Licence (LGPL) version 3, *</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * copied verbatim in the file &quot;LICENSE&quot; *</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> ********************************************************************************/</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#ifndef FAIR_MQ_TOOLS_VERSION_H</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#define FAIR_MQ_TOOLS_VERSION_H</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160; </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &lt;ostream&gt;</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &lt;tuple&gt;</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="keyword">namespace </span>fair::mq::tools</div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;{</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="keyword">struct </span>Version</div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;{</div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span> fkMajor, fkMinor, fkPatch;</div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt; (<span class="keyword">const</span> Version&amp; lhs, <span class="keyword">const</span> Version&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> std::tie(lhs.fkMajor, lhs.fkMinor, lhs.fkPatch) &lt; std::tie(rhs.fkMajor, rhs.fkMinor, rhs.fkPatch); }</div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&gt; (<span class="keyword">const</span> Version&amp; lhs, <span class="keyword">const</span> Version&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> rhs &lt; lhs; }</div>
<div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="structfair_1_1mq_1_1tools_1_1Version.html"> 24</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;=(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Version</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Version</a>&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> !(lhs &gt; rhs); }</div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&gt;=(<span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Version</a>&amp; lhs, <span class="keyword">const</span> <a class="code" href="structfair_1_1mq_1_1tools_1_1Version.html">Version</a>&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> !(lhs &lt; rhs); }</div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator==(<span class="keyword">const</span> Version&amp; lhs, <span class="keyword">const</span> Version&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> std::tie(lhs.fkMajor, lhs.fkMinor, lhs.fkPatch) == std::tie(rhs.fkMajor, rhs.fkMinor, rhs.fkPatch); }</div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator!=(<span class="keyword">const</span> Version&amp; lhs, <span class="keyword">const</span> Version&amp; rhs) -&gt; <span class="keywordtype">bool</span> { <span class="keywordflow">return</span> !(lhs == rhs); }</div>
<div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; <span class="keyword">friend</span> <span class="keyword">auto</span> operator&lt;&lt;(std::ostream&amp; os, <span class="keyword">const</span> Version&amp; v) -&gt; std::ostream&amp; { <span class="keywordflow">return</span> os &lt;&lt; v.fkMajor &lt;&lt; <span class="stringliteral">&quot;.&quot;</span> &lt;&lt; v.fkMinor &lt;&lt; <span class="stringliteral">&quot;.&quot;</span> &lt;&lt; v.fkPatch; }</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;};</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;} <span class="comment">// namespace fair::mq::tools</span></div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* FAIR_MQ_TOOLS_VERSION_H */</span><span class="preprocessor"></span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructfair_1_1mq_1_1tools_1_1Version_html"><div class="ttname"><a href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a></div><div class="ttdef"><b>Definition:</b> Version.h:25</div></div>
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

299
v1.4.33/annotated.html Normal file
View File

@@ -0,0 +1,299 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: Class List</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<!-- 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 class="header">
<div class="headertitle">
<div class="title">Class List</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock">Here are the classes, structs, unions and interfaces with brief descriptions:</div><div class="directory">
<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span><span onclick="javascript:toggleLevel(4);">4</span><span onclick="javascript:toggleLevel(5);">5</span><span onclick="javascript:toggleLevel(6);">6</span>]</div><table class="directory">
<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>asio</b></td><td class="desc"></td></tr>
<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>detail</b></td><td class="desc"></td></tr>
<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structasio_1_1detail_1_1associated__allocator__impl_3_01T_00_01Allocator_00_01std_1_1enable__if_9f6cfaeba1a998a7065a3c7ab77dfaec.html" target="_self">associated_allocator_impl&lt; T, Allocator, std::enable_if_t&lt; T::AllocatorType &gt; &gt;</a></td><td class="desc">Specialize to match our coding conventions </td></tr>
<tr id="row_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structasio_1_1detail_1_1associated__executor__impl_3_01T_00_01Executor_00_01std_1_1enable__if__t8594d9cbb34abbbc0c8a1aee673127b7.html" target="_self">associated_executor_impl&lt; T, Executor, std::enable_if_t&lt; is_executor&lt; typename T::ExecutorType &gt;::value &gt; &gt;</a></td><td class="desc">Specialize to match our coding conventions </td></tr>
<tr id="row_1_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_1_" class="arrow" onclick="toggleFolder('1_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>fair</b></td><td class="desc"></td></tr>
<tr id="row_1_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_0_" class="arrow" onclick="toggleFolder('1_0_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacefair_1_1mq.html" target="_self">mq</a></td><td class="desc">Tools for interfacing containers to the transport via polymorphic allocators </td></tr>
<tr id="row_1_0_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_0_" class="arrow" onclick="toggleFolder('1_0_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>fsm</b></td><td class="desc"></td></tr>
<tr id="row_1_0_0_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1AUTO__E.html" target="_self">AUTO_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_1_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1BIND__E.html" target="_self">BIND_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_2_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1BINDING__S.html" target="_self">BINDING_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_3_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1BOUND__S.html" target="_self">BOUND_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_4_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1COMPLETE__INIT__E.html" target="_self">COMPLETE_INIT_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_5_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1CONNECT__E.html" target="_self">CONNECT_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_6_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1CONNECTING__S.html" target="_self">CONNECTING_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_7_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1DEVICE__READY__S.html" target="_self">DEVICE_READY_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_8_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1END__E.html" target="_self">END_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_9_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1ERROR__FOUND__E.html" target="_self">ERROR_FOUND_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_10_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1ERROR__S.html" target="_self">ERROR_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_11_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1EXITING__S.html" target="_self">EXITING_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_12_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1IDLE__S.html" target="_self">IDLE_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_13_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1INIT__DEVICE__E.html" target="_self">INIT_DEVICE_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_14_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1INIT__TASK__E.html" target="_self">INIT_TASK_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_15_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1INITIALIZED__S.html" target="_self">INITIALIZED_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_16_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1INITIALIZING__DEVICE__S.html" target="_self">INITIALIZING_DEVICE_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_17_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1INITIALIZING__TASK__S.html" target="_self">INITIALIZING_TASK_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_18_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_0_18_" class="arrow" onclick="toggleFolder('1_0_0_18_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1Machine__.html" target="_self">Machine_</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_18_0_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1Machine___1_1DefaultFct.html" target="_self">DefaultFct</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_18_1_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1Machine___1_1transition__table.html" target="_self">transition_table</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_19_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1OK__S.html" target="_self">OK_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_20_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1READY__S.html" target="_self">READY_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_21_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RESET__DEVICE__E.html" target="_self">RESET_DEVICE_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_22_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RESET__TASK__E.html" target="_self">RESET_TASK_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_23_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RESETTING__DEVICE__S.html" target="_self">RESETTING_DEVICE_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_24_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RESETTING__TASK__S.html" target="_self">RESETTING_TASK_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_25_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RUN__E.html" target="_self">RUN_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_26_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1RUNNING__S.html" target="_self">RUNNING_S</a></td><td class="desc"></td></tr>
<tr id="row_1_0_0_27_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1fsm_1_1STOP__E.html" target="_self">STOP_E</a></td><td class="desc"></td></tr>
<tr id="row_1_0_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_1_" class="arrow" onclick="toggleFolder('1_0_1_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>hooks</b></td><td class="desc"></td></tr>
<tr id="row_1_0_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1hooks_1_1InstantiateDevice.html" target="_self">InstantiateDevice</a></td><td class="desc"></td></tr>
<tr id="row_1_0_1_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1hooks_1_1LoadPlugins.html" target="_self">LoadPlugins</a></td><td class="desc"></td></tr>
<tr id="row_1_0_1_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1hooks_1_1ModifyRawCmdLineArgs.html" target="_self">ModifyRawCmdLineArgs</a></td><td class="desc"></td></tr>
<tr id="row_1_0_1_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1hooks_1_1SetCustomCmdLineOptions.html" target="_self">SetCustomCmdLineOptions</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_2_" class="arrow" onclick="toggleFolder('1_0_2_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>ofi</b></td><td class="desc"></td></tr>
<tr id="row_1_0_2_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1Address.html" target="_self">Address</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_1_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ofi_1_1Context.html" target="_self">Context</a></td><td class="desc">Transport-wide context </td></tr>
<tr id="row_1_0_2_2_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1ContextError.html" target="_self">ContextError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_3_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1ControlMessage.html" target="_self">ControlMessage</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_4_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionfair_1_1mq_1_1ofi_1_1ControlMessageContent.html" target="_self">ControlMessageContent</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_5_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1Empty.html" target="_self">Empty</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_6_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ofi_1_1Message.html" target="_self">Message</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_7_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ofi_1_1Poller.html" target="_self">Poller</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_8_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1PostBuffer.html" target="_self">PostBuffer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_9_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1PostMultiPartStartBuffer.html" target="_self">PostMultiPartStartBuffer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_10_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ofi_1_1SilentSocketError.html" target="_self">SilentSocketError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_11_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ofi_1_1Socket.html" target="_self">Socket</a></td><td class="desc"></td></tr>
<tr id="row_1_0_2_12_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ofi_1_1TransportFactory.html" target="_self">TransportFactory</a></td><td class="desc">FairMQ transport factory for the ofi transport </td></tr>
<tr id="row_1_0_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_3_" class="arrow" onclick="toggleFolder('1_0_3_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>plugins</b></td><td class="desc"></td></tr>
<tr id="row_1_0_3_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1plugins_1_1Config.html" target="_self">Config</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1plugins_1_1Control.html" target="_self">Control</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1plugins_1_1DDS.html" target="_self">DDS</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1plugins_1_1DDSConfig.html" target="_self">DDSConfig</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1plugins_1_1DDSSubscription.html" target="_self">DDSSubscription</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1plugins_1_1IofN.html" target="_self">IofN</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1plugins_1_1PMIxPlugin.html" target="_self">PMIxPlugin</a></td><td class="desc"></td></tr>
<tr id="row_1_0_3_7_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1plugins_1_1terminal__config.html" target="_self">terminal_config</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_4_" class="arrow" onclick="toggleFolder('1_0_4_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>sdk</b></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_4_0_" class="arrow" onclick="toggleFolder('1_0_4_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>cmd</b></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_0_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1ChangeState.html" target="_self">ChangeState</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_1_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CheckState.html" target="_self">CheckState</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_2_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmd.html" target="_self">Cmd</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_3_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span id="arr_1_0_4_0_3_" class="arrow" onclick="toggleFolder('1_0_4_0_3_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds.html" target="_self">Cmds</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_3_0_" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Cmds_1_1CommandFormatError.html" target="_self">CommandFormatError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_4_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Config.html" target="_self">Config</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_5_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1CurrentState.html" target="_self">CurrentState</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_6_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1DumpConfig.html" target="_self">DumpConfig</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_7_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1GetProperties.html" target="_self">GetProperties</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_8_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1Properties.html" target="_self">Properties</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_9_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1PropertiesSet.html" target="_self">PropertiesSet</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_10_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SetProperties.html" target="_self">SetProperties</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_11_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChange.html" target="_self">StateChange</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_12_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeExitingReceived.html" target="_self">StateChangeExitingReceived</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_13_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeSubscription.html" target="_self">StateChangeSubscription</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_14_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1StateChangeUnsubscription.html" target="_self">StateChangeUnsubscription</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_15_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscribeToStateChange.html" target="_self">SubscribeToStateChange</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_16_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1SubscriptionHeartbeat.html" target="_self">SubscriptionHeartbeat</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_17_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1TransitionStatus.html" target="_self">TransitionStatus</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_0_18_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1cmd_1_1UnsubscribeFromStateChange.html" target="_self">UnsubscribeFromStateChange</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_1_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp.html" target="_self">AsioAsyncOp</a></td><td class="desc">Interface for Asio-compliant asynchronous operation, see <a href="https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/reference/asynchronous_operations.html">https://www.boost.org/doc/libs/1_70_0/doc/html/boost_asio/reference/asynchronous_operations.html</a> </td></tr>
<tr id="row_1_0_4_2_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOp_3_01Executor_00_01Allocator_00_01SignatureReturnType_07Si5d9a9132c7605e8b6a2e5b55defff644.html" target="_self">AsioAsyncOp&lt; Executor, Allocator, SignatureReturnType(SignatureFirstArgType, SignatureArgTypes...)&gt;</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_3_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImpl.html" target="_self">AsioAsyncOpImpl</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_4_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1AsioAsyncOpImplBase.html" target="_self">AsioAsyncOpImplBase</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_5_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1AsioBase.html" target="_self">AsioBase</a></td><td class="desc">Base for creating Asio-enabled I/O objects </td></tr>
<tr id="row_1_0_4_6_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1BasicTopology.html" target="_self">BasicTopology</a></td><td class="desc">Represents a FairMQ topology </td></tr>
<tr id="row_1_0_4_7_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSAgent.html" target="_self">DDSAgent</a></td><td class="desc">Represents a DDS agent </td></tr>
<tr id="row_1_0_4_8_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSChannel.html" target="_self">DDSChannel</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_9_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSCollection.html" target="_self">DDSCollection</a></td><td class="desc">Represents a DDS collection </td></tr>
<tr id="row_1_0_4_10_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_4_10_" class="arrow" onclick="toggleFolder('1_0_4_10_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSEnvironment.html" target="_self">DDSEnvironment</a></td><td class="desc">Sets up the DDS environment (object helper) </td></tr>
<tr id="row_1_0_4_10_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span id="arr_1_0_4_10_0_" class="arrow" onclick="toggleFolder('1_0_4_10_0_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl.html" target="_self">Impl</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_10_0_0_" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSEnvironment_1_1Impl_1_1Tag.html" target="_self">Tag</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_11_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_4_11_" class="arrow" onclick="toggleFolder('1_0_4_11_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSSession.html" target="_self">DDSSession</a></td><td class="desc">Represents a DDS session </td></tr>
<tr id="row_1_0_4_11_0_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1AgentCount.html" target="_self">AgentCount</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_11_1_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1CommanderInfo.html" target="_self">CommanderInfo</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_11_2_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSSession_1_1Impl.html" target="_self">Impl</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_12_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSTask.html" target="_self">DDSTask</a></td><td class="desc">Represents a DDS task </td></tr>
<tr id="row_1_0_4_13_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_4_13_" class="arrow" onclick="toggleFolder('1_0_4_13_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1sdk_1_1DDSTopology.html" target="_self">DDSTopology</a></td><td class="desc">Represents a DDS topology </td></tr>
<tr id="row_1_0_4_13_0_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DDSTopology_1_1Impl.html" target="_self">Impl</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_14_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1DeviceStatus.html" target="_self">DeviceStatus</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_15_" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_4_15_" class="arrow" onclick="toggleFolder('1_0_4_15_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1GetPropertiesResult.html" target="_self">GetPropertiesResult</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_15_0_" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1GetPropertiesResult_1_1Device.html" target="_self">Device</a></td><td class="desc"></td></tr>
<tr id="row_1_0_4_16_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1sdk_1_1RuntimeError.html" target="_self">RuntimeError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_5_" class="arrow" onclick="toggleFolder('1_0_5_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacefair_1_1mq_1_1shmem.html" target="_self">shmem</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1BufferDebugInfo.html" target="_self">BufferDebugInfo</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1DeviceCounter.html" target="_self">DeviceCounter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1EventCounter.html" target="_self">EventCounter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1Manager.html" target="_self">Manager</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1Message.html" target="_self">Message</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1MetaHeader.html" target="_self">MetaHeader</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_6_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_1_0_5_6_" class="arrow" onclick="toggleFolder('1_0_5_6_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1Monitor.html" target="_self">Monitor</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_6_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1Monitor_1_1DaemonPresent.html" target="_self">DaemonPresent</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_7_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1Poller.html" target="_self">Poller</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_8_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1Region.html" target="_self">Region</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_9_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1RegionBlock.html" target="_self">RegionBlock</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_10_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1RegionCounter.html" target="_self">RegionCounter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_11_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1RegionInfo.html" target="_self">RegionInfo</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_12_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentAddress.html" target="_self">SegmentAddress</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_13_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentAddressFromHandle.html" target="_self">SegmentAddressFromHandle</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_14_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocate.html" target="_self">SegmentAllocate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_15_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentAllocateAligned.html" target="_self">SegmentAllocateAligned</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_16_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentBufferShrink.html" target="_self">SegmentBufferShrink</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_17_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentDeallocate.html" target="_self">SegmentDeallocate</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_18_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentFreeMemory.html" target="_self">SegmentFreeMemory</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_19_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentHandleFromAddress.html" target="_self">SegmentHandleFromAddress</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_20_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentInfo.html" target="_self">SegmentInfo</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_21_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentMemoryZeroer.html" target="_self">SegmentMemoryZeroer</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_22_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SegmentSize.html" target="_self">SegmentSize</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_23_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SessionId.html" target="_self">SessionId</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_24_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1SharedMemoryError.html" target="_self">SharedMemoryError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_25_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1ShmId.html" target="_self">ShmId</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_26_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1Socket.html" target="_self">Socket</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_27_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1TerminalConfig.html" target="_self">TerminalConfig</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_28_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1TransportFactory.html" target="_self">TransportFactory</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_29_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1shmem_1_1UnmanagedRegion.html" target="_self">UnmanagedRegion</a></td><td class="desc"></td></tr>
<tr id="row_1_0_5_30_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1shmem_1_1ZMsg.html" target="_self">ZMsg</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_6_" class="arrow" onclick="toggleFolder('1_0_6_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>tools</b></td><td class="desc"></td></tr>
<tr id="row_1_0_6_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1DefaultRouteDetectionError.html" target="_self">DefaultRouteDetectionError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_1_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1execute__result.html" target="_self">execute_result</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_2_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1InstanceLimiter.html" target="_self">InstanceLimiter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_3_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1tools_1_1RateLimiter.html" target="_self">RateLimiter</a></td><td class="desc"></td></tr>
<tr id="row_1_0_6_4_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1Semaphore.html" target="_self">Semaphore</a></td><td class="desc">A simple blocking semaphore </td></tr>
<tr id="row_1_0_6_5_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1SharedSemaphore.html" target="_self">SharedSemaphore</a></td><td class="desc">A simple copyable blocking semaphore </td></tr>
<tr id="row_1_0_6_6_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html" target="_self">Version</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_7_" class="arrow" onclick="toggleFolder('1_0_7_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><b>zmq</b></td><td class="desc"></td></tr>
<tr id="row_1_0_7_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1Context.html" target="_self">Context</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1zmq_1_1ContextError.html" target="_self">ContextError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1Message.html" target="_self">Message</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1Poller.html" target="_self">Poller</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_4_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1Socket.html" target="_self">Socket</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1TransportFactory.html" target="_self">TransportFactory</a></td><td class="desc"></td></tr>
<tr id="row_1_0_7_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1zmq_1_1UnmanagedRegion.html" target="_self">UnmanagedRegion</a></td><td class="desc"></td></tr>
<tr id="row_1_0_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1Alignment.html" target="_self">Alignment</a></td><td class="desc"></td></tr>
<tr id="row_1_0_9_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ChannelResource.html" target="_self">ChannelResource</a></td><td class="desc"></td></tr>
<tr id="row_1_0_10_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1DeviceErrorState.html" target="_self">DeviceErrorState</a></td><td class="desc"></td></tr>
<tr id="row_1_0_11_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1DeviceRunner.html" target="_self">DeviceRunner</a></td><td class="desc">Utility class to facilitate a convenient top-level device launch/shutdown </td></tr>
<tr id="row_1_0_12_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ErrorCategory.html" target="_self">ErrorCategory</a></td><td class="desc"></td></tr>
<tr id="row_1_0_13_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1Event.html" target="_self">Event</a></td><td class="desc"></td></tr>
<tr id="row_1_0_14_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1EventManager.html" target="_self">EventManager</a></td><td class="desc">Manages event callbacks from different subscribers </td></tr>
<tr id="row_1_0_15_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1FairMQMemoryResource.html" target="_self">FairMQMemoryResource</a></td><td class="desc"></td></tr>
<tr id="row_1_0_16_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1MessageBadAlloc.html" target="_self">MessageBadAlloc</a></td><td class="desc"></td></tr>
<tr id="row_1_0_17_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1MessageError.html" target="_self">MessageError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_18_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1OngoingTransition.html" target="_self">OngoingTransition</a></td><td class="desc"></td></tr>
<tr id="row_1_0_19_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1ParserError.html" target="_self">ParserError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_20_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1Plugin.html" target="_self">Plugin</a></td><td class="desc">Base class for FairMQ plugins </td></tr>
<tr id="row_1_0_21_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_21_" class="arrow" onclick="toggleFolder('1_0_21_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1PluginManager.html" target="_self">PluginManager</a></td><td class="desc">Manages and owns plugin instances </td></tr>
<tr id="row_1_0_21_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PluginManager_1_1BadSearchPath.html" target="_self">BadSearchPath</a></td><td class="desc"></td></tr>
<tr id="row_1_0_21_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PluginManager_1_1PluginInstantiationError.html" target="_self">PluginInstantiationError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_21_2_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PluginManager_1_1PluginLoadError.html" target="_self">PluginLoadError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_21_3_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PluginManager_1_1ProgramOptionsParseError.html" target="_self">ProgramOptionsParseError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_22_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_22_" class="arrow" onclick="toggleFolder('1_0_22_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1PluginServices.html" target="_self">PluginServices</a></td><td class="desc">Facilitates communication between devices and plugins </td></tr>
<tr id="row_1_0_22_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PluginServices_1_1DeviceControlError.html" target="_self">DeviceControlError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_23_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PollerError.html" target="_self">PollerError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_24_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1ProgOptions.html" target="_self">ProgOptions</a></td><td class="desc"></td></tr>
<tr id="row_1_0_25_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PropertyChange.html" target="_self">PropertyChange</a></td><td class="desc"></td></tr>
<tr id="row_1_0_26_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PropertyChangeAsString.html" target="_self">PropertyChangeAsString</a></td><td class="desc"></td></tr>
<tr id="row_1_0_27_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1PropertyHelper.html" target="_self">PropertyHelper</a></td><td class="desc"></td></tr>
<tr id="row_1_0_28_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1PropertyNotFoundError.html" target="_self">PropertyNotFoundError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_29_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1SocketError.html" target="_self">SocketError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_30_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_0_30_" class="arrow" onclick="toggleFolder('1_0_30_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1StateMachine.html" target="_self">StateMachine</a></td><td class="desc"></td></tr>
<tr id="row_1_0_30_0_" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1StateMachine_1_1ErrorStateException.html" target="_self">ErrorStateException</a></td><td class="desc"></td></tr>
<tr id="row_1_0_31_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classfair_1_1mq_1_1StateQueue.html" target="_self">StateQueue</a></td><td class="desc"></td></tr>
<tr id="row_1_0_32_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1TransportError.html" target="_self">TransportError</a></td><td class="desc"></td></tr>
<tr id="row_1_0_33_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structfair_1_1mq_1_1TransportFactoryError.html" target="_self">TransportFactoryError</a></td><td class="desc"></td></tr>
<tr id="row_2_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_2_" class="arrow" onclick="toggleFolder('2_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>pmix</b></td><td class="desc"></td></tr>
<tr id="row_2_0_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_0_" class="arrow" onclick="toggleFolder('2_0_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classpmix_1_1Commands.html" target="_self">Commands</a></td><td class="desc"></td></tr>
<tr id="row_2_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1Commands_1_1Holder.html" target="_self">Holder</a></td><td class="desc"></td></tr>
<tr id="row_2_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1info.html" target="_self">info</a></td><td class="desc"></td></tr>
<tr id="row_2_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1pdata.html" target="_self">pdata</a></td><td class="desc"></td></tr>
<tr id="row_2_3_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1proc.html" target="_self">proc</a></td><td class="desc"></td></tr>
<tr id="row_2_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1rank.html" target="_self">rank</a></td><td class="desc"></td></tr>
<tr id="row_2_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1runtime__error.html" target="_self">runtime_error</a></td><td class="desc"></td></tr>
<tr id="row_2_6_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structpmix_1_1value.html" target="_self">value</a></td><td class="desc"></td></tr>
<tr id="row_3_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_3_" class="arrow" onclick="toggleFolder('3_')">&#9660;</span><span class="icona"><span class="icon">N</span></span><b>std</b></td><td class="desc"></td></tr>
<tr id="row_3_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structstd_1_1is__error__code__enum_3_01fair_1_1mq_1_1ErrorCode_01_4.html" target="_self">is_error_code_enum&lt; fair::mq::ErrorCode &gt;</a></td><td class="desc"></td></tr>
<tr id="row_4_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQBenchmarkSampler.html" target="_self">FairMQBenchmarkSampler</a></td><td class="desc"></td></tr>
<tr id="row_5_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_5_" class="arrow" onclick="toggleFolder('5_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQChannel.html" target="_self">FairMQChannel</a></td><td class="desc">Wrapper class for <a class="el" href="classFairMQSocket.html">FairMQSocket</a> and related methods </td></tr>
<tr id="row_5_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFairMQChannel_1_1ChannelConfigurationError.html" target="_self">ChannelConfigurationError</a></td><td class="desc"></td></tr>
<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQDevice.html" target="_self">FairMQDevice</a></td><td class="desc"></td></tr>
<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQMerger.html" target="_self">FairMQMerger</a></td><td class="desc"></td></tr>
<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQMessage.html" target="_self">FairMQMessage</a></td><td class="desc"></td></tr>
<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQMultiplier.html" target="_self">FairMQMultiplier</a></td><td class="desc"></td></tr>
<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQParts.html" target="_self">FairMQParts</a></td><td class="desc"><a class="el" href="classFairMQParts.html" title="FairMQParts is a lightweight convenience wrapper around a vector of unique pointers to FairMQMessage,...">FairMQParts</a> is a lightweight convenience wrapper around a vector of unique pointers to <a class="el" href="classFairMQMessage.html">FairMQMessage</a>, used for sending multi-part messages </td></tr>
<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQPoller.html" target="_self">FairMQPoller</a></td><td class="desc"></td></tr>
<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQProxy.html" target="_self">FairMQProxy</a></td><td class="desc"></td></tr>
<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFairMQRegionBlock.html" target="_self">FairMQRegionBlock</a></td><td class="desc"></td></tr>
<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structFairMQRegionInfo.html" target="_self">FairMQRegionInfo</a></td><td class="desc"></td></tr>
<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQSink.html" target="_self">FairMQSink</a></td><td class="desc"></td></tr>
<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQSocket.html" target="_self">FairMQSocket</a></td><td class="desc"></td></tr>
<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQSplitter.html" target="_self">FairMQSplitter</a></td><td class="desc"></td></tr>
<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQTransportFactory.html" target="_self">FairMQTransportFactory</a></td><td class="desc"></td></tr>
<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classFairMQUnmanagedRegion.html" target="_self">FairMQUnmanagedRegion</a></td><td class="desc"></td></tr>
<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classLinePrinter.html" target="_self">LinePrinter</a></td><td class="desc"></td></tr>
<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structMiniTopo.html" target="_self">MiniTopo</a></td><td class="desc"></td></tr>
<tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structStateSubscription.html" target="_self">StateSubscription</a></td><td class="desc"></td></tr>
<tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structTerminalConfig.html" target="_self">TerminalConfig</a></td><td class="desc"></td></tr>
<tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structValInfo.html" target="_self">ValInfo</a></td><td class="desc"></td></tr>
</table>
</div><!-- directory -->
</div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

BIN
v1.4.33/bc_s.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
v1.4.33/bdwn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 B

View File

@@ -0,0 +1,178 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: Member List</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQBenchmarkSampler Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AddChannel</b>(const std::string &amp;name, FairMQChannel &amp;&amp;channel) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a>(const fair::mq::Transport transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Bind</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a>(const std::string &amp;transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Connect</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultId</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultInitTimeout</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultIOThreads</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultMaxRunTime</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultNetworkInterface</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultRate</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultSession</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultTransportName</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultTransportType</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Deserialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>FairMQBenchmarkSampler</b>() (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#afb850ea8ff5817c69bdb8aaf9ece69b7">FairMQDevice</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a45356d796b842dd000067ad5cf7a63f5">FairMQDevice</a>(const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a08a86dedb427e05c67802e273fdde7cf">FairMQDevice</a>(fair::mq::ProgOptions &amp;config, const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fMaxIterations</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fMemSet</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fMsgAlignment</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fMsgRate</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fMsgSize</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fMultipart</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fNumIterations</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fNumParts</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fOutChannelName</b> (defined in <a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a>)</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetChannel</b>(const std::string &amp;channelName, const int index=0) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetDefaultTransport</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetId</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetInitTimeoutInS</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetNetworkInterface</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetNumIoThreads</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetRawCmdLineArgs</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a>(const fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetVersion</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html#aa515049fe636820d5bdb2032d5e3978c">InitTask</a>() override</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewMessage</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewMessageFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewPoller</b>(const Ts &amp;... inputs) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewPoller</b>(const std::vector&lt; FairMQChannel * &gt; &amp;channels) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewSimpleMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewSimpleMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewStaticMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewStaticMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewUnmanagedRegion</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewUnmanagedRegionFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQMessagePtr &amp;msg, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMsgCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQParts &amp;parts, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMultipartCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>PrintRegisteredChannels</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RegisterChannelEndpoint</b>(const std::string &amp;channelName, uint16_t minNumSubChannels=1, uint16_t maxNumSubChannels=1) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>RegisterChannelEndpoints</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html#ae016fde6952dcd0ed671b4a6c51cb835">Run</a>() override</td><td class="entry"><a class="el" href="classFairMQBenchmarkSampler.html">FairMQBenchmarkSampler</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>RunStateMachine</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Serialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetDefaultTransport</b>(const std::string &amp;name) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetId</b>(const std::string &amp;id) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetInitTimeoutInS</b>(int initTimeoutInS) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetNetworkInterface</b>(const std::string &amp;networkInterface) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetNumIoThreads</b>(int numIoThreads) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetRawCmdLineArgs</b>(const std::vector&lt; std::string &gt; &amp;args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a>(const std::string &amp;transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>TransitionTo</b>(const fair::mq::State state) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>() const -&gt; FairMQTransportFactory *</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a>(std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a>(fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a>(const std::string &amp;state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,463 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: FairMQBenchmarkSampler Class Reference</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classFairMQBenchmarkSampler-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">FairMQBenchmarkSampler Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="FairMQBenchmarkSampler_8h_source.html">FairMQBenchmarkSampler.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for FairMQBenchmarkSampler:</div>
<div class="dyncontent">
<div class="center"><img src="classFairMQBenchmarkSampler__inherit__graph.png" border="0" usemap="#FairMQBenchmarkSampler_inherit__map" alt="Inheritance graph"/></div>
<map name="FairMQBenchmarkSampler_inherit__map" id="FairMQBenchmarkSampler_inherit__map">
<area shape="rect" title=" " alt="" coords="5,80,200,107"/>
<area shape="rect" href="classFairMQDevice.html" title=" " alt="" coords="47,5,159,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for FairMQBenchmarkSampler:</div>
<div class="dyncontent">
<div class="center"><img src="classFairMQBenchmarkSampler__coll__graph.png" border="0" usemap="#FairMQBenchmarkSampler_coll__map" alt="Collaboration graph"/></div>
<map name="FairMQBenchmarkSampler_coll__map" id="FairMQBenchmarkSampler_coll__map">
<area shape="rect" title=" " alt="" coords="5,171,200,197"/>
<area shape="rect" href="classFairMQDevice.html" title=" " alt="" coords="47,95,159,121"/>
<area shape="rect" href="classfair_1_1mq_1_1ProgOptions.html" title=" " alt="" coords="23,5,183,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa515049fe636820d5bdb2032d5e3978c"><td class="memItemLeft" align="right" valign="top"><a id="aa515049fe636820d5bdb2032d5e3978c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQBenchmarkSampler.html#aa515049fe636820d5bdb2032d5e3978c">InitTask</a> () override</td></tr>
<tr class="memdesc:aa515049fe636820d5bdb2032d5e3978c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Task initialization (can be overloaded in child classes) <br /></td></tr>
<tr class="separator:aa515049fe636820d5bdb2032d5e3978c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae016fde6952dcd0ed671b4a6c51cb835"><td class="memItemLeft" align="right" valign="top"><a id="ae016fde6952dcd0ed671b4a6c51cb835"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQBenchmarkSampler.html#ae016fde6952dcd0ed671b4a6c51cb835">Run</a> () override</td></tr>
<tr class="memdesc:ae016fde6952dcd0ed671b4a6c51cb835"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runs the device (to be overloaded in child classes) <br /></td></tr>
<tr class="separator:ae016fde6952dcd0ed671b4a6c51cb835"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a735b2684d4678eb959302911f12223eb"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a> ()</td></tr>
<tr class="memdesc:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="afb850ea8ff5817c69bdb8aaf9ece69b7"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#afb850ea8ff5817c69bdb8aaf9ece69b7">FairMQDevice</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config)</td></tr>
<tr class="memdesc:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor with external <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>. <br /></td></tr>
<tr class="separator:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a45356d796b842dd000067ad5cf7a63f5"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a45356d796b842dd000067ad5cf7a63f5">FairMQDevice</a> (const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version)</td></tr>
<tr class="memdesc:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor that sets the version. <br /></td></tr>
<tr class="separator:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a08a86dedb427e05c67802e273fdde7cf"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a08a86dedb427e05c67802e273fdde7cf">FairMQDevice</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config, const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version)</td></tr>
<tr class="memdesc:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor that sets the version and external <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>. <br /></td></tr>
<tr class="separator:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a806cf5c241bf95571654cd327d6e76fe"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a> (const <a class="el" href="classFairMQDevice.html">FairMQDevice</a> &amp;)=delete</td></tr>
<tr class="memdesc:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor (disabled) <br /></td></tr>
<tr class="separator:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa4e0098922aaf987c2a27c10f4e04fbd"></a>
<a class="el" href="classFairMQDevice.html">FairMQDevice</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a> (const <a class="el" href="classFairMQDevice.html">FairMQDevice</a> &amp;)=delete</td></tr>
<tr class="memdesc:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assignment operator (disabled) <br /></td></tr>
<tr class="separator:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a09389ba6934645ca406a963ab5a60e1a"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a> ()</td></tr>
<tr class="memdesc:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default destructor. <br /></td></tr>
<tr class="separator:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a93c839b68f007bef8e66115efeed9d41"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a> ()</td></tr>
<tr class="memdesc:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the socket transfer rates. <br /></td></tr>
<tr class="separator:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a00ba7ec2625e0ce7d1bca9b602920d5b"></a>
template&lt;typename Serializer , typename DataType , typename... Args&gt; </td></tr>
<tr class="memitem:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>Serialize</b> (<a class="el" href="classFairMQMessage.html">FairMQMessage</a> &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const</td></tr>
<tr class="separator:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a262cb8fbbf7d828a4c076779e7566fed"></a>
template&lt;typename Deserializer , typename DataType , typename... Args&gt; </td></tr>
<tr class="memitem:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>Deserialize</b> (<a class="el" href="classFairMQMessage.html">FairMQMessage</a> &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const</td></tr>
<tr class="separator:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9458e96239d625186c7e5f9163ae7e2 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a> (FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td></tr>
<tr class="separator:ac9458e96239d625186c7e5f9163ae7e2 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a363cf1b520148d9864fa800b4341b77f inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a> (FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td></tr>
<tr class="separator:a363cf1b520148d9864fa800b4341b77f inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ff45ca40adf8ad8e046651f14a63f55 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a> (<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td></tr>
<tr class="separator:a2ff45ca40adf8ad8e046651f14a63f55 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b4c9df42a95d0e428106244a9ae5c54 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a> (<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td></tr>
<tr class="separator:a9b4c9df42a95d0e428106244a9ae5c54 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aab6d9bd4d57360a2b85ee3dec980395c"></a>
auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a> () const -&gt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *</td></tr>
<tr class="memdesc:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for default transport factory. <br /></td></tr>
<tr class="separator:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a76166a3408962d3f57ebfa966aec65a7"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewMessage</b> (Args &amp;&amp;... args)</td></tr>
<tr class="separator:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a836d37a65d5ecce1779b63c75379652c"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewMessageFor</b> (const std::string &amp;channel, int index, Args &amp;&amp;... args)</td></tr>
<tr class="separator:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a2543793c031c94a2db5142cd51fae31d"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewStaticMessage</b> (const T &amp;data)</td></tr>
<tr class="separator:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="abbcd4ce9e3700863e28f07d80cbb1985"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewStaticMessageFor</b> (const std::string &amp;channel, int index, const T &amp;data)</td></tr>
<tr class="separator:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a82bb4426f1e314cc719ed282f6bf7548"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewSimpleMessage</b> (const T &amp;data)</td></tr>
<tr class="separator:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="abf88eece03b79f9f6d9cec0f12913baa"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewSimpleMessageFor</b> (const std::string &amp;channel, int index, const T &amp;data)</td></tr>
<tr class="separator:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a806c0e860c59909e5a2b946c53c73c89"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQUnmanagedRegionPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewUnmanagedRegion</b> (Args &amp;&amp;... args)</td></tr>
<tr class="separator:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a468151007d5f7d430ae94cfdce6e7882"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQUnmanagedRegionPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewUnmanagedRegionFor</b> (const std::string &amp;channel, int index, Args &amp;&amp;... args)</td></tr>
<tr class="separator:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a5d2e8221d94f404d18a73b6d06126e2a"></a>
template&lt;typename ... Ts&gt; </td></tr>
<tr class="memitem:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQPollerPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewPoller</b> (const Ts &amp;... inputs)</td></tr>
<tr class="separator:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89b5fb7dad976206939ff1175a6899ea inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a89b5fb7dad976206939ff1175a6899ea"></a>
FairMQPollerPtr&#160;</td><td class="memItemRight" valign="bottom"><b>NewPoller</b> (const std::vector&lt; <a class="el" href="classFairMQChannel.html">FairMQChannel</a> * &gt; &amp;channels)</td></tr>
<tr class="separator:a89b5fb7dad976206939ff1175a6899ea inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9bddc6f64f9c89b8ffe3670d91c06b29 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a> (const fair::mq::Transport transport)</td></tr>
<tr class="separator:a9bddc6f64f9c89b8ffe3670d91c06b29 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa272062ccaff78a61d78ddfbefa25dec"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config)</td></tr>
<tr class="memdesc:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns config to the device. <br /></td></tr>
<tr class="separator:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="acb7448dc5d278c6f51e3fcf7a49f367e"></a>
<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a> () const</td></tr>
<tr class="memdesc:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get pointer to the config. <br /></td></tr>
<tr class="separator:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a27655622eac0524d86737aba269651d4"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, bool(T::*memberFunction)(FairMQMessagePtr &amp;msg, int index))</td></tr>
<tr class="separator:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a719e0eece74b60c3459b265b1d8db1e1 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a719e0eece74b60c3459b265b1d8db1e1"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, InputMsgCallback callback)</td></tr>
<tr class="separator:a719e0eece74b60c3459b265b1d8db1e1 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a4abc9d4a453670012fc317fe534e875b"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, bool(T::*memberFunction)(<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, int index))</td></tr>
<tr class="separator:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b136382dd08310521501ff4ab6de884 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a0b136382dd08310521501ff4ab6de884"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, InputMultipartCallback callback)</td></tr>
<tr class="separator:a0b136382dd08310521501ff4ab6de884 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a929c915505060a09885093b1a894c358 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a929c915505060a09885093b1a894c358"></a>
<a class="el" href="classFairMQChannel.html">FairMQChannel</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>GetChannel</b> (const std::string &amp;channelName, const int index=0)</td></tr>
<tr class="separator:a929c915505060a09885093b1a894c358 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36a6ae99b44226a2bdf8de4be6c50ef8 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a36a6ae99b44226a2bdf8de4be6c50ef8"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>RegisterChannelEndpoints</b> ()</td></tr>
<tr class="separator:a36a6ae99b44226a2bdf8de4be6c50ef8 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25c5f3615712f0e4e3aa2667c96be286 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a25c5f3615712f0e4e3aa2667c96be286"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>RegisterChannelEndpoint</b> (const std::string &amp;channelName, uint16_t minNumSubChannels=1, uint16_t maxNumSubChannels=1)</td></tr>
<tr class="separator:a25c5f3615712f0e4e3aa2667c96be286 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f2eba92316c226ff1daebd5d8de25c4 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a0f2eba92316c226ff1daebd5d8de25c4"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>PrintRegisteredChannels</b> ()</td></tr>
<tr class="separator:a0f2eba92316c226ff1daebd5d8de25c4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12a348be5f441e0527aae654f9859a89 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a12a348be5f441e0527aae654f9859a89"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetId</b> (const std::string &amp;id)</td></tr>
<tr class="separator:a12a348be5f441e0527aae654f9859a89 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4385f446208320a17c22bcbf663c6173 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a4385f446208320a17c22bcbf663c6173"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetId</b> ()</td></tr>
<tr class="separator:a4385f446208320a17c22bcbf663c6173 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0ad1bbc9ab4452d57460c5ceffa8f47 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ab0ad1bbc9ab4452d57460c5ceffa8f47"></a>
const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a>&#160;</td><td class="memItemRight" valign="bottom"><b>GetVersion</b> () const</td></tr>
<tr class="separator:ab0ad1bbc9ab4452d57460c5ceffa8f47 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a64447bc7fa3ca55c6ff004a3d8c2f8 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a8a64447bc7fa3ca55c6ff004a3d8c2f8"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetNumIoThreads</b> (int numIoThreads)</td></tr>
<tr class="separator:a8a64447bc7fa3ca55c6ff004a3d8c2f8 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23428fcb596e66ca3e7d3ca2776bd890 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a23428fcb596e66ca3e7d3ca2776bd890"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>GetNumIoThreads</b> () const</td></tr>
<tr class="separator:a23428fcb596e66ca3e7d3ca2776bd890 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abad4a2ad5a139ebaf2f851bd5d037734 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="abad4a2ad5a139ebaf2f851bd5d037734"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetNetworkInterface</b> (const std::string &amp;networkInterface)</td></tr>
<tr class="separator:abad4a2ad5a139ebaf2f851bd5d037734 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1cbde24481b77946f5b1972e52de5aba inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a1cbde24481b77946f5b1972e52de5aba"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetNetworkInterface</b> () const</td></tr>
<tr class="separator:a1cbde24481b77946f5b1972e52de5aba inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad931f34f50461f4bc85d4e7697d9562e inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad931f34f50461f4bc85d4e7697d9562e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetDefaultTransport</b> (const std::string &amp;name)</td></tr>
<tr class="separator:ad931f34f50461f4bc85d4e7697d9562e inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec098ab7833ecf3eaeec6f8aa6aed724 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aec098ab7833ecf3eaeec6f8aa6aed724"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetDefaultTransport</b> () const</td></tr>
<tr class="separator:aec098ab7833ecf3eaeec6f8aa6aed724 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74dd6b1a4ee8371afb1126c68bc3fb9d inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a74dd6b1a4ee8371afb1126c68bc3fb9d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetInitTimeoutInS</b> (int initTimeoutInS)</td></tr>
<tr class="separator:a74dd6b1a4ee8371afb1126c68bc3fb9d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80897eabf43ff737314e612edc84558c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a80897eabf43ff737314e612edc84558c"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>GetInitTimeoutInS</b> () const</td></tr>
<tr class="separator:a80897eabf43ff737314e612edc84558c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72517f8d1edab9b879d573fb09e8b5cf inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a> (const std::string &amp;transport)</td></tr>
<tr class="separator:a72517f8d1edab9b879d573fb09e8b5cf inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ae3e16932f18d4966d51c906f1fe99d4a"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a> () const</td></tr>
<tr class="memdesc:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the default transport name. <br /></td></tr>
<tr class="separator:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d674c1794f63a6721913fa964d89908 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2d674c1794f63a6721913fa964d89908"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetRawCmdLineArgs</b> (const std::vector&lt; std::string &gt; &amp;args)</td></tr>
<tr class="separator:a2d674c1794f63a6721913fa964d89908 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a277a1096321320d4d54a7e2c7e65e31a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a277a1096321320d4d54a7e2c7e65e31a"></a>
std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>GetRawCmdLineArgs</b> () const</td></tr>
<tr class="separator:a277a1096321320d4d54a7e2c7e65e31a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37c599287a50f4691fe6cd3488c9cd28 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a37c599287a50f4691fe6cd3488c9cd28"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>RunStateMachine</b> ()</td></tr>
<tr class="separator:a37c599287a50f4691fe6cd3488c9cd28 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2">template&lt;typename Rep , typename Period &gt; </td></tr>
<tr class="memitem:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a> (std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</td></tr>
<tr class="separator:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81348221f634f43f5ee94782fcb6f3e7 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a81348221f634f43f5ee94782fcb6f3e7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>AddChannel</b> (const std::string &amp;name, <a class="el" href="classFairMQChannel.html">FairMQChannel</a> &amp;&amp;channel)</td></tr>
<tr class="separator:a81348221f634f43f5ee94782fcb6f3e7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a> (const fair::mq::Transition transition)</td></tr>
<tr class="memdesc:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Request a device state transition. <a href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">More...</a><br /></td></tr>
<tr class="separator:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a> (const std::string &amp;transition)</td></tr>
<tr class="memdesc:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Request a device state transition. <a href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">More...</a><br /></td></tr>
<tr class="separator:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7b64f14a98d56fc575d13f7da0ad0a4d"></a>
fair::mq::State&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a> ()</td></tr>
<tr class="memdesc:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the next state (any) to occur <br /></td></tr>
<tr class="separator:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a> (fair::mq::State state)</td></tr>
<tr class="memdesc:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the specified state to occur <a href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">More...</a><br /></td></tr>
<tr class="separator:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a> (const std::string &amp;state)</td></tr>
<tr class="memdesc:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the specified state to occur <a href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">More...</a><br /></td></tr>
<tr class="separator:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a916c44294188084712c333182e7cce57 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a916c44294188084712c333182e7cce57"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>TransitionTo</b> (const fair::mq::State state)</td></tr>
<tr class="separator:a916c44294188084712c333182e7cce57 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a> (const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</td></tr>
<tr class="memdesc:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subscribe with a callback to state changes. <a href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">More...</a><br /></td></tr>
<tr class="separator:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a> (const std::string &amp;key)</td></tr>
<tr class="memdesc:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsubscribe from state changes. <a href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">More...</a><br /></td></tr>
<tr class="separator:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a> (const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</td></tr>
<tr class="memdesc:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subscribe with a callback to incoming state transitions. <a href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">More...</a><br /></td></tr>
<tr class="separator:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a> (const std::string &amp;key)</td></tr>
<tr class="memdesc:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsubscribe from state transitions. <a href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">More...</a><br /></td></tr>
<tr class="separator:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ac6e41280dd6cc8b217944a97fd9c548c"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a> () const</td></tr>
<tr class="memdesc:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if a new state has been requested, signaling the current handler to stop. <br /></td></tr>
<tr class="separator:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7ba52b2fc3908c6bf1391eb5f27b03bd"></a>
fair::mq::State&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a> () const</td></tr>
<tr class="memdesc:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current state. <br /></td></tr>
<tr class="separator:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad1b949fc86f1028a1421972d43b37df9"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a> () const</td></tr>
<tr class="memdesc:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the name of the current state as a string. <br /></td></tr>
<tr class="separator:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a44486c35f7225ca250176be8b22ad5b7"><td class="memItemLeft" align="right" valign="top"><a id="a44486c35f7225ca250176be8b22ad5b7"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>fMultipart</b></td></tr>
<tr class="separator:a44486c35f7225ca250176be8b22ad5b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9e23eb533627c92fe9f63c49caf1132"><td class="memItemLeft" align="right" valign="top"><a id="ac9e23eb533627c92fe9f63c49caf1132"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>fMemSet</b></td></tr>
<tr class="separator:ac9e23eb533627c92fe9f63c49caf1132"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa86e9d2020a648f99562dd1553f4b688"><td class="memItemLeft" align="right" valign="top"><a id="aa86e9d2020a648f99562dd1553f4b688"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>fNumParts</b></td></tr>
<tr class="separator:aa86e9d2020a648f99562dd1553f4b688"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7b896c06a63f7a8039ae5bbc8e645fd"><td class="memItemLeft" align="right" valign="top"><a id="ab7b896c06a63f7a8039ae5bbc8e645fd"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>fMsgSize</b></td></tr>
<tr class="separator:ab7b896c06a63f7a8039ae5bbc8e645fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51773d81bce4a95f3984b8ef93459d13"><td class="memItemLeft" align="right" valign="top"><a id="a51773d81bce4a95f3984b8ef93459d13"></a>
size_t&#160;</td><td class="memItemRight" valign="bottom"><b>fMsgAlignment</b></td></tr>
<tr class="separator:a51773d81bce4a95f3984b8ef93459d13"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad98b051fecdd871b56d202d39064d1b5"><td class="memItemLeft" align="right" valign="top"><a id="ad98b051fecdd871b56d202d39064d1b5"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><b>fMsgRate</b></td></tr>
<tr class="separator:ad98b051fecdd871b56d202d39064d1b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0c9e23f0ff3b90d36af801d2e879b3ae"><td class="memItemLeft" align="right" valign="top"><a id="a0c9e23f0ff3b90d36af801d2e879b3ae"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>fNumIterations</b></td></tr>
<tr class="separator:a0c9e23f0ff3b90d36af801d2e879b3ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad164b49e9080d1d319e28b5b0dff909d"><td class="memItemLeft" align="right" valign="top"><a id="ad164b49e9080d1d319e28b5b0dff909d"></a>
uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>fMaxIterations</b></td></tr>
<tr class="separator:ad164b49e9080d1d319e28b5b0dff909d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7434ff16bc8b6a65ebcdd6ef3a982b90"><td class="memItemLeft" align="right" valign="top"><a id="a7434ff16bc8b6a65ebcdd6ef3a982b90"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>fOutChannelName</b></td></tr>
<tr class="separator:a7434ff16bc8b6a65ebcdd6ef3a982b90"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a1c67c4cbd6140f35292b13e485f39ce0"></a>
std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a></td></tr>
<tr class="memdesc:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default transport factory. <br /></td></tr>
<tr class="separator:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a02d4d28747aa58c9b67915e79520cc7b"></a>
std::unordered_map&lt; fair::mq::Transport, std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a></td></tr>
<tr class="memdesc:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Container for transports. <br /></td></tr>
<tr class="separator:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a13141f54111f5f724b79143b4303a32f"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a></td></tr>
<tr class="memdesc:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device ID. <br /></td></tr>
<tr class="separator:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_static_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a> (const fair::mq::State state)</td></tr>
<tr class="memdesc:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns name of the given state as a string. <a href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">More...</a><br /></td></tr>
<tr class="separator:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a> (const fair::mq::Transition transition)</td></tr>
<tr class="memdesc:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns name of the given transition as a string. <a href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">More...</a><br /></td></tr>
<tr class="separator:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad6e090504ceef5799b6f85b136d1e547"></a>
std::unordered_map&lt; std::string, std::vector&lt; <a class="el" href="classFairMQChannel.html">FairMQChannel</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a></td></tr>
<tr class="memdesc:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device channels. <br /></td></tr>
<tr class="separator:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a597c3c39cb45accfcf28e44071e4baff"></a>
std::unique_ptr&lt; <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a></td></tr>
<tr class="memdesc:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal program options configuration. <br /></td></tr>
<tr class="separator:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a3496403c6124440185111ba3b49fb80d"></a>
<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a></td></tr>
<tr class="memdesc:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to config (internal or external) <br /></td></tr>
<tr class="separator:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_static_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a5b207943e3276401338e9a3a54dc2403 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a5b207943e3276401338e9a3a54dc2403"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultId</b> = &quot;&quot;</td></tr>
<tr class="separator:a5b207943e3276401338e9a3a54dc2403 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d06052069ad94a9a1dbdfda0fbd9874 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2d06052069ad94a9a1dbdfda0fbd9874"></a>
static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultIOThreads</b> = 1</td></tr>
<tr class="separator:a2d06052069ad94a9a1dbdfda0fbd9874 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a484eef27bd4a618bb157ce1e078b428f inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a484eef27bd4a618bb157ce1e078b428f"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultTransportName</b> = &quot;zeromq&quot;</td></tr>
<tr class="separator:a484eef27bd4a618bb157ce1e078b428f inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4602a67ba7255e1cdfbee223bd3faee inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="af4602a67ba7255e1cdfbee223bd3faee"></a>
static constexpr fair::mq::Transport&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultTransportType</b> = fair::mq::Transport::ZMQ</td></tr>
<tr class="separator:af4602a67ba7255e1cdfbee223bd3faee inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebeeb3468b8f3c6531b44b15e1069ee5 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aebeeb3468b8f3c6531b44b15e1069ee5"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultNetworkInterface</b> = &quot;default&quot;</td></tr>
<tr class="separator:aebeeb3468b8f3c6531b44b15e1069ee5 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada5af08bd8533ec62efdd2e1e6b53b13 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ada5af08bd8533ec62efdd2e1e6b53b13"></a>
static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultInitTimeout</b> = 120</td></tr>
<tr class="separator:ada5af08bd8533ec62efdd2e1e6b53b13 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92eab91e99eea4f4cbfd095e536e3455 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a92eab91e99eea4f4cbfd095e536e3455"></a>
static constexpr uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultMaxRunTime</b> = 0</td></tr>
<tr class="separator:a92eab91e99eea4f4cbfd095e536e3455 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2c8dd974b57c3729a706e38bc684fc5 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ac2c8dd974b57c3729a706e38bc684fc5"></a>
static constexpr float&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultRate</b> = 0.</td></tr>
<tr class="separator:ac2c8dd974b57c3729a706e38bc684fc5 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3eaa8ef93c5758e16409f01ccbd3671 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa3eaa8ef93c5758e16409f01ccbd3671"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultSession</b> = &quot;default&quot;</td></tr>
<tr class="separator:aa3eaa8ef93c5758e16409f01ccbd3671 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a51db444647edcea2464ca3c59d6bb818"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a> ()</td></tr>
<tr class="memdesc:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Additional user initialization (can be overloaded in child classes). Prefer to use <a class="el" href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98" title="Task initialization (can be overloaded in child classes)">InitTask()</a>. <br /></td></tr>
<tr class="separator:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8716714540007b19024148aedf96bfdc inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a8716714540007b19024148aedf96bfdc"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Bind</b> ()</td></tr>
<tr class="separator:a8716714540007b19024148aedf96bfdc inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3eaa3a5b5d11f92073ca863593eb8b6f inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a3eaa3a5b5d11f92073ca863593eb8b6f"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Connect</b> ()</td></tr>
<tr class="separator:a3eaa3a5b5d11f92073ca863593eb8b6f inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7578022e18bc2b5b40ba56249cf23719"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a> ()</td></tr>
<tr class="memdesc:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called in the RUNNING state once before executing the <a class="el" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e" title="Runs the device (to be overloaded in child classes)">Run()</a>/ConditionalRun() method. <br /></td></tr>
<tr class="separator:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad88707048f53c88ef0d6848deb962284"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a> ()</td></tr>
<tr class="memdesc:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called during RUNNING state repeatedly until it returns false or device state changes. <br /></td></tr>
<tr class="separator:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a56d2e72203b11fb4d636e22018456965"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a> ()</td></tr>
<tr class="memdesc:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called in the RUNNING state once after executing the <a class="el" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e" title="Runs the device (to be overloaded in child classes)">Run()</a>/ConditionalRun() method. <br /></td></tr>
<tr class="separator:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a9ca6f7041dd312096fce7d42ebd3586c"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a> ()</td></tr>
<tr class="memdesc:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the user task (to be overloaded in child classes) <br /></td></tr>
<tr class="separator:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2a1a3157b7cb40ddc299b8865f3ef305"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a> ()</td></tr>
<tr class="memdesc:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the device (can be overloaded in child classes) <br /></td></tr>
<tr class="separator:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Sampler to generate traffic for benchmarking. </p>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>fairmq/devices/<a class="el" href="FairMQBenchmarkSampler_8h_source.html">FairMQBenchmarkSampler.h</a></li>
</ul>
</div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,5 @@
<map id="FairMQBenchmarkSampler" name="FairMQBenchmarkSampler">
<area shape="rect" id="node1" title=" " alt="" coords="5,171,200,197"/>
<area shape="rect" id="node2" href="$classFairMQDevice.html" title=" " alt="" coords="47,95,159,121"/>
<area shape="rect" id="node3" href="$classfair_1_1mq_1_1ProgOptions.html" title=" " alt="" coords="23,5,183,32"/>
</map>

View File

@@ -0,0 +1 @@
0e349f691d2eaa475d3c184878dd8103

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -0,0 +1,4 @@
<map id="FairMQBenchmarkSampler" name="FairMQBenchmarkSampler">
<area shape="rect" id="node1" title=" " alt="" coords="5,80,200,107"/>
<area shape="rect" id="node2" href="$classFairMQDevice.html" title=" " alt="" coords="47,5,159,32"/>
</map>

View File

@@ -0,0 +1 @@
d7f1b6afc123e12b0ff903ff556157c7

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,155 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: Member List</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQChannel Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classFairMQChannel.html">FairMQChannel</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Bind</b>(const std::string &amp;address) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>BindEndpoint</b>(std::string &amp;endpoint) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Connect</b>(const std::string &amp;address) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>ConnectEndpoint</b>(const std::string &amp;endpoint) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultAddress</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultAutoBind</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultLinger</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultMethod</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultName</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultPortRangeMax</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultPortRangeMin</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultRateLogging</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultRcvBufSize</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultRcvKernelSize</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultSndBufSize</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultSndKernelSize</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultTransportName</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultTransportType</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultType</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#ab681571de3ef6c1021b7981054d152f0">FairMQChannel</a>()</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#acf2763fbdad18f5551ec7a3eb4e09829">FairMQChannel</a>(const std::string &amp;name)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a3223d192c795abb3f357df5883dd67f5">FairMQChannel</a>(const std::string &amp;type, const std::string &amp;method, const std::string &amp;address)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a0c44e61cd9e8153c7a0ed5903d2949c4">FairMQChannel</a>(const std::string &amp;name, const std::string &amp;type, std::shared_ptr&lt; FairMQTransportFactory &gt; factory)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a9c411019f1ee1d0dcc9960ec5b2fde46">FairMQChannel</a>(const std::string &amp;name, const std::string &amp;type, const std::string &amp;method, const std::string &amp;address, std::shared_ptr&lt; FairMQTransportFactory &gt; factory)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FairMQChannel</b>(const std::string &amp;name, int index, const fair::mq::Properties &amp;properties) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a0c6054e77d3152f3436acbfc9c85579a">FairMQChannel</a>(const FairMQChannel &amp;)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a837dbc5a66b93e002f430857c7695efe">FairMQChannel</a>(const FairMQChannel &amp;, const std::string &amp;name)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>FairMQDevice</b> (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a4b68f42e263c0666e6bcc01c2e63c384">GetAddress</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#ae4f8bc56c89538dbd7833f8bd5f2d0d2">GetAutoBind</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetBytesRx</b>() const (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetBytesTx</b>() const (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a8d6933d4d73d8fb9e18cf63800b1d8df">GetIndex</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#afbc97ff72e152db5cb4f0c63f7e00243">GetLinger</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetMessagesRx</b>() const (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetMessagesTx</b>() const (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a314c4760f1c420baed3d379a9da1041d">GetMethod</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a9009e62346f999fbdbd79c82cdf3820c">GetName</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a24199032d2bb90271517e82adfebb45d">GetPortRangeMax</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a2b3d7467e1ee3c5f052efc4ef3ba09d3">GetPortRangeMin</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a5bd5adc3c59f7606e0e868a0f17e28f5">GetPrefix</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#af82cb56741d214bd4db0864e34d9cae3">GetRateLogging</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a7998ca57ca6842f52483103a386189a4">GetRcvBufSize</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a3247b369b02586543c3c4c62b2dd1ab8">GetRcvKernelSize</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#ae597404d6fe4209855e44bda8ee9a298">GetSndBufSize</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#abc48790b56c92e1e7f71bf3a9057b8b4">GetSndKernelSize</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetSocket</b>() const (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a1521eb8016da9ffcb4b159423f8e971d">GetTransportName</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a5f4210c9b05f5b38c2549bf2e65b7c45">GetTransportType</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#ac7b933be2f610691dc24439d0d269383">GetType</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Init</b>() (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#aa5ea97bb9ebfe53796b3e59e18ec2266">Invalidate</a>()</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#ae03deb5cf1ac72f7bcd492e1ebd9b8e7">IsValid</a>() const</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewMessage</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewSimpleMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewStaticMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewUnmanagedRegion</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a04a9ac897488b2a4a5176b86f5e74483">operator=</a>(const FairMQChannel &amp;)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a1f040835106f6b4fa735ca3d57491f75">Receive</a>(FairMQMessagePtr &amp;msg, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a260e3826ad87f232f978a00a6a3654cc">Receive</a>(std::vector&lt; FairMQMessagePtr &gt; &amp;msgVec, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a0a58c080d525b7e2e57cbb55a49c1c22">Receive</a>(FairMQParts &amp;parts, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a8be266eb34c0aa683674570866a7804d">Send</a>(FairMQMessagePtr &amp;msg, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#af41430efc6cb963f57c861c1019b64f1">Send</a>(std::vector&lt; FairMQMessagePtr &gt; &amp;msgVec, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a190b3a16e9320c6c49e349bca4bf70ef">Send</a>(FairMQParts &amp;parts, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Transport</b>() -&gt; FairMQTransportFactory * (defined in <a class="el" href="classFairMQChannel.html">FairMQChannel</a>)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a015422384ffb47e8b9c667006a2dff60">UpdateAddress</a>(const std::string &amp;address)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#af84f328394d7a2c8ac4252e8aa9c0c69">UpdateAutoBind</a>(const bool autobind)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#ad077c46bafdaba0a7792458b41600571">UpdateLinger</a>(const int duration)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#ac67be0a888fb0ffa61633d28a5c37d18">UpdateMethod</a>(const std::string &amp;method)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a7dd6f31b095b15a4624045ac259563ca">UpdateName</a>(const std::string &amp;name)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a7dc046299bc2a31135cf170f9952a1a2">UpdatePortRangeMax</a>(const int maxPort)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a633ae618067a1b02280fb16cf4117b70">UpdatePortRangeMin</a>(const int minPort)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a2202995e3281a8bc8fdee10c47ff52c4">UpdateRateLogging</a>(const int rateLogging)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#aa0e59f516d68cdf82b8c4f6150624a0e">UpdateRcvBufSize</a>(const int rcvBufSize)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a10e21a697526a8d07cb30e54ce77d675">UpdateRcvKernelSize</a>(const int rcvKernelSize)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a041eafc10c70fa73bceaa10644db3e6c">UpdateSndBufSize</a>(const int sndBufSize)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#ac74bc8cbda6e2f7b50dd8c7b8643b9d5">UpdateSndKernelSize</a>(const int sndKernelSize)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#a9dc3e2a4a3b3f02be98e2b4e5053a258">UpdateTransport</a>(const std::string &amp;transport)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#af9454c7d2ec6950764f3834158379e9b">UpdateType</a>(const std::string &amp;type)</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQChannel.html#ab9a7fdf4097c67e4480d7f8dc5f88f8f">Validate</a>()</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQChannel.html#a9f4ffef546b24680daf6d5f40efc848f">~FairMQChannel</a>()</td><td class="entry"><a class="el" href="classFairMQChannel.html">FairMQChannel</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,169 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: Member List</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQDevice Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classFairMQDevice.html">FairMQDevice</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AddChannel</b>(const std::string &amp;name, FairMQChannel &amp;&amp;channel) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a>(const fair::mq::Transport transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Bind</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a>(const std::string &amp;transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Connect</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultId</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultInitTimeout</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultIOThreads</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultMaxRunTime</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultNetworkInterface</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultRate</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultSession</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultTransportName</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultTransportType</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Deserialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>FairMQChannel</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#afb850ea8ff5817c69bdb8aaf9ece69b7">FairMQDevice</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a45356d796b842dd000067ad5cf7a63f5">FairMQDevice</a>(const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a08a86dedb427e05c67802e273fdde7cf">FairMQDevice</a>(fair::mq::ProgOptions &amp;config, const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetChannel</b>(const std::string &amp;channelName, const int index=0) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetDefaultTransport</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetId</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetInitTimeoutInS</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetNetworkInterface</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetNumIoThreads</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetRawCmdLineArgs</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a>(const fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetVersion</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98">InitTask</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewMessage</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewMessageFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewPoller</b>(const Ts &amp;... inputs) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewPoller</b>(const std::vector&lt; FairMQChannel * &gt; &amp;channels) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewSimpleMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewSimpleMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewStaticMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewStaticMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewUnmanagedRegion</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewUnmanagedRegionFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQMessagePtr &amp;msg, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMsgCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQParts &amp;parts, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMultipartCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>PrintRegisteredChannels</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>RegisterChannelEndpoint</b>(const std::string &amp;channelName, uint16_t minNumSubChannels=1, uint16_t maxNumSubChannels=1) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RegisterChannelEndpoints</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e">Run</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RunStateMachine</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>Serialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetDefaultTransport</b>(const std::string &amp;name) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetId</b>(const std::string &amp;id) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetInitTimeoutInS</b>(int initTimeoutInS) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetNetworkInterface</b>(const std::string &amp;networkInterface) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetNumIoThreads</b>(int numIoThreads) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetRawCmdLineArgs</b>(const std::vector&lt; std::string &gt; &amp;args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a>(const std::string &amp;transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>TransitionTo</b>(const fair::mq::State state) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>() const -&gt; FairMQTransportFactory *</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a>(std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a>(fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a>(const std::string &amp;state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
</table></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
<map id="FairMQDevice" name="FairMQDevice">
<area shape="rect" id="node1" title=" " alt="" coords="29,95,141,121"/>
<area shape="rect" id="node2" href="$classfair_1_1mq_1_1ProgOptions.html" title=" " alt="" coords="5,5,165,32"/>
</map>

View File

@@ -0,0 +1 @@
a1e3a0145e8957ea2bf547106cc17e51

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,9 @@
<map id="FairMQDevice" name="FairMQDevice">
<area shape="rect" id="node1" title=" " alt="" coords="5,132,117,159"/>
<area shape="rect" id="node2" href="$classFairMQBenchmarkSampler.html" title=" " alt="" coords="165,5,360,32"/>
<area shape="rect" id="node3" href="$classFairMQMerger.html" title=" " alt="" coords="206,56,319,83"/>
<area shape="rect" id="node4" href="$classFairMQMultiplier.html" title=" " alt="" coords="198,107,327,133"/>
<area shape="rect" id="node5" href="$classFairMQProxy.html" title=" " alt="" coords="211,157,315,184"/>
<area shape="rect" id="node6" href="$classFairMQSink.html" title=" " alt="" coords="215,208,310,235"/>
<area shape="rect" id="node7" href="$classFairMQSplitter.html" title=" " alt="" coords="205,259,320,285"/>
</map>

View File

@@ -0,0 +1 @@
ea8df6087074e7c6e0a80a2ba9b6717e

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -0,0 +1,173 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: Member List</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">FairMQMerger Member List</div> </div>
</div><!--header-->
<div class="contents">
<p>This is the complete list of members for <a class="el" href="classFairMQMerger.html">FairMQMerger</a>, including all inherited members.</p>
<table class="directory">
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>AddChannel</b>(const std::string &amp;name, FairMQChannel &amp;&amp;channel) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a>(const fair::mq::Transport transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Bind</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a>(const std::string &amp;transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Connect</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultId</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultInitTimeout</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultIOThreads</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultMaxRunTime</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultNetworkInterface</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultRate</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultSession</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>DefaultTransportName</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>DefaultTransportType</b> (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Deserialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#afb850ea8ff5817c69bdb8aaf9ece69b7">FairMQDevice</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a45356d796b842dd000067ad5cf7a63f5">FairMQDevice</a>(const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a08a86dedb427e05c67802e273fdde7cf">FairMQDevice</a>(fair::mq::ProgOptions &amp;config, const fair::mq::tools::Version version)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>FairMQMerger</b>() (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fInChannelName</b> (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>fMultipart</b> (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>fOutChannelName</b> (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a></td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetChannel</b>(const std::string &amp;channelName, const int index=0) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetDefaultTransport</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetId</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetInitTimeoutInS</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetNetworkInterface</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>GetNumIoThreads</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetRawCmdLineArgs</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a>(const fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a>(const fair::mq::Transition transition)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>GetVersion</b>() const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQMerger.html#a77dc099209a49cec13493e1ec2953411">InitTask</a>() override</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewMessage</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewMessageFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewPoller</b>(const Ts &amp;... inputs) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewPoller</b>(const std::vector&lt; FairMQChannel * &gt; &amp;channels) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewSimpleMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewSimpleMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a>() const</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewStaticMessage</b>(const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewStaticMessageFor</b>(const std::string &amp;channel, int index, const T &amp;data) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>NewUnmanagedRegion</b>(Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>NewUnmanagedRegionFor</b>(const std::string &amp;channel, int index, Args &amp;&amp;... args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQMessagePtr &amp;msg, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMsgCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, bool(T::*memberFunction)(FairMQParts &amp;parts, int index)) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>OnData</b>(const std::string &amp;channelName, InputMultipartCallback callback) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a>(const FairMQDevice &amp;)=delete</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>PrintRegisteredChannels</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>RegisterChannelEndpoint</b>(const std::string &amp;channelName, uint16_t minNumSubChannels=1, uint16_t maxNumSubChannels=1) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>RegisterChannelEndpoints</b>() override (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQMerger.html#a7f38f3fe9b3bc3ab9122a40acbc4bdbc">Run</a>() override</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>RunStateMachine</b>() (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a>(FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a>(FairMQParts &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>Serialize</b>(FairMQMessage &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a>(fair::mq::ProgOptions &amp;config)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetDefaultTransport</b>(const std::string &amp;name) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetId</b>(const std::string &amp;id) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetInitTimeoutInS</b>(int initTimeoutInS) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetNetworkInterface</b>(const std::string &amp;networkInterface) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>SetNumIoThreads</b>(int numIoThreads) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>SetRawCmdLineArgs</b>(const std::vector&lt; std::string &gt; &amp;args) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a>(const std::string &amp;transport)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a>(const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr bgcolor="#f0f0f0"><td class="entry"><b>TransitionTo</b>(const fair::mq::State state) (defined in <a class="el" href="classFairMQDevice.html">FairMQDevice</a>)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a>() const -&gt; FairMQTransportFactory *</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a>(const std::string &amp;key)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a>(std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a>(fair::mq::State state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a>(const std::string &amp;state)</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr><td class="entry"><a class="el" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a>()</td><td class="entry"><a class="el" href="classFairMQDevice.html">FairMQDevice</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
<tr bgcolor="#f0f0f0" class="even"><td class="entry"><b>~FairMQMerger</b>() (defined in <a class="el" href="classFairMQMerger.html">FairMQMerger</a>)</td><td class="entry"><a class="el" href="classFairMQMerger.html">FairMQMerger</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,447 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FairMQ: FairMQMerger Class Reference</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">FairMQ
&#160;<span id="projectnumber">1.4.33</span>
</div>
<div id="projectbrief">C++ Message Queuing Library and Framework</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</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><!-- top -->
<div class="header">
<div class="summary">
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classFairMQMerger-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">FairMQMerger Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="FairMQMerger_8h_source.html">FairMQMerger.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for FairMQMerger:</div>
<div class="dyncontent">
<div class="center"><img src="classFairMQMerger__inherit__graph.png" border="0" usemap="#FairMQMerger_inherit__map" alt="Inheritance graph"/></div>
<map name="FairMQMerger_inherit__map" id="FairMQMerger_inherit__map">
<area shape="rect" title=" " alt="" coords="5,80,119,107"/>
<area shape="rect" href="classFairMQDevice.html" title=" " alt="" coords="6,5,118,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for FairMQMerger:</div>
<div class="dyncontent">
<div class="center"><img src="classFairMQMerger__coll__graph.png" border="0" usemap="#FairMQMerger_coll__map" alt="Collaboration graph"/></div>
<map name="FairMQMerger_coll__map" id="FairMQMerger_coll__map">
<area shape="rect" title=" " alt="" coords="29,171,142,197"/>
<area shape="rect" href="classFairMQDevice.html" title=" " alt="" coords="29,95,141,121"/>
<area shape="rect" href="classfair_1_1mq_1_1ProgOptions.html" title=" " alt="" coords="5,5,165,32"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a77dc099209a49cec13493e1ec2953411"><td class="memItemLeft" align="right" valign="top"><a id="a77dc099209a49cec13493e1ec2953411"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQMerger.html#a77dc099209a49cec13493e1ec2953411">InitTask</a> () override</td></tr>
<tr class="memdesc:a77dc099209a49cec13493e1ec2953411"><td class="mdescLeft">&#160;</td><td class="mdescRight">Task initialization (can be overloaded in child classes) <br /></td></tr>
<tr class="separator:a77dc099209a49cec13493e1ec2953411"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9156fbb54f846d5bac6e55349060329b"><td class="memItemLeft" align="right" valign="top"><a id="a9156fbb54f846d5bac6e55349060329b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>RegisterChannelEndpoints</b> () override</td></tr>
<tr class="separator:a9156fbb54f846d5bac6e55349060329b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f38f3fe9b3bc3ab9122a40acbc4bdbc"><td class="memItemLeft" align="right" valign="top"><a id="a7f38f3fe9b3bc3ab9122a40acbc4bdbc"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQMerger.html#a7f38f3fe9b3bc3ab9122a40acbc4bdbc">Run</a> () override</td></tr>
<tr class="memdesc:a7f38f3fe9b3bc3ab9122a40acbc4bdbc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Runs the device (to be overloaded in child classes) <br /></td></tr>
<tr class="separator:a7f38f3fe9b3bc3ab9122a40acbc4bdbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a51db444647edcea2464ca3c59d6bb818"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a51db444647edcea2464ca3c59d6bb818">Init</a> ()</td></tr>
<tr class="memdesc:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Additional user initialization (can be overloaded in child classes). Prefer to use <a class="el" href="classFairMQDevice.html#ae4e81b923615502666e5531f532ffc98" title="Task initialization (can be overloaded in child classes)">InitTask()</a>. <br /></td></tr>
<tr class="separator:a51db444647edcea2464ca3c59d6bb818 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8716714540007b19024148aedf96bfdc inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a8716714540007b19024148aedf96bfdc"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Bind</b> ()</td></tr>
<tr class="separator:a8716714540007b19024148aedf96bfdc inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3eaa3a5b5d11f92073ca863593eb8b6f inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a3eaa3a5b5d11f92073ca863593eb8b6f"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>Connect</b> ()</td></tr>
<tr class="separator:a3eaa3a5b5d11f92073ca863593eb8b6f inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7578022e18bc2b5b40ba56249cf23719"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7578022e18bc2b5b40ba56249cf23719">PreRun</a> ()</td></tr>
<tr class="memdesc:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called in the RUNNING state once before executing the <a class="el" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e" title="Runs the device (to be overloaded in child classes)">Run()</a>/ConditionalRun() method. <br /></td></tr>
<tr class="separator:a7578022e18bc2b5b40ba56249cf23719 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad88707048f53c88ef0d6848deb962284"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad88707048f53c88ef0d6848deb962284">ConditionalRun</a> ()</td></tr>
<tr class="memdesc:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called during RUNNING state repeatedly until it returns false or device state changes. <br /></td></tr>
<tr class="separator:ad88707048f53c88ef0d6848deb962284 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a56d2e72203b11fb4d636e22018456965"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a56d2e72203b11fb4d636e22018456965">PostRun</a> ()</td></tr>
<tr class="memdesc:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Called in the RUNNING state once after executing the <a class="el" href="classFairMQDevice.html#a3b90dbcf10552daab760629857e3ba3e" title="Runs the device (to be overloaded in child classes)">Run()</a>/ConditionalRun() method. <br /></td></tr>
<tr class="separator:a56d2e72203b11fb4d636e22018456965 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a9ca6f7041dd312096fce7d42ebd3586c"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9ca6f7041dd312096fce7d42ebd3586c">ResetTask</a> ()</td></tr>
<tr class="memdesc:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the user task (to be overloaded in child classes) <br /></td></tr>
<tr class="separator:a9ca6f7041dd312096fce7d42ebd3586c inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2a1a3157b7cb40ddc299b8865f3ef305"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a2a1a3157b7cb40ddc299b8865f3ef305">Reset</a> ()</td></tr>
<tr class="memdesc:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets the device (can be overloaded in child classes) <br /></td></tr>
<tr class="separator:a2a1a3157b7cb40ddc299b8865f3ef305 inherit pro_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a8d3c9f33940285e1362fd44f718c8469"><td class="memItemLeft" align="right" valign="top"><a id="a8d3c9f33940285e1362fd44f718c8469"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>fMultipart</b></td></tr>
<tr class="separator:a8d3c9f33940285e1362fd44f718c8469"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa846ecd334c461292dda96359e22161a"><td class="memItemLeft" align="right" valign="top"><a id="aa846ecd334c461292dda96359e22161a"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>fInChannelName</b></td></tr>
<tr class="separator:aa846ecd334c461292dda96359e22161a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ee22c507f2e741bfaf5c17f0e2b8c55"><td class="memItemLeft" align="right" valign="top"><a id="a6ee22c507f2e741bfaf5c17f0e2b8c55"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>fOutChannelName</b></td></tr>
<tr class="separator:a6ee22c507f2e741bfaf5c17f0e2b8c55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a1c67c4cbd6140f35292b13e485f39ce0"></a>
std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a1c67c4cbd6140f35292b13e485f39ce0">fTransportFactory</a></td></tr>
<tr class="memdesc:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default transport factory. <br /></td></tr>
<tr class="separator:a1c67c4cbd6140f35292b13e485f39ce0 inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a02d4d28747aa58c9b67915e79520cc7b"></a>
std::unordered_map&lt; fair::mq::Transport, std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a02d4d28747aa58c9b67915e79520cc7b">fTransports</a></td></tr>
<tr class="memdesc:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Container for transports. <br /></td></tr>
<tr class="separator:a02d4d28747aa58c9b67915e79520cc7b inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a13141f54111f5f724b79143b4303a32f"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a13141f54111f5f724b79143b4303a32f">fId</a></td></tr>
<tr class="memdesc:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device ID. <br /></td></tr>
<tr class="separator:a13141f54111f5f724b79143b4303a32f inherit pro_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a735b2684d4678eb959302911f12223eb"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a735b2684d4678eb959302911f12223eb">FairMQDevice</a> ()</td></tr>
<tr class="memdesc:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor. <br /></td></tr>
<tr class="separator:a735b2684d4678eb959302911f12223eb inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="afb850ea8ff5817c69bdb8aaf9ece69b7"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#afb850ea8ff5817c69bdb8aaf9ece69b7">FairMQDevice</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config)</td></tr>
<tr class="memdesc:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor with external <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>. <br /></td></tr>
<tr class="separator:afb850ea8ff5817c69bdb8aaf9ece69b7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a45356d796b842dd000067ad5cf7a63f5"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a45356d796b842dd000067ad5cf7a63f5">FairMQDevice</a> (const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version)</td></tr>
<tr class="memdesc:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor that sets the version. <br /></td></tr>
<tr class="separator:a45356d796b842dd000067ad5cf7a63f5 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a08a86dedb427e05c67802e273fdde7cf"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a08a86dedb427e05c67802e273fdde7cf">FairMQDevice</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config, const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a> version)</td></tr>
<tr class="memdesc:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor that sets the version and external <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a>. <br /></td></tr>
<tr class="separator:a08a86dedb427e05c67802e273fdde7cf inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a806cf5c241bf95571654cd327d6e76fe"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a806cf5c241bf95571654cd327d6e76fe">FairMQDevice</a> (const <a class="el" href="classFairMQDevice.html">FairMQDevice</a> &amp;)=delete</td></tr>
<tr class="memdesc:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor (disabled) <br /></td></tr>
<tr class="separator:a806cf5c241bf95571654cd327d6e76fe inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa4e0098922aaf987c2a27c10f4e04fbd"></a>
<a class="el" href="classFairMQDevice.html">FairMQDevice</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aa4e0098922aaf987c2a27c10f4e04fbd">operator=</a> (const <a class="el" href="classFairMQDevice.html">FairMQDevice</a> &amp;)=delete</td></tr>
<tr class="memdesc:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assignment operator (disabled) <br /></td></tr>
<tr class="separator:aa4e0098922aaf987c2a27c10f4e04fbd inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a09389ba6934645ca406a963ab5a60e1a"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a09389ba6934645ca406a963ab5a60e1a">~FairMQDevice</a> ()</td></tr>
<tr class="memdesc:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default destructor. <br /></td></tr>
<tr class="separator:a09389ba6934645ca406a963ab5a60e1a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a93c839b68f007bef8e66115efeed9d41"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a93c839b68f007bef8e66115efeed9d41">LogSocketRates</a> ()</td></tr>
<tr class="memdesc:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Outputs the socket transfer rates. <br /></td></tr>
<tr class="separator:a93c839b68f007bef8e66115efeed9d41 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a00ba7ec2625e0ce7d1bca9b602920d5b"></a>
template&lt;typename Serializer , typename DataType , typename... Args&gt; </td></tr>
<tr class="memitem:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>Serialize</b> (<a class="el" href="classFairMQMessage.html">FairMQMessage</a> &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const</td></tr>
<tr class="separator:a00ba7ec2625e0ce7d1bca9b602920d5b inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a262cb8fbbf7d828a4c076779e7566fed"></a>
template&lt;typename Deserializer , typename DataType , typename... Args&gt; </td></tr>
<tr class="memitem:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>Deserialize</b> (<a class="el" href="classFairMQMessage.html">FairMQMessage</a> &amp;msg, DataType &amp;&amp;data, Args &amp;&amp;... args) const</td></tr>
<tr class="separator:a262cb8fbbf7d828a4c076779e7566fed inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9458e96239d625186c7e5f9163ae7e2 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ac9458e96239d625186c7e5f9163ae7e2">Send</a> (FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td></tr>
<tr class="separator:ac9458e96239d625186c7e5f9163ae7e2 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a363cf1b520148d9864fa800b4341b77f inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a363cf1b520148d9864fa800b4341b77f">Receive</a> (FairMQMessagePtr &amp;msg, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td></tr>
<tr class="separator:a363cf1b520148d9864fa800b4341b77f inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ff45ca40adf8ad8e046651f14a63f55 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a2ff45ca40adf8ad8e046651f14a63f55">Send</a> (<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, const std::string &amp;channel, const int index=0, int sndTimeoutInMs=-1)</td></tr>
<tr class="separator:a2ff45ca40adf8ad8e046651f14a63f55 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9b4c9df42a95d0e428106244a9ae5c54 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9b4c9df42a95d0e428106244a9ae5c54">Receive</a> (<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, const std::string &amp;channel, const int index=0, int rcvTimeoutInMs=-1)</td></tr>
<tr class="separator:a9b4c9df42a95d0e428106244a9ae5c54 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aab6d9bd4d57360a2b85ee3dec980395c"></a>
auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aab6d9bd4d57360a2b85ee3dec980395c">Transport</a> () const -&gt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> *</td></tr>
<tr class="memdesc:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Getter for default transport factory. <br /></td></tr>
<tr class="separator:aab6d9bd4d57360a2b85ee3dec980395c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a76166a3408962d3f57ebfa966aec65a7"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewMessage</b> (Args &amp;&amp;... args)</td></tr>
<tr class="separator:a76166a3408962d3f57ebfa966aec65a7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a836d37a65d5ecce1779b63c75379652c"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewMessageFor</b> (const std::string &amp;channel, int index, Args &amp;&amp;... args)</td></tr>
<tr class="separator:a836d37a65d5ecce1779b63c75379652c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a2543793c031c94a2db5142cd51fae31d"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewStaticMessage</b> (const T &amp;data)</td></tr>
<tr class="separator:a2543793c031c94a2db5142cd51fae31d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="abbcd4ce9e3700863e28f07d80cbb1985"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewStaticMessageFor</b> (const std::string &amp;channel, int index, const T &amp;data)</td></tr>
<tr class="separator:abbcd4ce9e3700863e28f07d80cbb1985 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a82bb4426f1e314cc719ed282f6bf7548"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewSimpleMessage</b> (const T &amp;data)</td></tr>
<tr class="separator:a82bb4426f1e314cc719ed282f6bf7548 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="abf88eece03b79f9f6d9cec0f12913baa"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQMessagePtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewSimpleMessageFor</b> (const std::string &amp;channel, int index, const T &amp;data)</td></tr>
<tr class="separator:abf88eece03b79f9f6d9cec0f12913baa inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a806c0e860c59909e5a2b946c53c73c89"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQUnmanagedRegionPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewUnmanagedRegion</b> (Args &amp;&amp;... args)</td></tr>
<tr class="separator:a806c0e860c59909e5a2b946c53c73c89 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a468151007d5f7d430ae94cfdce6e7882"></a>
template&lt;typename... Args&gt; </td></tr>
<tr class="memitem:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQUnmanagedRegionPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewUnmanagedRegionFor</b> (const std::string &amp;channel, int index, Args &amp;&amp;... args)</td></tr>
<tr class="separator:a468151007d5f7d430ae94cfdce6e7882 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a5d2e8221d94f404d18a73b6d06126e2a"></a>
template&lt;typename ... Ts&gt; </td></tr>
<tr class="memitem:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">FairMQPollerPtr&#160;</td><td class="memTemplItemRight" valign="bottom"><b>NewPoller</b> (const Ts &amp;... inputs)</td></tr>
<tr class="separator:a5d2e8221d94f404d18a73b6d06126e2a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a89b5fb7dad976206939ff1175a6899ea inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a89b5fb7dad976206939ff1175a6899ea"></a>
FairMQPollerPtr&#160;</td><td class="memItemRight" valign="bottom"><b>NewPoller</b> (const std::vector&lt; <a class="el" href="classFairMQChannel.html">FairMQChannel</a> * &gt; &amp;channels)</td></tr>
<tr class="separator:a89b5fb7dad976206939ff1175a6899ea inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9bddc6f64f9c89b8ffe3670d91c06b29 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">std::shared_ptr&lt; <a class="el" href="classFairMQTransportFactory.html">FairMQTransportFactory</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a9bddc6f64f9c89b8ffe3670d91c06b29">AddTransport</a> (const fair::mq::Transport transport)</td></tr>
<tr class="separator:a9bddc6f64f9c89b8ffe3670d91c06b29 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa272062ccaff78a61d78ddfbefa25dec"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aa272062ccaff78a61d78ddfbefa25dec">SetConfig</a> (<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &amp;config)</td></tr>
<tr class="memdesc:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assigns config to the device. <br /></td></tr>
<tr class="separator:aa272062ccaff78a61d78ddfbefa25dec inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="acb7448dc5d278c6f51e3fcf7a49f367e"></a>
<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#acb7448dc5d278c6f51e3fcf7a49f367e">GetConfig</a> () const</td></tr>
<tr class="memdesc:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get pointer to the config. <br /></td></tr>
<tr class="separator:acb7448dc5d278c6f51e3fcf7a49f367e inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a27655622eac0524d86737aba269651d4"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, bool(T::*memberFunction)(FairMQMessagePtr &amp;msg, int index))</td></tr>
<tr class="separator:a27655622eac0524d86737aba269651d4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a719e0eece74b60c3459b265b1d8db1e1 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a719e0eece74b60c3459b265b1d8db1e1"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, InputMsgCallback callback)</td></tr>
<tr class="separator:a719e0eece74b60c3459b265b1d8db1e1 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2"><a id="a4abc9d4a453670012fc317fe534e875b"></a>
template&lt;typename T &gt; </td></tr>
<tr class="memitem:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, bool(T::*memberFunction)(<a class="el" href="classFairMQParts.html">FairMQParts</a> &amp;parts, int index))</td></tr>
<tr class="separator:a4abc9d4a453670012fc317fe534e875b inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0b136382dd08310521501ff4ab6de884 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a0b136382dd08310521501ff4ab6de884"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>OnData</b> (const std::string &amp;channelName, InputMultipartCallback callback)</td></tr>
<tr class="separator:a0b136382dd08310521501ff4ab6de884 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a929c915505060a09885093b1a894c358 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a929c915505060a09885093b1a894c358"></a>
<a class="el" href="classFairMQChannel.html">FairMQChannel</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>GetChannel</b> (const std::string &amp;channelName, const int index=0)</td></tr>
<tr class="separator:a929c915505060a09885093b1a894c358 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a25c5f3615712f0e4e3aa2667c96be286 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a25c5f3615712f0e4e3aa2667c96be286"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>RegisterChannelEndpoint</b> (const std::string &amp;channelName, uint16_t minNumSubChannels=1, uint16_t maxNumSubChannels=1)</td></tr>
<tr class="separator:a25c5f3615712f0e4e3aa2667c96be286 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f2eba92316c226ff1daebd5d8de25c4 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a0f2eba92316c226ff1daebd5d8de25c4"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>PrintRegisteredChannels</b> ()</td></tr>
<tr class="separator:a0f2eba92316c226ff1daebd5d8de25c4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a12a348be5f441e0527aae654f9859a89 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a12a348be5f441e0527aae654f9859a89"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetId</b> (const std::string &amp;id)</td></tr>
<tr class="separator:a12a348be5f441e0527aae654f9859a89 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4385f446208320a17c22bcbf663c6173 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a4385f446208320a17c22bcbf663c6173"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetId</b> ()</td></tr>
<tr class="separator:a4385f446208320a17c22bcbf663c6173 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab0ad1bbc9ab4452d57460c5ceffa8f47 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ab0ad1bbc9ab4452d57460c5ceffa8f47"></a>
const <a class="el" href="structfair_1_1mq_1_1tools_1_1Version.html">fair::mq::tools::Version</a>&#160;</td><td class="memItemRight" valign="bottom"><b>GetVersion</b> () const</td></tr>
<tr class="separator:ab0ad1bbc9ab4452d57460c5ceffa8f47 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a64447bc7fa3ca55c6ff004a3d8c2f8 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a8a64447bc7fa3ca55c6ff004a3d8c2f8"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetNumIoThreads</b> (int numIoThreads)</td></tr>
<tr class="separator:a8a64447bc7fa3ca55c6ff004a3d8c2f8 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a23428fcb596e66ca3e7d3ca2776bd890 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a23428fcb596e66ca3e7d3ca2776bd890"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>GetNumIoThreads</b> () const</td></tr>
<tr class="separator:a23428fcb596e66ca3e7d3ca2776bd890 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abad4a2ad5a139ebaf2f851bd5d037734 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="abad4a2ad5a139ebaf2f851bd5d037734"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetNetworkInterface</b> (const std::string &amp;networkInterface)</td></tr>
<tr class="separator:abad4a2ad5a139ebaf2f851bd5d037734 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1cbde24481b77946f5b1972e52de5aba inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a1cbde24481b77946f5b1972e52de5aba"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetNetworkInterface</b> () const</td></tr>
<tr class="separator:a1cbde24481b77946f5b1972e52de5aba inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad931f34f50461f4bc85d4e7697d9562e inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad931f34f50461f4bc85d4e7697d9562e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetDefaultTransport</b> (const std::string &amp;name)</td></tr>
<tr class="separator:ad931f34f50461f4bc85d4e7697d9562e inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aec098ab7833ecf3eaeec6f8aa6aed724 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aec098ab7833ecf3eaeec6f8aa6aed724"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><b>GetDefaultTransport</b> () const</td></tr>
<tr class="separator:aec098ab7833ecf3eaeec6f8aa6aed724 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a74dd6b1a4ee8371afb1126c68bc3fb9d inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a74dd6b1a4ee8371afb1126c68bc3fb9d"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetInitTimeoutInS</b> (int initTimeoutInS)</td></tr>
<tr class="separator:a74dd6b1a4ee8371afb1126c68bc3fb9d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80897eabf43ff737314e612edc84558c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a80897eabf43ff737314e612edc84558c"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>GetInitTimeoutInS</b> () const</td></tr>
<tr class="separator:a80897eabf43ff737314e612edc84558c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72517f8d1edab9b879d573fb09e8b5cf inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a72517f8d1edab9b879d573fb09e8b5cf">SetTransport</a> (const std::string &amp;transport)</td></tr>
<tr class="separator:a72517f8d1edab9b879d573fb09e8b5cf inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ae3e16932f18d4966d51c906f1fe99d4a"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ae3e16932f18d4966d51c906f1fe99d4a">GetTransportName</a> () const</td></tr>
<tr class="memdesc:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the default transport name. <br /></td></tr>
<tr class="separator:ae3e16932f18d4966d51c906f1fe99d4a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d674c1794f63a6721913fa964d89908 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2d674c1794f63a6721913fa964d89908"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>SetRawCmdLineArgs</b> (const std::vector&lt; std::string &gt; &amp;args)</td></tr>
<tr class="separator:a2d674c1794f63a6721913fa964d89908 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a277a1096321320d4d54a7e2c7e65e31a inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a277a1096321320d4d54a7e2c7e65e31a"></a>
std::vector&lt; std::string &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>GetRawCmdLineArgs</b> () const</td></tr>
<tr class="separator:a277a1096321320d4d54a7e2c7e65e31a inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37c599287a50f4691fe6cd3488c9cd28 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a37c599287a50f4691fe6cd3488c9cd28"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>RunStateMachine</b> ()</td></tr>
<tr class="separator:a37c599287a50f4691fe6cd3488c9cd28 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memTemplParams" colspan="2">template&lt;typename Rep , typename Period &gt; </td></tr>
<tr class="memitem:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ab2e07c7f823cbd0ea76ea6d1b7fdd1d4">WaitFor</a> (std::chrono::duration&lt; Rep, Period &gt; const &amp;duration)</td></tr>
<tr class="separator:ab2e07c7f823cbd0ea76ea6d1b7fdd1d4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81348221f634f43f5ee94782fcb6f3e7 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a81348221f634f43f5ee94782fcb6f3e7"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>AddChannel</b> (const std::string &amp;name, <a class="el" href="classFairMQChannel.html">FairMQChannel</a> &amp;&amp;channel)</td></tr>
<tr class="separator:a81348221f634f43f5ee94782fcb6f3e7 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">ChangeState</a> (const fair::mq::Transition transition)</td></tr>
<tr class="memdesc:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Request a device state transition. <a href="classFairMQDevice.html#ad35b073f8fa62d4559a1efbf38d5ded5">More...</a><br /></td></tr>
<tr class="separator:ad35b073f8fa62d4559a1efbf38d5ded5 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">ChangeState</a> (const std::string &amp;transition)</td></tr>
<tr class="memdesc:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Request a device state transition. <a href="classFairMQDevice.html#a0f7f383786cd37df5bdd5769ac6521ea">More...</a><br /></td></tr>
<tr class="separator:a0f7f383786cd37df5bdd5769ac6521ea inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7b64f14a98d56fc575d13f7da0ad0a4d"></a>
fair::mq::State&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7b64f14a98d56fc575d13f7da0ad0a4d">WaitForNextState</a> ()</td></tr>
<tr class="memdesc:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the next state (any) to occur <br /></td></tr>
<tr class="separator:a7b64f14a98d56fc575d13f7da0ad0a4d inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">WaitForState</a> (fair::mq::State state)</td></tr>
<tr class="memdesc:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the specified state to occur <a href="classFairMQDevice.html#a40ef078cf464d17af1e8faeb69c61206">More...</a><br /></td></tr>
<tr class="separator:a40ef078cf464d17af1e8faeb69c61206 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">WaitForState</a> (const std::string &amp;state)</td></tr>
<tr class="memdesc:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">waits for the specified state to occur <a href="classFairMQDevice.html#a5b28e672fc4bdd82513fff138ff672d9">More...</a><br /></td></tr>
<tr class="separator:a5b28e672fc4bdd82513fff138ff672d9 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a916c44294188084712c333182e7cce57 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a916c44294188084712c333182e7cce57"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>TransitionTo</b> (const fair::mq::State state)</td></tr>
<tr class="separator:a916c44294188084712c333182e7cce57 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">SubscribeToStateChange</a> (const std::string &amp;key, std::function&lt; void(const fair::mq::State)&gt; callback)</td></tr>
<tr class="memdesc:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subscribe with a callback to state changes. <a href="classFairMQDevice.html#ae3c2c8524082bf37eafaa26030ee7452">More...</a><br /></td></tr>
<tr class="separator:ae3c2c8524082bf37eafaa26030ee7452 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">UnsubscribeFromStateChange</a> (const std::string &amp;key)</td></tr>
<tr class="memdesc:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsubscribe from state changes. <a href="classFairMQDevice.html#af9b5b7a5469bff53feb6a1e000230e73">More...</a><br /></td></tr>
<tr class="separator:af9b5b7a5469bff53feb6a1e000230e73 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">SubscribeToNewTransition</a> (const std::string &amp;key, std::function&lt; void(const fair::mq::Transition)&gt; callback)</td></tr>
<tr class="memdesc:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Subscribe with a callback to incoming state transitions. <a href="classFairMQDevice.html#aff6cf5db6dfc546431fc76548b8c09c4">More...</a><br /></td></tr>
<tr class="separator:aff6cf5db6dfc546431fc76548b8c09c4 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">UnsubscribeFromNewTransition</a> (const std::string &amp;key)</td></tr>
<tr class="memdesc:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsubscribe from state transitions. <a href="classFairMQDevice.html#aaa9562c293ae1522975f171dfee00d69">More...</a><br /></td></tr>
<tr class="separator:aaa9562c293ae1522975f171dfee00d69 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ac6e41280dd6cc8b217944a97fd9c548c"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ac6e41280dd6cc8b217944a97fd9c548c">NewStatePending</a> () const</td></tr>
<tr class="memdesc:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if a new state has been requested, signaling the current handler to stop. <br /></td></tr>
<tr class="separator:ac6e41280dd6cc8b217944a97fd9c548c inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a7ba52b2fc3908c6bf1391eb5f27b03bd"></a>
fair::mq::State&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a7ba52b2fc3908c6bf1391eb5f27b03bd">GetCurrentState</a> () const</td></tr>
<tr class="memdesc:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current state. <br /></td></tr>
<tr class="separator:a7ba52b2fc3908c6bf1391eb5f27b03bd inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad1b949fc86f1028a1421972d43b37df9"></a>
std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad1b949fc86f1028a1421972d43b37df9">GetCurrentStateName</a> () const</td></tr>
<tr class="memdesc:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the name of the current state as a string. <br /></td></tr>
<tr class="separator:ad1b949fc86f1028a1421972d43b37df9 inherit pub_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_static_methods_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">GetStateName</a> (const fair::mq::State state)</td></tr>
<tr class="memdesc:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns name of the given state as a string. <a href="classFairMQDevice.html#af13f02da4e38ec68e23b7fab6677540a">More...</a><br /></td></tr>
<tr class="separator:af13f02da4e38ec68e23b7fab6677540a inherit pub_static_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="memItemLeft" align="right" valign="top">static std::string&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">GetTransitionName</a> (const fair::mq::Transition transition)</td></tr>
<tr class="memdesc:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns name of the given transition as a string. <a href="classFairMQDevice.html#afeaaeb9cb5ce8e0ac617600af8cfee52">More...</a><br /></td></tr>
<tr class="separator:afeaaeb9cb5ce8e0ac617600af8cfee52 inherit pub_static_methods_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Public Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ad6e090504ceef5799b6f85b136d1e547"></a>
std::unordered_map&lt; std::string, std::vector&lt; <a class="el" href="classFairMQChannel.html">FairMQChannel</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#ad6e090504ceef5799b6f85b136d1e547">fChannels</a></td></tr>
<tr class="memdesc:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Device channels. <br /></td></tr>
<tr class="separator:ad6e090504ceef5799b6f85b136d1e547 inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a597c3c39cb45accfcf28e44071e4baff"></a>
std::unique_ptr&lt; <a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a597c3c39cb45accfcf28e44071e4baff">fInternalConfig</a></td></tr>
<tr class="memdesc:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal program options configuration. <br /></td></tr>
<tr class="separator:a597c3c39cb45accfcf28e44071e4baff inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a3496403c6124440185111ba3b49fb80d"></a>
<a class="el" href="classfair_1_1mq_1_1ProgOptions.html">fair::mq::ProgOptions</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classFairMQDevice.html#a3496403c6124440185111ba3b49fb80d">fConfig</a></td></tr>
<tr class="memdesc:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer to config (internal or external) <br /></td></tr>
<tr class="separator:a3496403c6124440185111ba3b49fb80d inherit pub_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_static_attribs_classFairMQDevice"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classFairMQDevice')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classFairMQDevice.html">FairMQDevice</a></td></tr>
<tr class="memitem:a5b207943e3276401338e9a3a54dc2403 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a5b207943e3276401338e9a3a54dc2403"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultId</b> = &quot;&quot;</td></tr>
<tr class="separator:a5b207943e3276401338e9a3a54dc2403 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d06052069ad94a9a1dbdfda0fbd9874 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a2d06052069ad94a9a1dbdfda0fbd9874"></a>
static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultIOThreads</b> = 1</td></tr>
<tr class="separator:a2d06052069ad94a9a1dbdfda0fbd9874 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a484eef27bd4a618bb157ce1e078b428f inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a484eef27bd4a618bb157ce1e078b428f"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultTransportName</b> = &quot;zeromq&quot;</td></tr>
<tr class="separator:a484eef27bd4a618bb157ce1e078b428f inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4602a67ba7255e1cdfbee223bd3faee inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="af4602a67ba7255e1cdfbee223bd3faee"></a>
static constexpr fair::mq::Transport&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultTransportType</b> = fair::mq::Transport::ZMQ</td></tr>
<tr class="separator:af4602a67ba7255e1cdfbee223bd3faee inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebeeb3468b8f3c6531b44b15e1069ee5 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aebeeb3468b8f3c6531b44b15e1069ee5"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultNetworkInterface</b> = &quot;default&quot;</td></tr>
<tr class="separator:aebeeb3468b8f3c6531b44b15e1069ee5 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ada5af08bd8533ec62efdd2e1e6b53b13 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ada5af08bd8533ec62efdd2e1e6b53b13"></a>
static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultInitTimeout</b> = 120</td></tr>
<tr class="separator:ada5af08bd8533ec62efdd2e1e6b53b13 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a92eab91e99eea4f4cbfd095e536e3455 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="a92eab91e99eea4f4cbfd095e536e3455"></a>
static constexpr uint64_t&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultMaxRunTime</b> = 0</td></tr>
<tr class="separator:a92eab91e99eea4f4cbfd095e536e3455 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2c8dd974b57c3729a706e38bc684fc5 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="ac2c8dd974b57c3729a706e38bc684fc5"></a>
static constexpr float&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultRate</b> = 0.</td></tr>
<tr class="separator:ac2c8dd974b57c3729a706e38bc684fc5 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3eaa8ef93c5758e16409f01ccbd3671 inherit pub_static_attribs_classFairMQDevice"><td class="memItemLeft" align="right" valign="top"><a id="aa3eaa8ef93c5758e16409f01ccbd3671"></a>
static constexpr const char *&#160;</td><td class="memItemRight" valign="bottom"><b>DefaultSession</b> = &quot;default&quot;</td></tr>
<tr class="separator:aa3eaa8ef93c5758e16409f01ccbd3671 inherit pub_static_attribs_classFairMQDevice"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p><a class="el" href="FairMQMerger_8h_source.html">FairMQMerger.h</a></p>
<dl class="section since"><dt>Since</dt><dd>2012-12-06 </dd></dl>
<dl class="section author"><dt>Author</dt><dd>D. Klein, A. Rybalchenko </dd></dl>
</div><hr/>The documentation for this class was generated from the following file:<ul>
<li>fairmq/devices/<a class="el" href="FairMQMerger_8h_source.html">FairMQMerger.h</a></li>
</ul>
</div><!-- contents -->
<p style="margin: 0 12px 10px 12px;"><a href="https://help.github.com/articles/github-privacy-statement/">privacy</a></p>

View File

@@ -0,0 +1,5 @@
<map id="FairMQMerger" name="FairMQMerger">
<area shape="rect" id="node1" title=" " alt="" coords="29,171,142,197"/>
<area shape="rect" id="node2" href="$classFairMQDevice.html" title=" " alt="" coords="29,95,141,121"/>
<area shape="rect" id="node3" href="$classfair_1_1mq_1_1ProgOptions.html" title=" " alt="" coords="5,5,165,32"/>
</map>

View File

@@ -0,0 +1 @@
0338822234ee37687ee03aa414cfbbff

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,4 @@
<map id="FairMQMerger" name="FairMQMerger">
<area shape="rect" id="node1" title=" " alt="" coords="5,80,119,107"/>
<area shape="rect" id="node2" href="$classFairMQDevice.html" title=" " alt="" coords="6,5,118,32"/>
</map>

Some files were not shown because too many files have changed in this diff Show More