-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy patharray__set_8h_source.html
135 lines (133 loc) · 91.5 KB
/
array__set_8h_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>Clause: src/hat-trie/include/tsl/array-hash/array_set.h 源文件</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Clause
 <span id="projectnumber">1.0</span>
</div>
<div id="projectbrief">Chatopera Language Understanding Service.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.8.11 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'搜索');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>首页</span></a></li>
<li><a href="pages.html"><span>相关页面</span></a></li>
<li><a href="modules.html"><span>模块</span></a></li>
<li><a href="namespaces.html"><span>命名空间</span></a></li>
<li><a href="annotated.html"><span>类</span></a></li>
<li class="current"><a href="files.html"><span>文件</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="搜索" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>文件列表</span></a></li>
</ul>
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_8de35a112afe11bbc1e373705286d1f4.html">hat-trie</a></li><li class="navelem"><a class="el" href="dir_bf40197352127bca97b32a70eddad7d5.html">include</a></li><li class="navelem"><a class="el" href="dir_d63c2e6fb2c19bee7e35bf7e1c5514f8.html">tsl</a></li><li class="navelem"><a class="el" href="dir_e9472025a567d0059ce6cc76b1c2367c.html">array-hash</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">array_set.h</div> </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifndef TSL_ARRAY_SET_H</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#define TSL_ARRAY_SET_H</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <cstddef></span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <cstdint></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="preprocessor">#include <initializer_list></span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#include <iterator></span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <string></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <utility></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "array_hash.h"</span></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="keyword">namespace </span><a class="code" href="namespacetsl.html">tsl</a> {</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword">template</span><<span class="keyword">class </span>CharT,</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">class </span>Hash = <a class="code" href="structtsl_1_1ah_1_1str__hash.html">tsl::ah::str_hash<CharT></a>,</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keyword">class </span>KeyEqual = <a class="code" href="structtsl_1_1ah_1_1str__equal.html">tsl::ah::str_equal<CharT></a>,</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordtype">bool</span> StoreNullTerminator = <span class="keyword">true</span>,</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keyword">class </span>KeySizeT = std::uint16_t,</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keyword">class </span>IndexSizeT = std::uint32_t,</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keyword">class </span>GrowthPolicy = <a class="code" href="classtsl_1_1ah_1_1power__of__two__growth__policy.html">tsl::ah::power_of_two_growth_policy<2></a>></div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html"> 67</a></span> <span class="keyword">class </span><a class="code" href="classtsl_1_1array__set.html">array_set</a> {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keyword">template</span><<span class="keyword">typename</span> U></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keyword">using</span> <a class="code" href="structtsl_1_1detail__array__hash_1_1is__iterator.html">is_iterator</a> = <a class="code" href="structtsl_1_1detail__array__hash_1_1is__iterator.html">tsl::detail_array_hash::is_iterator<U></a>;</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="keyword">using</span> <a class="code" href="classtsl_1_1detail__array__hash_1_1array__hash.html">ht</a> = <a class="code" href="classtsl_1_1detail__array__hash_1_1array__hash.html">tsl::detail_array_hash::array_hash</a><CharT, void, Hash, KeyEqual, StoreNullTerminator, </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  KeySizeT, IndexSizeT, GrowthPolicy>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keyword">using</span> char_type = <span class="keyword">typename</span> ht::char_type;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">using</span> key_size_type = <span class="keyword">typename</span> ht::key_size_type;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keyword">using</span> index_size_type = <span class="keyword">typename</span> ht::index_size_type;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keyword">using</span> size_type = <span class="keyword">typename</span> ht::size_type;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  <span class="keyword">using</span> hasher = <span class="keyword">typename</span> ht::hasher;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keyword">using</span> key_equal = <span class="keyword">typename</span> ht::key_equal;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keyword">using</span> iterator = <span class="keyword">typename</span> ht::iterator;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keyword">using</span> const_iterator = <span class="keyword">typename</span> ht::const_iterator;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  </div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>(): <a class="code" href="classtsl_1_1array__set.html">array_set</a>(ht::DEFAULT_INIT_BUCKET_COUNT) {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keyword">explicit</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a>(size_type bucket_count,</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keyword">const</span> Hash& hash = Hash()): m_ht(bucket_count, hash, ht::DEFAULT_MAX_LOAD_FACTOR) </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</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>  </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  template<class InputIt, typename std::enable_if<is_iterator<InputIt>::value>::type* = <span class="keyword">nullptr</span>></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>(InputIt first, InputIt last,</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT,</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">const</span> Hash& hash = Hash()): <a class="code" href="classtsl_1_1array__set.html">array_set</a>(bucket_count, hash)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  insert(first, last);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  }</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 class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>(std::initializer_list<std::basic_string_view<CharT>> init,</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT,</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keyword">const</span> Hash& hash = Hash()): <a class="code" href="classtsl_1_1array__set.html">array_set</a>(bucket_count, hash)</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>  insert(init);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  }</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor">#else </span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>(std::initializer_list<const CharT*> init,</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  size_type bucket_count = ht::DEFAULT_INIT_BUCKET_COUNT,</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keyword">const</span> Hash& hash = Hash()): <a class="code" href="classtsl_1_1array__set.html">array_set</a>(bucket_count, hash)</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>  insert(init);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </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> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>& operator=(std::initializer_list<std::basic_string_view<CharT>> ilist) {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  clear();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  reserve(ilist.size());</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  insert(ilist);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a>& operator=(std::initializer_list<const CharT*> ilist) {</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  clear();</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  reserve(ilist.size());</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  insert(ilist);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> *<span class="keyword">this</span>;</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> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">/*</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * Iterators</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> */</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  iterator begin() noexcept { <span class="keywordflow">return</span> m_ht.begin(); }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  const_iterator begin() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.begin(); }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  const_iterator cbegin() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.cbegin(); }</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  iterator end() noexcept { <span class="keywordflow">return</span> m_ht.end(); }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  const_iterator end() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.end(); }</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  const_iterator cend() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.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>  </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">/*</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> * Capacity</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"> */</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordtype">bool</span> empty() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.empty(); }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  size_type size() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.size(); }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  size_type max_size() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.max_size(); }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  size_type max_key_size() <span class="keyword">const</span> noexcept { <span class="keywordflow">return</span> m_ht.max_key_size(); }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordtype">void</span> shrink_to_fit() { m_ht.shrink_to_fit(); }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  </div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="comment">/*</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="comment"> * Modifiers</span></div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="comment"> */</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordtype">void</span> clear() noexcept { m_ht.clear(); }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW</span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  std::pair<iterator, bool> insert(<span class="keyword">const</span> std::basic_string_view<CharT>& key) {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">return</span> m_ht.emplace(key.data(), key.size()); </div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  }</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  std::pair<iterator, bool> insert(<span class="keyword">const</span> CharT* key) {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> m_ht.emplace(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  std::pair<iterator, bool> insert(<span class="keyword">const</span> std::basic_string<CharT>& key) {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">return</span> m_ht.emplace(key.data(), key.size()); </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  }</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  std::pair<iterator, bool> insert_ks(<span class="keyword">const</span> CharT* key, size_type key_size) {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">return</span> m_ht.emplace(key, key_size);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  template<class InputIt, typename std::enable_if<is_iterator<InputIt>::value>::type* = <span class="keyword">nullptr</span>></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordtype">void</span> insert(InputIt first, InputIt last) {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">if</span>(std::is_base_of<std::forward_iterator_tag, </div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keyword">typename</span> std::iterator_traits<InputIt>::iterator_category>::value) </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keyword">const</span> <span class="keyword">auto</span> nb_elements_insert = std::distance(first, last);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">const</span> std::size_t nb_free_buckets = std::size_t(<span class="keywordtype">float</span>(bucket_count())*max_load_factor()) - size();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  </div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">if</span>(nb_elements_insert > 0 && nb_free_buckets < std::size_t(nb_elements_insert)) {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  reserve(size() + std::size_t(nb_elements_insert));</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  }</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = first; it != last; ++it) {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  insert(*it);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  </div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordtype">void</span> insert(std::initializer_list<std::basic_string_view<CharT>> ilist) {</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  insert(ilist.begin(), ilist.end());</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordtype">void</span> insert(std::initializer_list<const CharT*> ilist) {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  insert(ilist.begin(), ilist.end());</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  </div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  std::pair<iterator, bool> <a class="code" href="classtsl_1_1array__set.html#a6b9fec6ffae423d9ef4e7b27d5921ad5">emplace</a>(<span class="keyword">const</span> std::basic_string_view<CharT>& key) {</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> m_ht.emplace(key.data(), key.size());</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  }</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a6b9fec6ffae423d9ef4e7b27d5921ad5"> 231</a></span>  std::pair<iterator, bool> <a class="code" href="classtsl_1_1array__set.html#a6b9fec6ffae423d9ef4e7b27d5921ad5">emplace</a>(<span class="keyword">const</span> CharT* key) {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> m_ht.emplace(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a129ddc4a1474af101fc78c776df5bc8e"> 238</a></span>  std::pair<iterator, bool> <a class="code" href="classtsl_1_1array__set.html#a129ddc4a1474af101fc78c776df5bc8e">emplace</a>(<span class="keyword">const</span> std::basic_string<CharT>& key) {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">return</span> m_ht.emplace(key.data(), key.size());</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  }</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a23ff170ff18e05ead4b03b47ac814d60"> 245</a></span>  std::pair<iterator, bool> <a class="code" href="classtsl_1_1array__set.html#a23ff170ff18e05ead4b03b47ac814d60">emplace_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size) {</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> m_ht.emplace(key, key_size);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  } </div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  iterator erase(const_iterator pos) { <span class="keywordflow">return</span> m_ht.erase(pos); }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  iterator erase(const_iterator first, const_iterator last) { <span class="keywordflow">return</span> m_ht.erase(first, last); }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  size_type erase(<span class="keyword">const</span> std::basic_string_view<CharT>& key) {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keywordflow">return</span> m_ht.erase(key.data(), key.size());</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  }</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="preprocessor">#else </span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  size_type erase(<span class="keyword">const</span> CharT* key) {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">return</span> m_ht.erase(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  }</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  </div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  size_type erase(<span class="keyword">const</span> std::basic_string<CharT>& key) {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">return</span> m_ht.erase(key.data(), key.size());</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  size_type erase_ks(<span class="keyword">const</span> CharT* key, size_type key_size) {</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> m_ht.erase(key, key_size);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  size_type erase(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> m_ht.erase(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="preprocessor">#else </span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a9a7435a19c0c00e268f31b1fc60a53ec"> 284</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#a9a7435a19c0c00e268f31b1fc60a53ec">erase</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">return</span> m_ht.erase(key, std::char_traits<CharT>::length(key), precalculated_hash);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  </div><div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a456654cbc30dcf988c1e35731dadf675"> 291</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#a456654cbc30dcf988c1e35731dadf675">erase</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">return</span> m_ht.erase(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a88c5a16ccaff3992726f9f8a17cd9dc0"> 299</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#a88c5a16ccaff3992726f9f8a17cd9dc0">erase_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash) {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">return</span> m_ht.erase(key, key_size, precalculated_hash);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keywordtype">void</span> swap(<a class="code" href="classtsl_1_1array__set.html">array_set</a>& other) { other.m_ht.swap(m_ht); }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  </div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  </div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  </div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="comment">/*</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> <span class="comment"> * Lookup</span></div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> <span class="comment"> */</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  size_type count(<span class="keyword">const</span> std::basic_string_view<CharT>& key)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.count(key.data(), key.size()); }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  size_type count(<span class="keyword">const</span> CharT* key)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.count(key, std::char_traits<CharT>::length(key)); }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  size_type count(<span class="keyword">const</span> std::basic_string<CharT>& key)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.count(key.data(), key.size()); }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  size_type count_ks(<span class="keyword">const</span> CharT* key, size_type key_size)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.count(key, key_size); }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  size_type count(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{ </div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> m_ht.count(key.data(), key.size(), precalculated_hash); </div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#af05a992f6997b5521b3e8b000bef531b"> 333</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#af05a992f6997b5521b3e8b000bef531b">count</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash)<span class="keyword"> const </span>{ </div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">return</span> m_ht.count(key, std::char_traits<CharT>::length(key), precalculated_hash); </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#ab6854b6668d7ee1ec3f70c4af7970dc2"> 340</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#ab6854b6668d7ee1ec3f70c4af7970dc2">count</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{ </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keywordflow">return</span> m_ht.count(key.data(), key.size(), precalculated_hash); </div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a1c12765abb2a8a000f8ded7e72b8719a"> 348</a></span>  size_type <a class="code" href="classtsl_1_1array__set.html#a1c12765abb2a8a000f8ded7e72b8719a">count_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash)<span class="keyword"> const </span>{ </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">return</span> m_ht.count(key, key_size, precalculated_hash); </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  }</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  </div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  </div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  iterator find(<span class="keyword">const</span> std::basic_string_view<CharT>& key) {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size());</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  </div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  const_iterator find(<span class="keyword">const</span> std::basic_string_view<CharT>& key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size());</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  iterator find(<span class="keyword">const</span> CharT* key) {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> m_ht.find(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  const_iterator find(<span class="keyword">const</span> CharT* key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">return</span> m_ht.find(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  }</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  iterator find(<span class="keyword">const</span> std::basic_string<CharT>& key) {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size());</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  const_iterator find(<span class="keyword">const</span> std::basic_string<CharT>& key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size());</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  iterator find_ks(<span class="keyword">const</span> CharT* key, size_type key_size) {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">return</span> m_ht.find(key, key_size);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  const_iterator find_ks(<span class="keyword">const</span> CharT* key, size_type key_size)<span class="keyword"> const </span>{</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> m_ht.find(key, key_size);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  iterator find(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  </div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  const_iterator find(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> </div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a8a23cd1f677f4459628c18bbd013cc62"> 407</a></span>  iterator <a class="code" href="classtsl_1_1array__set.html#a8a23cd1f677f4459628c18bbd013cc62">find</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">return</span> m_ht.find(key, std::char_traits<CharT>::length(key), precalculated_hash);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  }</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a3e5ed607b5d0c4f2cc78201e96ee6e19"> 414</a></span>  const_iterator <a class="code" href="classtsl_1_1array__set.html#a3e5ed607b5d0c4f2cc78201e96ee6e19">find</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">return</span> m_ht.find(key, std::char_traits<CharT>::length(key), precalculated_hash);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  </div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a98f29bdaded3ee80ae64cc7a6a8437cb"> 421</a></span>  iterator <a class="code" href="classtsl_1_1array__set.html#a98f29bdaded3ee80ae64cc7a6a8437cb">find</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  </div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a71b32a679ea6bba077c7b8aebf96fd49"> 428</a></span>  const_iterator <a class="code" href="classtsl_1_1array__set.html#a71b32a679ea6bba077c7b8aebf96fd49">find</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <span class="keywordflow">return</span> m_ht.find(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a06409587141031ede201d45c501a2863"> 436</a></span>  iterator <a class="code" href="classtsl_1_1array__set.html#a06409587141031ede201d45c501a2863">find_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash) {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> m_ht.find(key, key_size, precalculated_hash);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  </div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a121e9efcf5760be5de4a2f2271fe33d0"> 443</a></span>  const_iterator <a class="code" href="classtsl_1_1array__set.html#a121e9efcf5760be5de4a2f2271fe33d0">find_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> m_ht.find(key, key_size, precalculated_hash);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> std::basic_string_view<CharT>& key) {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size());</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  }</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> std::basic_string_view<CharT>& key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size());</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> CharT* key) {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  </div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> CharT* key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, std::char_traits<CharT>::length(key));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> std::basic_string<CharT>& key) {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size());</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> std::basic_string<CharT>& key)<span class="keyword"> const </span>{</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size());</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  std::pair<iterator, iterator> equal_range_ks(<span class="keyword">const</span> CharT* key, size_type key_size) {</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, key_size);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  }</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  std::pair<const_iterator, const_iterator> equal_range_ks(<span class="keyword">const</span> CharT* key, size_type key_size)<span class="keyword"> const </span>{</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, key_size);</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  </div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  </div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <span class="preprocessor">#ifdef TSL_AH_HAS_STRING_VIEW </span></div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  std::pair<iterator, iterator> equal_range(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  std::pair<const_iterator, const_iterator> equal_range(<span class="keyword">const</span> std::basic_string_view<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00502"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#aea0d39669b7b0bf429768fdf7a0df7ce"> 502</a></span>  std::pair<iterator, iterator> <a class="code" href="classtsl_1_1array__set.html#aea0d39669b7b0bf429768fdf7a0df7ce">equal_range</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, std::char_traits<CharT>::length(key), precalculated_hash);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  </div><div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a8a9ca6d5d7cd7d52c518cf3496cb7220"> 509</a></span>  std::pair<const_iterator, const_iterator> <a class="code" href="classtsl_1_1array__set.html#a8a9ca6d5d7cd7d52c518cf3496cb7220">equal_range</a>(<span class="keyword">const</span> CharT* key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, std::char_traits<CharT>::length(key), precalculated_hash);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  </div><div class="line"><a name="l00516"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a9a8d93c03f778266db8e9b94fc84c393"> 516</a></span>  std::pair<iterator, iterator> <a class="code" href="classtsl_1_1array__set.html#a9a8d93c03f778266db8e9b94fc84c393">equal_range</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash) {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  </div><div class="line"><a name="l00523"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#ab05c34fcb1708a13ff9d5d2d9b274040"> 523</a></span>  std::pair<const_iterator, const_iterator> <a class="code" href="classtsl_1_1array__set.html#ab05c34fcb1708a13ff9d5d2d9b274040">equal_range</a>(<span class="keyword">const</span> std::basic_string<CharT>& key, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="keywordflow">return</span> m_ht.equal_range(key.data(), key.size(), precalculated_hash);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  }</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <span class="preprocessor">#endif </span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div><div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a6245af3565e8ec81d22711c1b2f7f02f"> 531</a></span>  std::pair<iterator, iterator> <a class="code" href="classtsl_1_1array__set.html#a6245af3565e8ec81d22711c1b2f7f02f">equal_range_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash) {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, key_size, precalculated_hash);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  </div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a933905961969a3ad60ffdc807be32912"> 538</a></span>  std::pair<const_iterator, const_iterator> <a class="code" href="classtsl_1_1array__set.html#a933905961969a3ad60ffdc807be32912">equal_range_ks</a>(<span class="keyword">const</span> CharT* key, size_type key_size, std::size_t precalculated_hash)<span class="keyword"> const </span>{</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">return</span> m_ht.equal_range(key, key_size, precalculated_hash);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  </div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="comment">/*</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment"> * Bucket interface </span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="comment"> */</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  size_type bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.bucket_count(); }</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  size_type max_bucket_count()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.max_bucket_count(); }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="comment">/*</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="comment"> * Hash policy </span></div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="comment"> */</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordtype">float</span> load_factor()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.load_factor(); }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordtype">float</span> max_load_factor()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.max_load_factor(); }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordtype">void</span> max_load_factor(<span class="keywordtype">float</span> ml) { m_ht.max_load_factor(ml); }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  </div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordtype">void</span> rehash(size_type count) { m_ht.rehash(count); }</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="keywordtype">void</span> reserve(size_type count) { m_ht.reserve(count); } </div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  </div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  </div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="comment">/*</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="comment"> * Observers</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> <span class="comment"> */</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  hasher hash_function()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.hash_function(); }</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  key_equal key_eq()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_ht.key_eq(); } </div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  </div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  </div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="comment">/*</span></div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> <span class="comment"> * Other</span></div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> <span class="comment"> */</span></div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#a11427c6507c91777901674ebc77e3ad6"> 575</a></span>  iterator <a class="code" href="classtsl_1_1array__set.html#a11427c6507c91777901674ebc77e3ad6">mutable_iterator</a>(const_iterator it) noexcept { <span class="keywordflow">return</span> m_ht.mutable_iterator(it); }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  </div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keyword">template</span><<span class="keyword">class</span> Serializer></div><div class="line"><a name="l00588"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#ac336d9aa72d7a6fbccfeaaf7dcf5d8b6"> 588</a></span>  <span class="keywordtype">void</span> <a class="code" href="classtsl_1_1array__set.html#ac336d9aa72d7a6fbccfeaaf7dcf5d8b6">serialize</a>(Serializer& serializer)<span class="keyword"> const </span>{</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  m_ht.serialize(serializer);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keyword">template</span><<span class="keyword">class</span> Deserializer></div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classtsl_1_1array__set.html#ab9e1bf3b0f031f27298135451527de7b"> 611</a></span>  <span class="keyword">static</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a> <a class="code" href="classtsl_1_1array__set.html#ab9e1bf3b0f031f27298135451527de7b">deserialize</a>(Deserializer& deserializer, <span class="keywordtype">bool</span> hash_compatible = <span class="keyword">false</span>) {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <a class="code" href="classtsl_1_1array__set.html">array_set</a> <span class="keyword">set</span>(0);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keyword">set</span>.m_ht.deserialize(deserializer, hash_compatible);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  <span class="keywordflow">return</span> <span class="keyword">set</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  </div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a>& lhs, <span class="keyword">const</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a>& rhs) {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">if</span>(lhs.size() != rhs.size()) {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  </div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="keywordflow">for</span>(<span class="keyword">auto</span> it = lhs.cbegin(); it != lhs.cend(); ++it) {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keyword">const</span> <span class="keyword">auto</span> it_element_rhs = rhs.find_ks(it.key(), it.key_size());</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">if</span>(it_element_rhs == rhs.cend()) {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  }</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  }</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  </div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  }</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span> </div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keyword">friend</span> <span class="keywordtype">bool</span> operator!=(<span class="keyword">const</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a>& lhs, <span class="keyword">const</span> <a class="code" href="classtsl_1_1array__set.html">array_set</a>& rhs) {</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordflow">return</span> !operator==(lhs, rhs);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  }</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> </div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  <span class="keyword">friend</span> <span class="keywordtype">void</span> swap(<a class="code" href="classtsl_1_1array__set.html">array_set</a>& lhs, <a class="code" href="classtsl_1_1array__set.html">array_set</a>& rhs) {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  lhs.swap(rhs);</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  }</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  </div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">static</span> <span class="keyword">const</span> size_type MAX_KEY_SIZE = ht::MAX_KEY_SIZE;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  </div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <a class="code" href="classtsl_1_1detail__array__hash_1_1array__hash.html">ht</a> m_ht;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> };</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span> </div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> <span class="keyword">template</span><<span class="keyword">class </span>CharT,</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keyword">class </span>Hash = <a class="code" href="structtsl_1_1ah_1_1str__hash.html">tsl::ah::str_hash<CharT></a>,</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keyword">class </span>KeyEqual = <a class="code" href="structtsl_1_1ah_1_1str__equal.html">tsl::ah::str_equal<CharT></a>,</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordtype">bool</span> StoreNullTerminator = <span class="keyword">true</span>,</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">class </span>KeySizeT = std::uint16_t,</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keyword">class </span>IndexSizeT = std::uint32_t> </div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span> <span class="keyword">using</span> <a class="code" href="classtsl_1_1array__set.html">array_pg_set</a> = <a class="code" href="classtsl_1_1array__set.html">array_set</a><CharT, Hash, KeyEqual, StoreNullTerminator, </div><div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="namespacetsl.html#a98a91da99356329b6221f7f429c10a76"> 660</a></span>  KeySizeT, IndexSizeT, <a class="code" href="classtsl_1_1ah_1_1prime__growth__policy.html">tsl::ah::prime_growth_policy</a>>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span> } <span class="comment">//end namespace tsl</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> <span class="preprocessor">#endif</span></div><div class="ttc" id="classtsl_1_1array__set_html_a71b32a679ea6bba077c7b8aebf96fd49"><div class="ttname"><a href="classtsl_1_1array__set.html#a71b32a679ea6bba077c7b8aebf96fd49">tsl::array_set::find</a></div><div class="ttdeci">const_iterator find(const std::basic_string< CharT > &key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:428</div></div>
<div class="ttc" id="classtsl_1_1array__set_html"><div class="ttname"><a href="classtsl_1_1array__set.html">tsl::array_set</a></div><div class="ttdef"><b>Definition:</b> array_set.h:67</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a98f29bdaded3ee80ae64cc7a6a8437cb"><div class="ttname"><a href="classtsl_1_1array__set.html#a98f29bdaded3ee80ae64cc7a6a8437cb">tsl::array_set::find</a></div><div class="ttdeci">iterator find(const std::basic_string< CharT > &key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:421</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a121e9efcf5760be5de4a2f2271fe33d0"><div class="ttname"><a href="classtsl_1_1array__set.html#a121e9efcf5760be5de4a2f2271fe33d0">tsl::array_set::find_ks</a></div><div class="ttdeci">const_iterator find_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:443</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a06409587141031ede201d45c501a2863"><div class="ttname"><a href="classtsl_1_1array__set.html#a06409587141031ede201d45c501a2863">tsl::array_set::find_ks</a></div><div class="ttdeci">iterator find_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:436</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a3e5ed607b5d0c4f2cc78201e96ee6e19"><div class="ttname"><a href="classtsl_1_1array__set.html#a3e5ed607b5d0c4f2cc78201e96ee6e19">tsl::array_set::find</a></div><div class="ttdeci">const_iterator find(const CharT *key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:414</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_ac336d9aa72d7a6fbccfeaaf7dcf5d8b6"><div class="ttname"><a href="classtsl_1_1array__set.html#ac336d9aa72d7a6fbccfeaaf7dcf5d8b6">tsl::array_set::serialize</a></div><div class="ttdeci">void serialize(Serializer &serializer) const </div><div class="ttdef"><b>Definition:</b> array_set.h:588</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a6b9fec6ffae423d9ef4e7b27d5921ad5"><div class="ttname"><a href="classtsl_1_1array__set.html#a6b9fec6ffae423d9ef4e7b27d5921ad5">tsl::array_set::emplace</a></div><div class="ttdeci">std::pair< iterator, bool > emplace(const CharT *key)</div><div class="ttdef"><b>Definition:</b> array_set.h:231</div></div>
<div class="ttc" id="namespacetsl_html"><div class="ttname"><a href="namespacetsl.html">tsl</a></div><div class="ttdef"><b>Definition:</b> array_growth_policy.h:39</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a456654cbc30dcf988c1e35731dadf675"><div class="ttname"><a href="classtsl_1_1array__set.html#a456654cbc30dcf988c1e35731dadf675">tsl::array_set::erase</a></div><div class="ttdeci">size_type erase(const std::basic_string< CharT > &key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:291</div></div>
<div class="ttc" id="structtsl_1_1ah_1_1str__equal_html"><div class="ttname"><a href="structtsl_1_1ah_1_1str__equal.html">tsl::ah::str_equal</a></div><div class="ttdef"><b>Definition:</b> array_hash.h:102</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a8a9ca6d5d7cd7d52c518cf3496cb7220"><div class="ttname"><a href="classtsl_1_1array__set.html#a8a9ca6d5d7cd7d52c518cf3496cb7220">tsl::array_set::equal_range</a></div><div class="ttdeci">std::pair< const_iterator, const_iterator > equal_range(const CharT *key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:509</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a88c5a16ccaff3992726f9f8a17cd9dc0"><div class="ttname"><a href="classtsl_1_1array__set.html#a88c5a16ccaff3992726f9f8a17cd9dc0">tsl::array_set::erase_ks</a></div><div class="ttdeci">size_type erase_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:299</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a6245af3565e8ec81d22711c1b2f7f02f"><div class="ttname"><a href="classtsl_1_1array__set.html#a6245af3565e8ec81d22711c1b2f7f02f">tsl::array_set::equal_range_ks</a></div><div class="ttdeci">std::pair< iterator, iterator > equal_range_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:531</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_ab05c34fcb1708a13ff9d5d2d9b274040"><div class="ttname"><a href="classtsl_1_1array__set.html#ab05c34fcb1708a13ff9d5d2d9b274040">tsl::array_set::equal_range</a></div><div class="ttdeci">std::pair< const_iterator, const_iterator > equal_range(const std::basic_string< CharT > &key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:523</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_aea0d39669b7b0bf429768fdf7a0df7ce"><div class="ttname"><a href="classtsl_1_1array__set.html#aea0d39669b7b0bf429768fdf7a0df7ce">tsl::array_set::equal_range</a></div><div class="ttdeci">std::pair< iterator, iterator > equal_range(const CharT *key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:502</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a11427c6507c91777901674ebc77e3ad6"><div class="ttname"><a href="classtsl_1_1array__set.html#a11427c6507c91777901674ebc77e3ad6">tsl::array_set::mutable_iterator</a></div><div class="ttdeci">iterator mutable_iterator(const_iterator it) noexcept</div><div class="ttdef"><b>Definition:</b> array_set.h:575</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_ab6854b6668d7ee1ec3f70c4af7970dc2"><div class="ttname"><a href="classtsl_1_1array__set.html#ab6854b6668d7ee1ec3f70c4af7970dc2">tsl::array_set::count</a></div><div class="ttdeci">size_type count(const std::basic_string< CharT > &key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:340</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_af05a992f6997b5521b3e8b000bef531b"><div class="ttname"><a href="classtsl_1_1array__set.html#af05a992f6997b5521b3e8b000bef531b">tsl::array_set::count</a></div><div class="ttdeci">size_type count(const CharT *key, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:333</div></div>
<div class="ttc" id="classtsl_1_1ah_1_1power__of__two__growth__policy_html"><div class="ttname"><a href="classtsl_1_1ah_1_1power__of__two__growth__policy.html">tsl::ah::power_of_two_growth_policy</a></div><div class="ttdef"><b>Definition:</b> array_growth_policy.h:49</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a9a8d93c03f778266db8e9b94fc84c393"><div class="ttname"><a href="classtsl_1_1array__set.html#a9a8d93c03f778266db8e9b94fc84c393">tsl::array_set::equal_range</a></div><div class="ttdeci">std::pair< iterator, iterator > equal_range(const std::basic_string< CharT > &key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:516</div></div>
<div class="ttc" id="classtsl_1_1ah_1_1prime__growth__policy_html"><div class="ttname"><a href="classtsl_1_1ah_1_1prime__growth__policy.html">tsl::ah::prime_growth_policy</a></div><div class="ttdef"><b>Definition:</b> array_growth_policy.h:247</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a1c12765abb2a8a000f8ded7e72b8719a"><div class="ttname"><a href="classtsl_1_1array__set.html#a1c12765abb2a8a000f8ded7e72b8719a">tsl::array_set::count_ks</a></div><div class="ttdeci">size_type count_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:348</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_ab9e1bf3b0f031f27298135451527de7b"><div class="ttname"><a href="classtsl_1_1array__set.html#ab9e1bf3b0f031f27298135451527de7b">tsl::array_set::deserialize</a></div><div class="ttdeci">static array_set deserialize(Deserializer &deserializer, bool hash_compatible=false)</div><div class="ttdef"><b>Definition:</b> array_set.h:611</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a933905961969a3ad60ffdc807be32912"><div class="ttname"><a href="classtsl_1_1array__set.html#a933905961969a3ad60ffdc807be32912">tsl::array_set::equal_range_ks</a></div><div class="ttdeci">std::pair< const_iterator, const_iterator > equal_range_ks(const CharT *key, size_type key_size, std::size_t precalculated_hash) const </div><div class="ttdef"><b>Definition:</b> array_set.h:538</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a9a7435a19c0c00e268f31b1fc60a53ec"><div class="ttname"><a href="classtsl_1_1array__set.html#a9a7435a19c0c00e268f31b1fc60a53ec">tsl::array_set::erase</a></div><div class="ttdeci">size_type erase(const CharT *key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:284</div></div>
<div class="ttc" id="classtsl_1_1detail__array__hash_1_1array__hash_html"><div class="ttname"><a href="classtsl_1_1detail__array__hash_1_1array__hash.html">tsl::detail_array_hash::array_hash< CharT, void, Hash, KeyEqual, StoreNullTerminator, KeySizeT, IndexSizeT, GrowthPolicy ></a></div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a23ff170ff18e05ead4b03b47ac814d60"><div class="ttname"><a href="classtsl_1_1array__set.html#a23ff170ff18e05ead4b03b47ac814d60">tsl::array_set::emplace_ks</a></div><div class="ttdeci">std::pair< iterator, bool > emplace_ks(const CharT *key, size_type key_size)</div><div class="ttdef"><b>Definition:</b> array_set.h:245</div></div>
<div class="ttc" id="structtsl_1_1detail__array__hash_1_1is__iterator_html"><div class="ttname"><a href="structtsl_1_1detail__array__hash_1_1is__iterator.html">tsl::detail_array_hash::is_iterator</a></div><div class="ttdef"><b>Definition:</b> array_hash.h:120</div></div>
<div class="ttc" id="structtsl_1_1ah_1_1str__hash_html"><div class="ttname"><a href="structtsl_1_1ah_1_1str__hash.html">tsl::ah::str_hash</a></div><div class="ttdef"><b>Definition:</b> array_hash.h:77</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a129ddc4a1474af101fc78c776df5bc8e"><div class="ttname"><a href="classtsl_1_1array__set.html#a129ddc4a1474af101fc78c776df5bc8e">tsl::array_set::emplace</a></div><div class="ttdeci">std::pair< iterator, bool > emplace(const std::basic_string< CharT > &key)</div><div class="ttdef"><b>Definition:</b> array_set.h:238</div></div>
<div class="ttc" id="classtsl_1_1array__set_html_a8a23cd1f677f4459628c18bbd013cc62"><div class="ttname"><a href="classtsl_1_1array__set.html#a8a23cd1f677f4459628c18bbd013cc62">tsl::array_set::find</a></div><div class="ttdeci">iterator find(const CharT *key, std::size_t precalculated_hash)</div><div class="ttdef"><b>Definition:</b> array_set.h:407</div></div>
</div><!-- fragment --></div><!-- contents -->
<address class="footer">
<small>
Copyright (c) (2019-2020) <a href="https://www.chatopera.com">
北京华夏春松科技有限公司
</a>. All Rights Reserved
</small>
</address>