http://git-wip-us.apache.org/repos/asf/mesos-site/blob/cfbae833/content/api/latest/c++/annotated.html ---------------------------------------------------------------------- diff --git a/content/api/latest/c++/annotated.html b/content/api/latest/c++/annotated.html index 50b1bab..9e052a5 100644 --- a/content/api/latest/c++/annotated.html +++ b/content/api/latest/c++/annotated.html @@ -248,11 +248,12 @@ <tr id="row_17_4_11_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span id="arr_17_4_11_" class="arrow" onclick="toggleFolder('17_4_11_')">►</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemesos_1_1internal_1_1master.html" target="_self">master</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_11_0_" class="arrow" onclick="toggleFolder('17_4_11_0_')">►</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemesos_1_1internal_1_1master_1_1allocator.html" target="_self">allocator</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span id="arr_17_4_11_0_0_" class="arrow" onclick="toggleFolder('17_4_11_0_0_')">►</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemesos_1_1internal_1_1master_1_1allocator_1_1internal.html" target="_self">internal</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_0_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span id="arr_17_4_11_0_0_0_" class="arrow" onclick="toggleFolder('17_4_11_0_0_0_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html" target="_self">HierarchicalAllocatorProcess</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_0_0_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:112px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Framework.html" target="_self">Framework</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_0_0_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;"> </span><span id="arr_17_4_11_0_0_0_1_" class="arrow" onclick="toggleFolder('17_4_11_0_0_0_1_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html" target="_self">Slave</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_0_0_0_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:128px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance.html" target="_self">Maintenance</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_0_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1Metrics.html" target="_self">Metrics</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1FrameworkMetrics.html" target="_self">FrameworkMetrics</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span id="arr_17_4_11_0_0_1_" class="arrow" onclick="toggleFolder('17_4_11_0_0_1_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess.html" target="_self">HierarchicalAllocatorProcess</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:112px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Framework.html" target="_self">Framework</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_1_1_" class="even" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;"> </span><span id="arr_17_4_11_0_0_1_1_" class="arrow" onclick="toggleFolder('17_4_11_0_0_1_1_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave.html" target="_self">Slave</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_1_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:128px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1HierarchicalAllocatorProcess_1_1Slave_1_1Maintenance.html" target="_self">Maintenance</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_0_0_2_" class="even" style="display:none;"><td class="entry"><span style="width:96px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1internal_1_1Metrics.html" target="_self">Metrics</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_0_1_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span id="arr_17_4_11_0_1_" class="arrow" onclick="toggleFolder('17_4_11_0_1_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1allocator_1_1DRFSorter.html" target="_self">DRFSorter</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_0_1_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span id="arr_17_4_11_0_1_0_" class="arrow" onclick="toggleFolder('17_4_11_0_1_0_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1DRFSorter_1_1Node.html" target="_self">Node</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_0_1_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:112px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1allocator_1_1DRFSorter_1_1Node_1_1Allocation.html" target="_self">Allocation</a></td><td class="desc"></td></tr> @@ -284,23 +285,24 @@ <tr id="row_17_4_11_5_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1AdmitSlave.html" target="_self">AdmitSlave</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_6_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Flags.html" target="_self">Flags</a></td><td class="desc"></td></tr> <tr id="row_17_4_11_7_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Framework.html" target="_self">Framework</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_8_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Heartbeater.html" target="_self">Heartbeater</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_9_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1HttpConnection.html" target="_self">HttpConnection</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_10_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Machine.html" target="_self">Machine</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_11_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveGone.html" target="_self">MarkSlaveGone</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_12_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveReachable.html" target="_self">MarkSlaveReachable</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_13_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveUnreachable.html" target="_self">MarkSlaveUnreachable</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_14_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Master.html" target="_self">Master</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_15_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_11_15_" class="arrow" onclick="toggleFolder('17_4_11_15_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Metrics.html" target="_self">Metrics</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_15_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Metrics_1_1Frameworks.html" target="_self">Frameworks</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_16_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Prune.html" target="_self">Prune</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_17_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Registrar.html" target="_self">Registrar</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_18_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1RegistryOperation.html" target="_self">RegistryOperation</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_19_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1RemoveSlave.html" target="_self">RemoveSlave</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_20_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Role.html" target="_self">Role</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_21_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_11_21_" class="arrow" onclick="toggleFolder('17_4_11_21_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Slave.html" target="_self">Slave</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_21_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Slave_1_1ResourceProvider.html" target="_self">ResourceProvider</a></td><td class="desc"></td></tr> -<tr id="row_17_4_11_22_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1UpdateSlave.html" target="_self">UpdateSlave</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_8_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1FrameworkMetrics.html" target="_self">FrameworkMetrics</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_9_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Heartbeater.html" target="_self">Heartbeater</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_10_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1HttpConnection.html" target="_self">HttpConnection</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_11_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Machine.html" target="_self">Machine</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_12_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveGone.html" target="_self">MarkSlaveGone</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_13_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveReachable.html" target="_self">MarkSlaveReachable</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_14_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1MarkSlaveUnreachable.html" target="_self">MarkSlaveUnreachable</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_15_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Master.html" target="_self">Master</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_16_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_11_16_" class="arrow" onclick="toggleFolder('17_4_11_16_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Metrics.html" target="_self">Metrics</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_16_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Metrics_1_1Frameworks.html" target="_self">Frameworks</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_17_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Prune.html" target="_self">Prune</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_18_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1Registrar.html" target="_self">Registrar</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_19_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1RegistryOperation.html" target="_self">RegistryOperation</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_20_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1RemoveSlave.html" target="_self">RemoveSlave</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_21_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Role.html" target="_self">Role</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_22_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_11_22_" class="arrow" onclick="toggleFolder('17_4_11_22_')">►</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Slave.html" target="_self">Slave</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_22_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1master_1_1Slave_1_1ResourceProvider.html" target="_self">ResourceProvider</a></td><td class="desc"></td></tr> +<tr id="row_17_4_11_23_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="classmesos_1_1internal_1_1master_1_1UpdateSlave.html" target="_self">UpdateSlave</a></td><td class="desc"></td></tr> <tr id="row_17_4_12_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;"> </span><span id="arr_17_4_12_" class="arrow" onclick="toggleFolder('17_4_12_')">►</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemesos_1_1internal_1_1protobuf.html" target="_self">protobuf</a></td><td class="desc"></td></tr> <tr id="row_17_4_12_0_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;"> </span><span id="arr_17_4_12_0_" class="arrow" onclick="toggleFolder('17_4_12_0_')">►</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacemesos_1_1internal_1_1protobuf_1_1framework.html" target="_self">framework</a></td><td class="desc"></td></tr> <tr id="row_17_4_12_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structmesos_1_1internal_1_1protobuf_1_1framework_1_1Capabilities.html" target="_self">Capabilities</a></td><td class="desc"></td></tr>
http://git-wip-us.apache.org/repos/asf/mesos-site/blob/cfbae833/content/api/latest/c++/boundedhashmap_8hpp_source.html ---------------------------------------------------------------------- diff --git a/content/api/latest/c++/boundedhashmap_8hpp_source.html b/content/api/latest/c++/boundedhashmap_8hpp_source.html index 02bc62c..718766e 100644 --- a/content/api/latest/c++/boundedhashmap_8hpp_source.html +++ b/content/api/latest/c++/boundedhashmap_8hpp_source.html @@ -52,7 +52,7 @@ <div class="title">boundedhashmap.hpp</div> </div> </div><!--header--> <div class="contents"> -<a href="boundedhashmap_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> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <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> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <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> <span class="comment">/ /</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <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> <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> <span class="comment">// limitations under the License.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="p reprocessor">#ifndef __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#define __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <list></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <utility></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <<a class="code" href="stout_2include_2stout_2check_8hpp.html">stout/check.hpp</a>></span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include &l t;<a class="code" href="hashmap_8hpp.html">stout/hashmap.hpp</a>></span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <<a class="code" href="option_8hpp.html">stout/option.hpp</a>></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// A hashmap that contains a fixed number of entries at most. Entries</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// are evicted in FIFO order -- i.e., when the capacity of the map is</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// reached, the next insertion results in removing the oldest entry.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="c omment">// Updating an entry does not change insertion order.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Value></div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html"> 27</a></span> <span class="keyword">class </span><a class="code" href="classBoundedHashMap.html">BoundedHashMap</a></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a35ccd513de49c362d6a76e87e5923143"> 30</a></span>  <span class="keyword">typedef</span> std::pair<Key, Value> <a class="code" href="classBounded HashMap.html#a35ccd513de49c362d6a76e87e5923143">entry</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a8dccc532c99c340728c8f186230fb64e"> 31</a></span>  <span class="keyword">typedef</span> std::list<entry> <a class="code" href="classBoundedHashMap.html#a8dccc532c99c340728c8f186230fb64e">list</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a1c466b3b3f48efaea49e9d66903a7526"> 32</a></span>  <span class="keyword">typedef</span> <a class="code" href="classhashmap.html">hashmap<Key, typename list::iterator></a> <a class="code" href="classBoundedHashMap.html#a1c466b3b3f48efaea49e9d66903a7526">map</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed 09"> 34</a></span>  <a class="code" href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed09">BoundedHashMap</a>(<span class="keywordtype">size_t</span> capacity) : capacity_(capacity) {}</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// NOTE: We don't provide `operator[]`, unlike LinkedHashMap,</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// because it would be difficult to implement correctly for bounded</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// maps with zero capacity.</span></div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a54e903e8c96c78d913e74609d836ae67"> 39</a></span>  <span class="keywordtype">void</sp an> <span class="keyword">set</span>(<span class="keyword">const</span> Key& key, <span class="keyword">const</span> Value& value)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">if</span> (capacity_ == 0) {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (!keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span clas s="comment">// Insert a new list entry and get a "pointer" to its location.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typename</span> list::iterator iter =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  entries_.insert(entries_.end(), std::make_pair(key, value));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  keys_[key] = iter;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// If the map now exceeds its capacity, remove the oldest entry.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Note that removal from both st d::list and hashmap does not</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// invalidate iterators that reference other entries.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (keys_.size() > capacity_) {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">typename</span> list::iterator firstEntry = entries_.begin();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  keys_.erase(firstEntry->first);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  entries_.erase(firstEntry);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  CHECK(keys_.size() == capacity_);</di v><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  keys_[key]->second = value;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a852bfef273fe4f90653d271378a2cbec"> 67</a></span>  <a class="code" href="classOption.html">Option<Value></a> <span class="keyword">get</span>(<span class="keyword">const</span> Key& key) <span class="keyword">const</span></div><div class="line"><a name="l00068"></a><spa n class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a70ac620485764a32411dfd63cb ed12c5"> 75</a></span>  Value& <a class="code" href="classBoundedHashMap.html#a70ac620485764a32411dfd63cbed12c5">at</a>(<span class="keyword">const</span> Key& key)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#ad821f79df9d83977f91240c495257c5f"> 80</a></span>  <span class="keyword">const</span> Value& <a class="code" href="classBoundedHashMap.html#ad821f79df9d83977f91240c495257c5f">at</a>(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span></div><div class ="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a301ca7659ecbb2b5e054b00de4973e8c"> 85</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classBoundedHashMap.html#a301ca7659ecbb2b5e054b00de4973e8c">contains</a>(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a0d549fc5e940b2117b65083fc796f035"> 90</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="classBoundedHashMap.html#a0d549fc5e940b2117b65083fc796f035">erase</a>(<span class="keyword">const</span> Key& key)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</d iv><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">typename</span> list::iterator entry = keys_[key];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  keys_.erase(key);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  entries_.erase(entry);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div cl ass="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// Returns the keys in the map in insertion order.</span></div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#ab68b4c5ea8887bff0b68853223b130f3"> 103</a></span>  std::list<Key> <a class="code" href="classBoundedHashMap.html#ab68b4c5ea8887bff0b68853223b130f3">keys</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::list<Key> result;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> entry& entry, entries_) {</div><div clas s="line"><a name="l00108"></a><span class="lineno"> 108</span>  result.push_back(entry.first);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Returns the values in the map in insertion order.</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a3230dcf13d6b5099fe3aba148573e7a9"> 115</a></span>  std::list<Value> <a class="code" href="classBoundedHashMap.html#a323 0dcf13d6b5099fe3aba148573e7a9">values</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  std::list<Value> result;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> entry& entry, entries_) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  result.push_back(entry.second);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow" >return</span> result;</div><div class="line"><a name="l00124"></a><span >class="lineno"> 124</span>  }</div><div class="line"><a >name="l00125"></a><span class="lineno"> 125</span> </div><div >class="line"><a name="l00126"></a><span class="lineno"><a class="line" >href="classBoundedHashMap.html#aa0c84c4c9636449ab35ef13ecce36266"> >126</a></span>  <span class="keywordtype">size_t</span> <a class="code" >href="classBoundedHashMap.html#aa0c84c4c9636449ab35ef13ecce36266">size</a>()<span > class="keyword"> const</span></div><div class="line"><a >name="l00127"></a><span class="lineno"> 127</span> <span >class="keyword"> </span>{</div><div class="line"><a name="l00128"></a><span >class="lineno"> 128</span>  <span class="keywordflow">return</span> >keys_.size();</div><div class="line"><a name="l00129"></a><span >class="lineno"> 129</span>  }</div><div class="line"><a >name="l00130"></a><span class="lineno"> 130</span> </div><div >class="line"><a name="l001 31"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#aa628a0c249203758e056473698c53ed6"> 131</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classBoundedHashMap.html#aa628a0c249203758e056473698c53ed6">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> keys_.empty();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#aed7138e6b983ced56b126a5bc43e37c8"> 136</a></span>  <span class="keywordtype">void</span> <a class="code" href="classBoundedHashMap.html#aed7138e6b 983ced56b126a5bc43e37c8">clear</a>()</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  entries_.clear();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  keys_.clear();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Support for iteration; this allows using `foreachpair` and</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// related constructs. Note that these iterate over the map in</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// insertion order.</span></div><di v class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a4cb91ebc0803532a11b448886a8c2dce"> 145</a></span>  <span class="keyword">typename</span> list::iterator <a class="code" href="classBoundedHashMap.html#a4cb91ebc0803532a11b448886a8c2dce">begin</a>() { <span class="keywordflow">return</span> entries_.begin(); }</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a8ec9da0f54d5b063b34e0fb33485cc8a"> 146</a></span>  <span class="keyword">typename</span> list::iterator <a class="code" href="classBoundedHashMap.html#a8ec9da0f54d5b063b34e0fb33485cc8a">end</a>() { <span class="keywordflow">return</span> entries_.end(); }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a9a07a63071611db41410f0a707e16575"> 148</a></span>&# 160; <span class="keyword">typename</span> list::const_iterator <a class="code" href="classBoundedHashMap.html#a9a07a63071611db41410f0a707e16575">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> entries_.cbegin(); }</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a7d90d9668967c2ed885cc6a6e72d558c"> 149</a></span>  <span class="keyword">typename</span> list::const_iterator <a class="code" href="classBoundedHashMap.html#a7d90d9668967c2ed885cc6a6e72d558c">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> entries_.cend(); }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</spa n> <span class="keywordtype">size_t</span> capacity_;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  list entries_; <span class="comment">// Key-value pairs ordered by insertion order.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  map keys_; <span class="comment">// Map from key to "pointer" to key's location in list.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> };</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">#endif // __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="ttc" id="classBoundedHashMap_html_a311e29319ba27184ab59b5674312ed09"><div class="ttname"><a href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed09">BoundedHashMap::BoundedHashMap</a></div><div class="ttdeci">BoundedHash Map(size_t capacity)</div><div class="ttdef"><b>Definition:</b> boundedhashmap.hpp:34</div></div> +<a href="boundedhashmap_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> <span class="comment">// Licensed under the Apache License, Version 2.0 (the "License");</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <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> <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> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <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> <span class="comment">/ /</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <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> <span class="comment">// distributed under the License is distributed on an "AS IS" BASIS,</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <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> <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> <span class="comment">// limitations under the License.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="p reprocessor">#ifndef __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#define __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include <list></span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include <utility></span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include <<a class="code" href="stout_2include_2stout_2check_8hpp.html">stout/check.hpp</a>></span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include &l t;<a class="code" href="hashmap_8hpp.html">stout/hashmap.hpp</a>></span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include <<a class="code" href="option_8hpp.html">stout/option.hpp</a>></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// A hashmap that contains a fixed number of entries at most. Entries</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// are evicted in FIFO order -- i.e., when the capacity of the map is</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// reached, the next insertion results in removing the oldest entry.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="c omment">// Updating an entry does not change insertion order.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> Value></div><div class="line"><a name="l00027"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html"> 27</a></span> <span class="keyword">class </span><a class="code" href="classBoundedHashMap.html">BoundedHashMap</a></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> {</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a35ccd513de49c362d6a76e87e5923143"> 30</a></span>  <span class="keyword">typedef</span> std::pair<Key, Value> <a class="code" href="classBounded HashMap.html#a35ccd513de49c362d6a76e87e5923143">entry</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a8dccc532c99c340728c8f186230fb64e"> 31</a></span>  <span class="keyword">typedef</span> std::list<entry> <a class="code" href="classBoundedHashMap.html#a8dccc532c99c340728c8f186230fb64e">list</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a1c466b3b3f48efaea49e9d66903a7526"> 32</a></span>  <span class="keyword">typedef</span> <a class="code" href="classhashmap.html">hashmap<Key, typename list::iterator></a> <a class="code" href="classBoundedHashMap.html#a1c466b3b3f48efaea49e9d66903a7526">map</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed 09"> 34</a></span>  <a class="code" href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed09">BoundedHashMap</a>(<span class="keywordtype">size_t</span> capacity) : capacity_(capacity) {}</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> </div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="comment">// NOTE: We don't provide `operator[]`, unlike LinkedHashMap,</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// because it would be difficult to implement correctly for bounded</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="comment">// maps with zero capacity.</span></div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a54e903e8c96c78d913e74609d836ae67"> 39</a></span>  <span class="keywordtype">void</sp an> <span class="keyword">set</span>(<span class="keyword">const</span> Key& key, <span class="keyword">const</span> Value& value)</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  {</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">if</span> (capacity_ == 0) {</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  }</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (!keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span clas s="comment">// Insert a new list entry and get a "pointer" to its location.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">typename</span> list::iterator iter =</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  entries_.insert(entries_.end(), std::make_pair(key, value));</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  keys_[key] = iter;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <span class="comment">// If the map now exceeds its capacity, remove the oldest entry.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="comment">// Note that removal from both st d::list and hashmap does not</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="comment">// invalidate iterators that reference other entries.</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span> (keys_.size() > capacity_) {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keyword">typename</span> list::iterator firstEntry = entries_.begin();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  keys_.erase(firstEntry->first);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  entries_.erase(firstEntry);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  CHECK(keys_.size() == capacity_);</di v><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  } <span class="keywordflow">else</span> {</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  keys_[key]->second = value;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a852bfef273fe4f90653d271378a2cbec"> 67</a></span>  <a class="code" href="classOption.html">Option<Value></a> <span class="keyword">get</span>(<span class="keyword">const</span> Key& key) <span class="keyword">const</span></div><div class="line"><a name="l00068"></a><spa n class="lineno"> 68</span>  {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">return</span> <a class="code" href="structNone.html">None</a>();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a70ac620485764a32411dfd63cb ed12c5"> 75</a></span>  Value& <a class="code" href="classBoundedHashMap.html#a70ac620485764a32411dfd63cbed12c5">at</a>(<span class="keyword">const</span> Key& key)</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#ad821f79df9d83977f91240c495257c5f"> 80</a></span>  <span class="keyword">const</span> Value& <a class="code" href="classBoundedHashMap.html#ad821f79df9d83977f91240c495257c5f">at</a>(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span></div><div class ="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> keys_.at(key)->second;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a301ca7659ecbb2b5e054b00de4973e8c"> 85</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classBoundedHashMap.html#a301ca7659ecbb2b5e054b00de4973e8c">contains</a>(<span class="keyword">const</span> Key& key)<span class="keyword"> const</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="keywordflow">return</span> keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a0d549fc5e940b2117b65083fc796f035"> 90</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="classBoundedHashMap.html#a0d549fc5e940b2117b65083fc796f035">erase</a>(<span class="keyword">const</span> Key& key)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (keys_.<a class="code" href="classhashmap.html#ac142b3f8b73c76d5d4545bbd299007e5">contains</a>(key)) {</d iv><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keyword">typename</span> list::iterator entry = keys_[key];</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  keys_.erase(key);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  entries_.erase(entry);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div cl ass="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// Returns the keys in the map in insertion order.</span></div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#ab68b4c5ea8887bff0b68853223b130f3"> 103</a></span>  std::list<Key> <a class="code" href="classBoundedHashMap.html#ab68b4c5ea8887bff0b68853223b130f3">keys</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::list<Key> result;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> entry& entry, entries_) {</div><div clas s="line"><a name="l00108"></a><span class="lineno"> 108</span>  result.push_back(entry.first);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">return</span> result;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="comment">// Returns the values in the map in insertion order.</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a3230dcf13d6b5099fe3aba148573e7a9"> 115</a></span>  std::list<Value> <a class="code" href="classBoundedHashMap.html#a323 0dcf13d6b5099fe3aba148573e7a9">values</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  std::list<Value> result;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span> </div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">foreach</span> (<span class="keyword">const</span> entry& entry, entries_) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  result.push_back(entry.second);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  }</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow" >return</span> result;</div><div class="line"><a name="l00124"></a><span >class="lineno"> 124</span>  }</div><div class="line"><a >name="l00125"></a><span class="lineno"> 125</span> </div><div >class="line"><a name="l00126"></a><span class="lineno"><a class="line" >href="classBoundedHashMap.html#aa0c84c4c9636449ab35ef13ecce36266"> >126</a></span>  <span class="keywordtype">size_t</span> <a class="code" >href="classBoundedHashMap.html#aa0c84c4c9636449ab35ef13ecce36266">size</a>()<span > class="keyword"> const</span></div><div class="line"><a >name="l00127"></a><span class="lineno"> 127</span> <span >class="keyword"> </span>{</div><div class="line"><a name="l00128"></a><span >class="lineno"> 128</span>  <span class="keywordflow">return</span> >keys_.size();</div><div class="line"><a name="l00129"></a><span >class="lineno"> 129</span>  }</div><div class="line"><a >name="l00130"></a><span class="lineno"> 130</span> </div><div >class="line"><a name="l001 31"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#aa628a0c249203758e056473698c53ed6"> 131</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classBoundedHashMap.html#aa628a0c249203758e056473698c53ed6">empty</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">return</span> keys_.empty();</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#aed7138e6b983ced56b126a5bc43e37c8"> 136</a></span>  <span class="keywordtype">void</span> <a class="code" href="classBoundedHashMap.html#aed7138e6b 983ced56b126a5bc43e37c8">clear</a>()</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  entries_.clear();</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  keys_.clear();</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// Support for iteration; this allows using `foreachpair` and</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// related constructs. Note that these iterate over the map in</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// insertion order.</span></div><di v class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a4cb91ebc0803532a11b448886a8c2dce"> 145</a></span>  <span class="keyword">typename</span> list::iterator <a class="code" href="classBoundedHashMap.html#a4cb91ebc0803532a11b448886a8c2dce">begin</a>() { <span class="keywordflow">return</span> entries_.begin(); }</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a8ec9da0f54d5b063b34e0fb33485cc8a"> 146</a></span>  <span class="keyword">typename</span> list::iterator <a class="code" href="classBoundedHashMap.html#a8ec9da0f54d5b063b34e0fb33485cc8a">end</a>() { <span class="keywordflow">return</span> entries_.end(); }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a9a07a63071611db41410f0a707e16575"> 148</a></span>&# 160; <span class="keyword">typename</span> list::const_iterator <a class="code" href="classBoundedHashMap.html#a9a07a63071611db41410f0a707e16575">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> entries_.cbegin(); }</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classBoundedHashMap.html#a7d90d9668967c2ed885cc6a6e72d558c"> 149</a></span>  <span class="keyword">typename</span> list::const_iterator <a class="code" href="classBoundedHashMap.html#a7d90d9668967c2ed885cc6a6e72d558c">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> entries_.cend(); }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordtype">size_t </span> capacity_;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  list entries_; <span class="comment">// Key-value pairs ordered by insertion order.</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  map keys_; <span class="comment">// Map from key to "pointer" to key's location in list.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> };</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="preprocessor">#endif // __STOUT_BOUNDEDHASHMAP_HPP__</span></div><div class="ttc" id="classBoundedHashMap_html_a311e29319ba27184ab59b5674312ed09"><div class="ttname"><a href="classBoundedHashMap.html#a311e29319ba27184ab59b5674312ed09">BoundedHashMap::BoundedHashMap</a></div><div class="ttdeci">BoundedHashMap(size_t capacity)</div><div clas s="ttdef"><b>Definition:</b> boundedhashmap.hpp:34</div></div> <div class="ttc" id="classOption_html"><div class="ttname"><a href="classOption.html">Option</a></div><div class="ttdef"><b>Definition:</b> option.hpp:28</div></div> <div class="ttc" id="classBoundedHashMap_html_a35ccd513de49c362d6a76e87e5923143"><div class="ttname"><a href="classBoundedHashMap.html#a35ccd513de49c362d6a76e87e5923143">BoundedHashMap::entry</a></div><div class="ttdeci">std::pair< Key, Value > entry</div><div class="ttdef"><b>Definition:</b> boundedhashmap.hpp:30</div></div> <div class="ttc" id="classBoundedHashMap_html_a9a07a63071611db41410f0a707e16575"><div class="ttname"><a href="classBoundedHashMap.html#a9a07a63071611db41410f0a707e16575">BoundedHashMap::begin</a></div><div class="ttdeci">list::const_iterator begin() const </div><div class="ttdef"><b>Definition:</b> boundedhashmap.hpp:148</div></div>
