You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by gi...@apache.org on 2018/05/18 09:30:22 UTC

[31/48] mesos-site git commit: Updated the website built from mesos SHA: c020a13.

http://git-wip-us.apache.org/repos/asf/mesos-site/blob/d7774475/content/api/latest/c++/mac_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/api/latest/c++/mac_8hpp_source.html b/content/api/latest/c++/mac_8hpp_source.html
index 76f75d8..92e3915 100644
--- a/content/api/latest/c++/mac_8hpp_source.html
+++ b/content/api/latest/c++/mac_8hpp_source.html
@@ -52,7 +52,7 @@
 <div class="title">mac.hpp</div>  </div>
 </div><!--header-->
 <div class="contents">
-<a href="mac_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// You may obtain a copy of the License at</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">//  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">//</span></d
 iv><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// limitations under the License.</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">#ifndef __STOUT_MAC_HPP__</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define __STOUT_MAC_HPP__</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;stdint.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;string.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">#ifndef __WINDOWS__</span></d
 iv><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;arpa/inet.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</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">#ifdef __linux__</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;linux/if.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;linux/if_packet.h&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</spa
 n>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifndef __WINDOWS__</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;net/ethernet.h&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</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">#ifdef __APPLE__</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &lt;net/if.h&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;net/if_dl.h&gt;</span></div><div class="line"><a name="l00036"></a><span class=
 "lineno">   36</span>&#160;<span class="preprocessor">#include &lt;net/if_types.h&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#ifndef __WINDOWS__</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</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">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;string&gt;</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="preprocessor">#include &lt;<a class="code" href="abort_8hpp.html">stout/abort.hpp</a>&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">stout/error.hpp</a>&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="none_8hpp.html">stout/none.hpp</a>&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class=
 "preprocessor">#include &lt;<a class="code" href="result_8hpp.html">stout/result.hpp</a>&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="stringify_8hpp.html">stout/stringify.hpp</a>&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="strings_8hpp.html">stout/strings.hpp</a>&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="try_8hpp.html">stout/try.hpp</a>&gt;</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;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">// Network utilities.</span></div><di
 v class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacenet.html">net</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="comment">// Represents a MAC address. A MAC address is a 48-bit unique</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">// identifier assigned to a network interface for communications on</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">// the physical network segment. We use a byte array (in transmission</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// order) to represent a MAC address. For example, for a MAC address</span></div><div class="line"><a name=
 "l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">// 01:23:34:67:89:ab, the format is shown as follows:</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">//    MSB                                          LSB</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">//     |                                            |</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">//     v                                            v</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">// +--------+--------+--------+--------+--------+--------+</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>
 &#160;<span class="comment">// |bytes[0]|bytes[1]|bytes[2]|bytes[3]|bytes[4]|bytes[5]|</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;<span class="comment">//</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">//     01   :   23   :   45   :   67   :   89   :   ab</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">// NOLINT(readability/ending_punctuation)</span></div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html">   74</a></span>&#160;<span class="keyword">class </span><a class="code" href="classnet_1_1MAC.html">MAC</a></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">public</span>:</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="comment">// Parse a MAC address (e.g., 01:23:34:67:89:ab).</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#a0dfd0ca6e46f22afa5ac8331b0f5988a">   78</a></span>&#160;  <span class="keyword">static</span> <a class="code" href="classTry.html">Try&lt;MAC&gt;</a> <a class="code" href="classnet_1_1MAC.html#a0dfd0ca6e46f22afa5ac8331b0f5988a">parse</a>(<span class="keyword">const</span> std::string&amp; s)</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;    std::vector&lt;std::string&gt; tokens = <a class="code" href="namespacestrings.html#a1f86a4a73f20056475dc065ec984eb7a">strings::sp
 lit</a>(s, <span class="stringliteral">&quot;:&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">if</span> (tokens.size() != 6) {</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Invalid format. Expecting xx:xx:xx:xx:xx:xx&quot;</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">auto</span> isValidHexDigit = [](<span class="keywordtype">char</span> c) {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      <span class="keywordflow">return</span> (c &gt;= <span class="charliter
 al">&#39;0&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;9&#39;</span>) ||</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;          (c &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;f&#39;</span>) ||</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;          (c &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;F&#39;</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;    uint8_t bytes[6];</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div 
 class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      <span class="keywordflow">if</span> (tokens[i].<a class="code" href="namespaceos_1_1stat.html#a7a116891923bc8b5d8c50f78da8657be">size</a>() != 2) {</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not a two digit hex number&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;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;      <span class="keywordflow">if</span> (!isValidHexDigit(tokens[i][0]) ||</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;          !isValidHexDigit(tokens[i][1])) {</div><div class="line"><a name="l00099"></a><span cl
 ass="lineno">   99</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not a valid hex number&quot;</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;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">char</span>* str = tokens[i].c_str();</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      <span class="keywordtype">char</span> *endptr = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value = strtoul(str, &amp;endptr, 16);</div><div class="line"><a name="l00105"></a><span c
 lass="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;      assert(endptr == str + 2);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;      assert(value &lt; 256);</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;      bytes[i] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(value);</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;    <span class="keywordflow">return</span> <a class="code" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">MAC</a>(bytes);</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="comment">// Constructs a MAC address from a byte array.</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">  116</a></span>&#160;  <span class="keyword">explicit</span> <a class="code" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">MAC</a>(<span class="keyword">const</span> uint8_t (&amp;_bytes)[6])</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">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      bytes[i] = _
 bytes[i];</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">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="comment">// Returns the byte at the given index. For example, for a MAC</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  <span class="comment">// address 01:23:45:67:89:ab, mac[0] = 01, mac[1] = 23 and etc.</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#af925648a11ff2d5ab14cf4e608e2048d">  125</a></span>&#160;  uint8_t <a class="code" href="classnet_1_1MAC.html#af925648a11ff2d5ab14cf4e608e2048d">operator[]</a>(<span class="keywordtype">size_t</span> <a class="code" href="namespacerouting_1_1link.html#a26486cdba01
 ef1c80706b1e07e8a6d3f">index</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">if</span> (index &gt;= 6) {</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;      <a class="code" href="abort_8hpp.html#a4d84a74fe6e4f84bc3d2f901b9e89f93">ABORT</a>(<span class="stringliteral">&quot;Invalid index specified in MAC::operator[]\n&quot;</span>);</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;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> bytes[<a class="code" href="namespacerouting_1_1link.html#a26486cdba01ef1c80706b1e07e8a6d3f">index</a>];<
 /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"><a class="line" href="classnet_1_1MAC.html#a0a1331d9bec0070e02eadbed544e50a0">  134</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classnet_1_1MAC.html#a0a1331d9bec0070e02eadbed544e50a0">operator==</a>(<span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; that)<span class="keyword"> const</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      <
 span class="keywordflow">if</span> (bytes[i] != that.bytes[i]) {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</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;    }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#aef1d6979a1b533061eb9f6640a729363">  144</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classnet_1_1MAC.html#aef1
 d6979a1b533061eb9f6640a729363">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; that)<span class="keyword"> const</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == that);</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;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="comment">// Byte array of this MAC address (in transmission order).</span></div><div class="line"><a name="l00151"></a><span class="lineno
 ">  151</span>&#160;  uint8_t bytes[6];</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;<span class="comment">// Returns the standard string format (IEEE 802) of the given MAC</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">// address, which contains six groups of two hexadecimal digits,</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment">// separated by colons, in transmission order (e.g.,</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">// 01:23:45:67:89:ab).</span></div><div class="line"><a name="l00159"></a><spa
 n class="lineno"><a class="line" href="namespacenet.html#a801fe1714d4b21629f8cda290c39baf6">  159</a></span>&#160;<span class="keyword">inline</span> std::ostream&amp; <a class="code" href="namespacenet.html#ab2ed5173deb8f3daf281f9828613956d">operator&lt;&lt;</a>(std::ostream&amp; stream, <span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; <a class="code" href="namespacenet.html#aa0c3c89a627309104e37ffb51987daa1">mac</a>)</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="keywordtype">char</span> buffer[18];</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;  sprintf(</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      buffer,</div><div class="line"><a name="l001
 65"></a><span class="lineno">  165</span>&#160;      <span class="stringliteral">&quot;%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx&quot;</span>,</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;      mac[0],</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      mac[1],</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      mac[2],</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      mac[3],</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      mac[4],</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      mac[5]);</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> stream &lt;&lt; buffer;</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">// namespace net {</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</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;<span class="comment">// NOTE: These headers are placed here because the platform specific code</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">// requires classes defined in this file.</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#ifdef __WINDOWS__</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span 
 class="preprocessor">#include &lt;<a class="code" href="windows_2mac_8hpp.html">stout/windows/mac.hpp</a>&gt;</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="posix_2mac_8hpp.html">stout/posix/mac.hpp</a>&gt;</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</span></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="preprocessor">#endif // __STOUT_MAC_HPP__</span></div><div class="ttc" id="classError_html"><div class="ttname"><a href="classError.html">Error</a></div><div class="ttdef"><b>Definition:</b> errorbase.hpp:35</div></div>
+<a href="mac_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// You may obtain a copy of the License at</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">//  http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">//</span></d
 iv><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// limitations under the License.</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">#ifndef __STOUT_MAC_HPP__</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define __STOUT_MAC_HPP__</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;stdint.h&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;string.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">#ifndef __WINDOWS__</span></d
 iv><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;arpa/inet.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</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">#ifdef __linux__</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;linux/if.h&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;linux/if_packet.h&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</spa
 n>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#ifndef __WINDOWS__</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &lt;net/ethernet.h&gt;</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</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">#ifdef __APPLE__</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="preprocessor">#include &lt;net/if.h&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;net/if_dl.h&gt;</span></div><div class="line"><a name="l00036"></a><span class=
 "lineno">   36</span>&#160;<span class="preprocessor">#include &lt;net/if_types.h&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="preprocessor">#endif</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="preprocessor">#ifndef __WINDOWS__</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;sys/socket.h&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</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">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;string&gt;</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="preprocessor">#include &lt;<a class="code" href="abort_8hpp.html">stout/abort.hpp</a>&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="error_8hpp.html">stout/error.hpp</a>&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="none_8hpp.html">stout/none.hpp</a>&gt;</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class=
 "preprocessor">#include &lt;<a class="code" href="result_8hpp.html">stout/result.hpp</a>&gt;</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="stringify_8hpp.html">stout/stringify.hpp</a>&gt;</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="strings_8hpp.html">stout/strings.hpp</a>&gt;</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="try_8hpp.html">stout/try.hpp</a>&gt;</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;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;<span class="comment">// Network utilities.</span></div><di
 v class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacenet.html">net</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="comment">// Represents a MAC address. A MAC address is a 48-bit unique</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment">// identifier assigned to a network interface for communications on</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">// the physical network segment. We use a byte array (in transmission</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment">// order) to represent a MAC address. For example, for a MAC address</span></div><div class="line"><a name=
 "l00063"></a><span class="lineno">   63</span>&#160;<span class="comment">// 01:23:34:67:89:ab, the format is shown as follows:</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment">//    MSB                                          LSB</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;<span class="comment">//     |                                            |</span></div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="comment">//     v                                            v</span></div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment">// +--------+--------+--------+--------+--------+--------+</span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>
 &#160;<span class="comment">// |bytes[0]|bytes[1]|bytes[2]|bytes[3]|bytes[4]|bytes[5]|</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;<span class="comment">//</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">//     01   :   23   :   45   :   67   :   89   :   ab</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment">// NOLINT(readability/ending_punctuation)</span></div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html">   74</a></span>&#160;<span class="keyword">class </span><a class="code" href="classnet_1_1MAC.html">MAC</a></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">public</span>:</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;  <span class="comment">// Parse a MAC address (e.g., 01:23:34:67:89:ab).</span></div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#a0dfd0ca6e46f22afa5ac8331b0f5988a">   78</a></span>&#160;  <span class="keyword">static</span> <a class="code" href="classTry.html">Try&lt;MAC&gt;</a> <a class="code" href="classnet_1_1MAC.html#a0dfd0ca6e46f22afa5ac8331b0f5988a">parse</a>(<span class="keyword">const</span> std::string&amp; s)</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;    std::vector&lt;std::string&gt; tokens = <a class="code" href="namespacestrings.html#a1f86a4a73f20056475dc065ec984eb7a">strings::sp
 lit</a>(s, <span class="stringliteral">&quot;:&quot;</span>);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">if</span> (tokens.size() != 6) {</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Invalid format. Expecting xx:xx:xx:xx:xx:xx&quot;</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">auto</span> isValidHexDigit = [](<span class="keywordtype">char</span> c) {</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      <span class="keywordflow">return</span> (c &gt;= <span class="charliter
 al">&#39;0&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;9&#39;</span>) ||</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;          (c &gt;= <span class="charliteral">&#39;a&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;f&#39;</span>) ||</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;          (c &gt;= <span class="charliteral">&#39;A&#39;</span> &amp;&amp; c &lt;= <span class="charliteral">&#39;F&#39;</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;    uint8_t bytes[6];</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div 
 class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;      <span class="keywordflow">if</span> (tokens[i].<a class="code" href="namespaceos_1_1stat.html#a7a116891923bc8b5d8c50f78da8657be">size</a>() != 2) {</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not a two digit hex number&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;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;      <span class="keywordflow">if</span> (!isValidHexDigit(tokens[i][0]) ||</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;          !isValidHexDigit(tokens[i][1])) {</div><div class="line"><a name="l00099"></a><span cl
 ass="lineno">   99</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not a valid hex number&quot;</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;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;      <span class="keyword">const</span> <span class="keywordtype">char</span>* str = tokens[i].c_str();</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;      <span class="keywordtype">char</span> *endptr = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;      <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> value = strtoul(str, &amp;endptr, 16);</div><div class="line"><a name="l00105"></a><span c
 lass="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;      assert(endptr == str + 2);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;      assert(value &lt; 256);</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;      bytes[i] = <span class="keyword">static_cast&lt;</span>uint8_t<span class="keyword">&gt;</span>(value);</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;    <span class="keywordflow">return</span> <a class="code" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">MAC</a>(bytes);</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="comment">// Constructs a MAC address from a byte array.</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">  116</a></span>&#160;  <span class="keyword">explicit</span> <a class="code" href="classnet_1_1MAC.html#aaec2bf803b833a5ca27faf1873826d49">MAC</a>(<span class="keyword">const</span> uint8_t (&amp;_bytes)[6])</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">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;      bytes[i] = _
 bytes[i];</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">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  <span class="comment">// Returns the byte at the given index. For example, for a MAC</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  <span class="comment">// address 01:23:45:67:89:ab, mac[0] = 01, mac[1] = 23 and etc.</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#af925648a11ff2d5ab14cf4e608e2048d">  125</a></span>&#160;  uint8_t <a class="code" href="classnet_1_1MAC.html#af925648a11ff2d5ab14cf4e608e2048d">operator[]</a>(<span class="keywordtype">size_t</span> <a class="code" href="namespacerouting_1_1link.html#a26486cdba01
 ef1c80706b1e07e8a6d3f">index</a>)<span class="keyword"> const</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    <span class="keywordflow">if</span> (index &gt;= 6) {</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;      <a class="code" href="abort_8hpp.html#a4d84a74fe6e4f84bc3d2f901b9e89f93">ABORT</a>(<span class="stringliteral">&quot;Invalid index specified in MAC::operator[]\n&quot;</span>);</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;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> bytes[<a class="code" href="namespacerouting_1_1link.html#a26486cdba01ef1c80706b1e07e8a6d3f">index</a>];<
 /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"><a class="line" href="classnet_1_1MAC.html#a0a1331d9bec0070e02eadbed544e50a0">  134</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classnet_1_1MAC.html#a0a1331d9bec0070e02eadbed544e50a0">operator==</a>(<span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; that)<span class="keyword"> const</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 6; i++) {</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;      <
 span class="keywordflow">if</span> (bytes[i] != that.bytes[i]) {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</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;    }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</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;</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classnet_1_1MAC.html#aef1d6979a1b533061eb9f6640a729363">  144</a></span>&#160;  <span class="keywordtype">bool</span> <a class="code" href="classnet_1_1MAC.html#aef1
 d6979a1b533061eb9f6640a729363">operator!=</a>(<span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; that)<span class="keyword"> const</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="keyword">  </span>{</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <span class="keywordflow">return</span> !(*<span class="keyword">this</span> == that);</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;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;  <span class="comment">// Byte array of this MAC address (in transmission order).</span></div><div class="line"><a name="l00151"></a><span class="lineno
 ">  151</span>&#160;  uint8_t bytes[6];</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;<span class="comment">// Returns the standard string format (IEEE 802) of the given MAC</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment">// address, which contains six groups of two hexadecimal digits,</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment">// separated by colons, in transmission order (e.g.,</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment">// 01:23:45:67:89:ab).</span></div><div class="line"><a name="l00159"></a><spa
 n class="lineno"><a class="line" href="namespacenet.html#a801fe1714d4b21629f8cda290c39baf6">  159</a></span>&#160;<span class="keyword">inline</span> std::ostream&amp; <a class="code" href="namespacenet.html#ab2ed5173deb8f3daf281f9828613956d">operator&lt;&lt;</a>(std::ostream&amp; stream, <span class="keyword">const</span> <a class="code" href="classnet_1_1MAC.html">MAC</a>&amp; <a class="code" href="namespacenet.html#aa0c3c89a627309104e37ffb51987daa1">mac</a>)</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="keywordtype">char</span> buffer[18];</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;  sprintf(</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;      buffer,</div><div class="line"><a name="l001
 65"></a><span class="lineno">  165</span>&#160;      <span class="stringliteral">&quot;%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx&quot;</span>,</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;      mac[0],</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      mac[1],</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;      mac[2],</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      mac[3],</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      mac[4],</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      mac[5]);</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> stream &lt;&lt; buffer;</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">// namespace net {</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;</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;<span class="comment">// NOTE: These headers are placed here because the platform specific code</span></div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;<span class="comment">// requires classes defined in this file.</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="preprocessor">#ifdef __WINDOWS__</span></div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span 
 class="preprocessor">#include &lt;<a class="code" href="windows_2mac_8hpp.html">stout/windows/mac.hpp</a>&gt;</span></div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="posix_2mac_8hpp.html">stout/posix/mac.hpp</a>&gt;</span></div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;<span class="preprocessor">#endif // __WINDOWS__</span></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="preprocessor">#endif // __STOUT_MAC_HPP__</span></div><div class="ttc" id="classError_html"><div class="ttname"><a href="classError.html">Error</a></div><div class="ttdef"><b>Definition:</b> errorbase.hpp:36</div></div>
 <div class="ttc" id="posix_2mac_8hpp_html"><div class="ttname"><a href="posix_2mac_8hpp.html">mac.hpp</a></div></div>
 <div class="ttc" id="abort_8hpp_html_a4d84a74fe6e4f84bc3d2f901b9e89f93"><div class="ttname"><a href="abort_8hpp.html#a4d84a74fe6e4f84bc3d2f901b9e89f93">ABORT</a></div><div class="ttdeci">#define ABORT(...)</div><div class="ttdef"><b>Definition:</b> abort.hpp:40</div></div>
 <div class="ttc" id="namespaceos_1_1stat_html_a7a116891923bc8b5d8c50f78da8657be"><div class="ttname"><a href="namespaceos_1_1stat.html#a7a116891923bc8b5d8c50f78da8657be">os::stat::size</a></div><div class="ttdeci">Try&lt; Bytes &gt; size(const std::string &amp;path, const FollowSymlink follow=FollowSymlink::FOLLOW_SYMLINK)</div><div class="ttdef"><b>Definition:</b> stat.hpp:119</div></div>

http://git-wip-us.apache.org/repos/asf/mesos-site/blob/d7774475/content/api/latest/c++/memory__profiler_8hpp_source.html
----------------------------------------------------------------------
diff --git a/content/api/latest/c++/memory__profiler_8hpp_source.html b/content/api/latest/c++/memory__profiler_8hpp_source.html
index 0bd8506..35d1db6 100644
--- a/content/api/latest/c++/memory__profiler_8hpp_source.html
+++ b/content/api/latest/c++/memory__profiler_8hpp_source.html
@@ -53,7 +53,7 @@
 </div><!--header-->
 <div class="contents">
 <a href="memory__profiler_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// You may obtain a copy of the License at</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">//     http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comme
 nt">//</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">// limitations under the License</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">#ifndef __PROCESS_MEMORY_PROFILER_HPP__</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#define __PROCESS_MEMORY_PROFILER_HPP__</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;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="preprocessor">#include &lt;<a class="code" href="future_8hpp.html">process/future.hpp</a>&gt;</span></div><div class="line"><a name="l00020"><
 /a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="3rdparty_2libprocess_2include_2process_2http_8hpp.html">process/http.hpp</a>&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="libprocess_2include_2process_2process_8hpp.html">process/process.hpp</a>&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;<a class="code" href="nothing_8hpp.html">stout/nothing.hpp</a>&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="option_8hpp.html">stout/option.hpp</a>&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="prep
 rocessor">#include &lt;<a class="code" href="path_8hpp.html">stout/path.hpp</a>&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="try_8hpp.html">stout/try.hpp</a>&gt;</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><a class="code" href="namespaceprocess.html">process</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;<span class="comment">// This class provides support for memory profiling and introspection</span></div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="comment">// using the capabilities of the jemalloc memory allocator.</span></div><div clas
 s="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment">// For user-facing documentation on how to use the facilities provided</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">// by this class, see `docs/memory-profiling.md` in the mesos repository.</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment">// For more details about the implementation, see the comments</span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">// in `memory_profiler.cpp`.</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classproc
 ess_1_1MemoryProfiler.html">   38</a></span>&#160;<span class="keyword">class </span><a class="code" href="classprocess_1_1MemoryProfiler.html">MemoryProfiler</a> : <span class="keyword">public</span> <a class="code" href="classprocess_1_1Process.html">Process</a>&lt;MemoryProfiler&gt;</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="l00041"></a><span class="lineno">   41</span>&#160;  <a class="code" href="classprocess_1_1MemoryProfiler.html#afe31588e5286cc4f9a617b19b184431a">MemoryProfiler</a>(<span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;std::string&gt;</a>&amp; authenticationRealm);</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classprocess_1_1MemoryProfiler.html#afe31a5aff47b57b2adedfb159a690b88">   42</a></span>&#
 160;  <span class="keyword">virtual</span> <a class="code" href="classprocess_1_1MemoryProfiler.html#afe31a5aff47b57b2adedfb159a690b88">~MemoryProfiler</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">protected</span>:</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classprocess_1_1MemoryProfiler.html#a51a6bf768a165ed59c410ce5c08b8838">initialize</a>();</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">private</span>:</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</spa
 n> std::string START_HELP();</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string STOP_HELP();</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string DOWNLOAD_RAW_HELP();</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string DOWNLOAD_TEXT_HELP();</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string DOWNLOAD_GRAPH_HELP();</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string STATISTICS_HELP();</div><div class="line"><a name
 ="l00054"></a><span class="lineno">   54</span>&#160;  <span class="keyword">static</span> <span class="keyword">const</span> std::string STATE_HELP();</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="comment">// HTTP endpoints.</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;  <span class="comment">// Refer to the `HELP()` messages for detailed documentation.</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="comment">// Starts memory profiling.</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> start(</div><div class="line"><a name="l00061"></a><span 
 class="lineno">   61</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; <a class="code" href="namespaceprocess_1_1http.html#ad8f400b5e54038df7e5662ec35da05fa">request</a>,</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&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="comment">// Stops memory profiling and dumps collected data.</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> stop(</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;      <spa
 n class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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="comment">// Returns a raw heap profile.</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> downloadRawProfile(</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="
 line"><a name="l00072"></a><span class="lineno">   72</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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="comment">// Generates and returns a symbolized heap profile.</span></div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> downloadSymbolizedProfile(</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;      <span class="keyword">const</span> <a cla
 ss="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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="comment">// Generates and returns a call graph in svg format.</span></div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> downloadGraphProfile(</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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="comment">// Shows memory allocation statistics.</span></div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> statistics(</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;      <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;      <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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">// Shows the configuration of the memory-profiler process.</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <a class="code" href="classprocess_1_1Future.html">Future&lt;http::Response&gt;</a> state(</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;    <span class="keyword">const</span> <a class="code" href="structprocess_1_1http_1_1Request.html">http::Request</a>&amp; request,</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="keyword">const</span> <a class="code" href="classOption.html">Option&lt;http::authentication::Principal&gt;</a>&amp;);</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">// Internal functions, helper classes, and data members.</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="comment">// Deactivates data collection and attempts to dump the raw profile to disk.</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <span class="keywordtype">void</span> stopAndGenerateRawProfile();</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="comment">// The authentication realm that the profiler&#39;s HTTP endpoints will be</span></div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;  <span class="comment">// installed into.</span></div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;  <a class="code" href="classOption.html">Option&lt;std::string&gt;</a> authenticationRealm;</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="comment">// Stores information about the current profiling run.</span></div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <span class="comment">// When the timer reaches zero, a dump of the collected</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;  <span class="comment">// data will be attempted.</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;  <span class="keyword">class </span>ProfilingRun</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">public</span>:</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    ProfilingRun(<a class="code" href=
 "classprocess_1_1MemoryProfiler.html">MemoryProfiler</a>*, time_t, <span class="keyword">const</span> <a class="code" href="classDuration.html">Duration</a>&amp;);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordtype">void</span> extend(<a class="code" href="classprocess_1_1MemoryProfiler.html">MemoryProfiler</a>*, <span class="keyword">const</span> <a class="code" href="classDuration.html">Duration</a>&amp;);</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;    time_t <a class="code" href="namespaceid.html">id</a>;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <a class="code" href="classprocess_1_1Timer.html">Timer</a> timer;</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;  <a class="code" href="classOption.html">Option&lt;ProfilingRun&gt;</a> currentRun;</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="comment">// Represents a file on the filesystem that is generated as the result</span></div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;  <span class="comment">// of running some action.</span></div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;  <span class="keyword">class </span>DiskArtifact</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">public</span>:</div><div class="line"><a name="l00123"></a><span
  class="lineno">  123</span>&#160;    <span class="keyword">static</span> <a class="code" href="classTry.html">Try&lt;DiskArtifact&gt;</a> <a class="code" href="namespacecgroups.html#a2ecc89636706df947027a4c3c2100fbe">create</a>(</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        <span class="keyword">const</span> std::string&amp; filename,</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        time_t timestamp,</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        std::function&lt;<a class="code" href="classTry.html">Try&lt;Nothing&gt;</a>(<span class="keyword">const</span> std::string&amp; outputPath)&gt; generator);</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="keyword">const</span> time_t getId() <span class="keyword">const</span>;<
 /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;    std::string getPath() <span class="keyword">const</span>;</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="comment">// Generates an error response if the file doesn&#39;t exist, or a download</span></div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="comment">// if it does.</span></div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <a class="code" href="structprocess_1_1http_1_1Response.html">http::Response</a> asHttp() <span class="keyword">const</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="keyword">private</span>:</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    DiskArtifact(<span class="keyword">const</span> std::string&amp; <a class="code" href="namespacepath.html">path</a>, time_t <span class="keywordtype">id</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;    std::string path;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    time_t id;</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;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  <span class="comment">// This profile is obtained by telling jemalloc to dump its stats to a file.</span></div><div class="line"><a name="l00144"
 ></a><span class="lineno">  144</span>&#160;  <a class="code" href="classTry.html">Try&lt;DiskArtifact&gt;</a> rawProfile = <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not yet generated&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;  <span class="comment">// These profiles are obtained by running `jeprof` on the `raw` profile.</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;  <a class="code" href="classTry.html">Try&lt;DiskArtifact&gt;</a> symbolizedProfile = <a class="code" href="classError.html">Error</a>(<span class="stringliteral">&quot;Not yet generated&quot;</span>);</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;  <a class="code" href="classTry.html">Try&lt;DiskArtifact&gt;</a> graphProfile = <a class="code" href="classError.ht
 ml">Error</a>(<span class="stringliteral">&quot;Not yet generated&quot;</span>);</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;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;} <span class="comment">// namespace process {</span></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;<span class="preprocessor">#endif // __PROCESS_MEMORY_PROFILER_HPP__</span></div><div class="ttc" id="namespacepath_html"><div class="ttname"><a href="namespacepath.html">path</a></div><div class="ttdef"><b>Definition:</b> path.hpp:26</div></div>
-<div class="ttc" id="classError_html"><div class="ttname"><a href="classError.html">Error</a></div><div class="ttdef"><b>Definition:</b> errorbase.hpp:35</div></div>
+<div class="ttc" id="classError_html"><div class="ttname"><a href="classError.html">Error</a></div><div class="ttdef"><b>Definition:</b> errorbase.hpp:36</div></div>
 <div class="ttc" id="classOption_html"><div class="ttname"><a href="classOption.html">Option&lt; std::string &gt;</a></div></div>
 <div class="ttc" id="namespaceprocess_1_1http_html_ad8f400b5e54038df7e5662ec35da05fa"><div class="ttname"><a href="namespaceprocess_1_1http.html#ad8f400b5e54038df7e5662ec35da05fa">process::http::request</a></div><div class="ttdeci">Future&lt; Response &gt; request(const Request &amp;request, bool streamedResponse=false)</div><div class="ttdoc">Asynchronously sends an HTTP request to the process and returns the HTTP response once the entire res...</div></div>
 <div class="ttc" id="classTry_html"><div class="ttname"><a href="classTry.html">Try&lt; DiskArtifact &gt;</a></div></div>