PNG  IHDR pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F@8N ' p @8N@8}' p '#@8N@8N pQ9p!i~}|6-ӪG` VP.@*j>[ K^<֐Z]@8N'KQ<Q(`s" 'hgpKB`R@Dqj '  'P$a ( `D$Na L?u80e J,K˷NI'0eݷ(NI'؀ 2ipIIKp`:O'`ʤxB8Ѥx Ѥx $ $P6 :vRNb 'p,>NB 'P]-->P T+*^h& p '‰a ‰ (ĵt#u33;Nt̵'ޯ; [3W ~]0KH1q@8]O2]3*̧7# *p>us p _6]/}-4|t'|Smx= DoʾM×M_8!)6lq':l7!|4} '\ne t!=hnLn (~Dn\+‰_4k)0e@OhZ`F `.m1} 'vp{F`ON7Srx 'D˸nV`><;yMx!IS钦OM)Ե٥x 'DSD6bS8!" ODz#R >S8!7ّxEh0m$MIPHi$IvS8IN$I p$O8I,sk&I)$IN$Hi$I^Ah.p$MIN$IR8I·N "IF9Ah0m$MIN$IR8IN$I 3jIU;kO$ɳN$+ q.x* tEXtComment

Viewing File: /opt/alt/alt-nodejs18/root/usr/share/doc/alt-nodejs18-libicu-doc/ucharstrie_8h_source.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ICU 74.2: common/unicode/ucharstrie.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="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">ICU 74.2
   &#160;<span id="projectnumber">74.2</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_bdd9a5d540de89e9fe90efdfc6973a4f.html">common</a></li><li class="navelem"><a class="el" href="dir_f59c6450ff718ff1b085cfd1c36acbd7.html">unicode</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">ucharstrie.h</div>  </div>
</div><!--header-->
<div class="contents">
<a href="ucharstrie_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// © 2016 and later: Unicode, Inc. and others.</span></div>
<div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// License &amp; terms of use: http://www.unicode.org/copyright.html</span></div>
<div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">/*</span></div>
<div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">*******************************************************************************</span></div>
<div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">*   Copyright (C) 2010-2012, International Business Machines</span></div>
<div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">*   Corporation and others.  All Rights Reserved.</span></div>
<div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">*******************************************************************************</span></div>
<div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">*   file name:  ucharstrie.h</span></div>
<div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">*   encoding:   UTF-8</span></div>
<div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">*   tab size:   8 (not used)</span></div>
<div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">*   indentation:4</span></div>
<div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">*</span></div>
<div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">*   created on: 2010nov14</span></div>
<div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">*   created by: Markus W. Scherer</span></div>
<div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div>
<div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160; </div>
<div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#ifndef __UCHARSTRIE_H__</span></div>
<div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#define __UCHARSTRIE_H__</span></div>
<div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160; </div>
<div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="utypes_8h.html">unicode/utypes.h</a>&quot;</span></div>
<div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160; </div>
<div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#if U_SHOW_CPLUSPLUS_API</span></div>
<div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160; </div>
<div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="unistr_8h.html">unicode/unistr.h</a>&quot;</span></div>
<div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="uobject_8h.html">unicode/uobject.h</a>&quot;</span></div>
<div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ustringtrie_8h.html">unicode/ustringtrie.h</a>&quot;</span></div>
<div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160; </div>
<div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;U_NAMESPACE_BEGIN</div>
<div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160; </div>
<div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">class </span>Appendable;</div>
<div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">class </span>UCharsTrieBuilder;</div>
<div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="keyword">class </span>UVector32;</div>
<div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160; </div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html">   53</a></span>&#160;<span class="keyword">class </span><a class="code" href="utypes_8h.html#a559955ec3bc692657c5d8b1c6de8e334">U_COMMON_API</a> <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> : <span class="keyword">public</span> <a class="code" href="classicu_1_1UMemory.html">UMemory</a> {</div>
<div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<span class="keyword">public</span>:</div>
<div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a1015b8eaf4706395dc5223aa83a8cf28">   69</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html#a1015b8eaf4706395dc5223aa83a8cf28">UCharsTrie</a>(<a class="code" href="classicu_1_1ConstChar16Ptr.html">ConstChar16Ptr</a> trieUChars)</div>
<div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;            : ownedArray_(nullptr), uchars_(trieUChars),</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;              pos_(uchars_), remainingMatchLength_(-1) {}</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160; </div>
<div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#af18ce47c0f52d6b0fc88a254073315a6">   77</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html#af18ce47c0f52d6b0fc88a254073315a6">~UCharsTrie</a>();</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160; </div>
<div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a108d7560b38bb0c161aaa94cd3f9aaf3">   85</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html#a108d7560b38bb0c161aaa94cd3f9aaf3">UCharsTrie</a>(<span class="keyword">const</span> <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;other)</div>
<div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;            : ownedArray_(nullptr), uchars_(other.uchars_),</div>
<div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;              pos_(other.pos_), remainingMatchLength_(other.remainingMatchLength_) {}</div>
<div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160; </div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a3a172d407816b7d842d1b65a324ea71b">   94</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;<a class="code" href="classicu_1_1UCharsTrie.html#a3a172d407816b7d842d1b65a324ea71b">reset</a>() {</div>
<div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        pos_=uchars_;</div>
<div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        remainingMatchLength_=-1;</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    }</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160; </div>
<div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a228a55129870f5cb3db758d4552ebdea">  108</a></span>&#160;    uint64_t <a class="code" href="classicu_1_1UCharsTrie.html#a228a55129870f5cb3db758d4552ebdea">getState64</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <span class="keywordflow">return</span> (<span class="keyword">static_cast&lt;</span>uint64_t<span class="keyword">&gt;</span>(remainingMatchLength_ + 2) &lt;&lt; kState64RemainingShift) |</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;            (uint64_t)(pos_ - uchars_);</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    }</div>
<div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160; </div>
<div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a3ba4cc25bdb8558a1edf6df0c826c832">  127</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;<a class="code" href="classicu_1_1UCharsTrie.html#a3ba4cc25bdb8558a1edf6df0c826c832">resetToState64</a>(uint64_t state) {</div>
<div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        remainingMatchLength_ = <span class="keyword">static_cast&lt;</span>int32_t<span class="keyword">&gt;</span>(state &gt;&gt; kState64RemainingShift) - 2;</div>
<div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        pos_ = uchars_ + (state &amp; kState64PosMask);</div>
<div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    }</div>
<div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160; </div>
<div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1State.html">  138</a></span>&#160;    <span class="keyword">class </span><a class="code" href="classicu_1_1UCharsTrie_1_1State.html">State</a> : <span class="keyword">public</span> <a class="code" href="classicu_1_1UMemory.html">UMemory</a> {</div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <span class="keyword">public</span>:</div>
<div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1State.html#ae46fc1a4c94ea978cafdf8080cd1dc20">  144</a></span>&#160;        <a class="code" href="classicu_1_1UCharsTrie_1_1State.html#ae46fc1a4c94ea978cafdf8080cd1dc20">State</a>() { uchars=<span class="keyword">nullptr</span>; }</div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <span class="keyword">private</span>:</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a>;</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160; </div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        <span class="keyword">const</span> char16_t *uchars;</div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="keyword">const</span> char16_t *pos;</div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        int32_t remainingMatchLength;</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;    };</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160; </div>
<div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#afd85bebbc60ef572188843a61560d7be">  160</a></span>&#160;    <span class="keyword">const</span> <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;<a class="code" href="classicu_1_1UCharsTrie.html#afd85bebbc60ef572188843a61560d7be">saveState</a>(<a class="code" href="classicu_1_1UCharsTrie_1_1State.html">State</a> &amp;state)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        state.uchars=uchars_;</div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        state.pos=pos_;</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        state.remainingMatchLength=remainingMatchLength_;</div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    }</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160; </div>
<div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#ab3af26458fd8f46786a22d688989ca7a">  177</a></span>&#160;    <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;<a class="code" href="classicu_1_1UCharsTrie.html#ab3af26458fd8f46786a22d688989ca7a">resetToState</a>(<span class="keyword">const</span> <a class="code" href="classicu_1_1UCharsTrie_1_1State.html">State</a> &amp;state) {</div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;        <span class="keywordflow">if</span>(uchars_==state.uchars &amp;&amp; uchars_!=<span class="keyword">nullptr</span>) {</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            pos_=state.pos;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;            remainingMatchLength_=state.remainingMatchLength;</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        }</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    }</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160; </div>
<div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#ab09d7b78384a480e7593873659e548aa">  191</a></span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#ab09d7b78384a480e7593873659e548aa">current</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160; </div>
<div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#ac59e9b2cbcf8a15d2c444c437fc1e2f1">  200</a></span>&#160;    <span class="keyword">inline</span> <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#ac59e9b2cbcf8a15d2c444c437fc1e2f1">first</a>(int32_t uchar) {</div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;        remainingMatchLength_=-1;</div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        <span class="keywordflow">return</span> nextImpl(uchars_, uchar);</div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    }</div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160; </div>
<div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#aae53f4950fddaf4496ffa4b6f4fa013a">  213</a></span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#aae53f4950fddaf4496ffa4b6f4fa013a">firstForCodePoint</a>(<a class="code" href="umachine_8h.html#a09fff5c3b5a5b015324dc3ec3cf92809">UChar32</a> cp);</div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160; </div>
<div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a632dcd8b5d047f061464b0120154a6c8">  221</a></span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#a632dcd8b5d047f061464b0120154a6c8">next</a>(int32_t uchar);</div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160; </div>
<div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a96c3ef677467402a555181bc4f342245">  230</a></span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#a96c3ef677467402a555181bc4f342245">nextForCodePoint</a>(<a class="code" href="umachine_8h.html#a09fff5c3b5a5b015324dc3ec3cf92809">UChar32</a> cp);</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160; </div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#af690ab090ef225024fe1235ddf4b7e49">  247</a></span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> <a class="code" href="classicu_1_1UCharsTrie.html#af690ab090ef225024fe1235ddf4b7e49">next</a>(<a class="code" href="classicu_1_1ConstChar16Ptr.html">ConstChar16Ptr</a> s, int32_t length);</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160; </div>
<div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a9c91f2cc690d81cc9428f73f7c6add13">  258</a></span>&#160;    <span class="keyword">inline</span> int32_t <a class="code" href="classicu_1_1UCharsTrie.html#a9c91f2cc690d81cc9428f73f7c6add13">getValue</a>()<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        <span class="keyword">const</span> char16_t *pos=pos_;</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        int32_t leadUnit=*pos++;</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        <span class="comment">// U_ASSERT(leadUnit&gt;=kMinValueLead);</span></div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;        <span class="keywordflow">return</span> leadUnit&amp;kValueIsFinal ?</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;            readValue(pos, leadUnit&amp;0x7fff) : readNodeValue(pos, leadUnit);</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;    }</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160; </div>
<div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#a18d18bc61acbef5bc3e3ba52c65cb8ea">  275</a></span>&#160;    <span class="keyword">inline</span> <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> <a class="code" href="classicu_1_1UCharsTrie.html#a18d18bc61acbef5bc3e3ba52c65cb8ea">hasUniqueValue</a>(int32_t &amp;uniqueValue)<span class="keyword"> const </span>{</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;        <span class="keyword">const</span> char16_t *pos=pos_;</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="comment">// Skip the rest of a pending linear-match node.</span></div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <span class="keywordflow">return</span> pos!=<span class="keyword">nullptr</span> &amp;&amp; findUniqueValue(pos+remainingMatchLength_+1, <span class="keyword">false</span>, uniqueValue);</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    }</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160; </div>
<div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie.html#afec229dd9ab38bf25b7a1048d4b2bffb">  288</a></span>&#160;    int32_t <a class="code" href="classicu_1_1UCharsTrie.html#afec229dd9ab38bf25b7a1048d4b2bffb">getNextUChars</a>(<a class="code" href="classicu_1_1Appendable.html">Appendable</a> &amp;out) <span class="keyword">const</span>;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160; </div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html">  294</a></span>&#160;    <span class="keyword">class </span><a class="code" href="utypes_8h.html#a559955ec3bc692657c5d8b1c6de8e334">U_COMMON_API</a> <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html">Iterator</a> : <span class="keyword">public</span> <a class="code" href="classicu_1_1UMemory.html">UMemory</a> {</div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    <span class="keyword">public</span>:</div>
<div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a0bb349c7ac0725ad6a8fb9934e5a0c88">  307</a></span>&#160;        <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a0bb349c7ac0725ad6a8fb9934e5a0c88">Iterator</a>(<a class="code" href="classicu_1_1ConstChar16Ptr.html">ConstChar16Ptr</a> trieUChars, int32_t maxStringLength, <a class="code" href="utypes_8h.html#a3343c1c8a8377277046774691c98d78c">UErrorCode</a> &amp;errorCode);</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160; </div>
<div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#ae776b67b4946b55390a0f77ab649d42f">  320</a></span>&#160;        <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#ae776b67b4946b55390a0f77ab649d42f">Iterator</a>(<span class="keyword">const</span> <a class="code" href="classicu_1_1UCharsTrie.html">UCharsTrie</a> &amp;trie, int32_t maxStringLength, <a class="code" href="utypes_8h.html#a3343c1c8a8377277046774691c98d78c">UErrorCode</a> &amp;errorCode);</div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160; </div>
<div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a8d4ea40dceceeb4e76bff1e8ddfb6e2e">  326</a></span>&#160;        <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a8d4ea40dceceeb4e76bff1e8ddfb6e2e">~Iterator</a>();</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160; </div>
<div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a138e47f25a26068ea5ec3f890f02f551">  333</a></span>&#160;        <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html">Iterator</a> &amp;<a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a138e47f25a26068ea5ec3f890f02f551">reset</a>();</div>
<div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160; </div>
<div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a5eff3b2e30b74555ba2d5de635e6a659">  339</a></span>&#160;        <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a5eff3b2e30b74555ba2d5de635e6a659">hasNext</a>() <span class="keyword">const</span>;</div>
<div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160; </div>
<div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a9d8e9a008f19806d8a04bc792d4acdc6">  355</a></span>&#160;        <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a9d8e9a008f19806d8a04bc792d4acdc6">next</a>(<a class="code" href="utypes_8h.html#a3343c1c8a8377277046774691c98d78c">UErrorCode</a> &amp;errorCode);</div>
<div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160; </div>
<div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#ae46601c67a7b68f5cb0f039fe17bf2eb">  361</a></span>&#160;        <span class="keyword">const</span> <a class="code" href="classicu_1_1UnicodeString.html">UnicodeString</a> &amp;<a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#ae46601c67a7b68f5cb0f039fe17bf2eb">getString</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> str_; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classicu_1_1UCharsTrie_1_1Iterator.html#a959b42ca91824c9da1b611d3e659b2da">  366</a></span>&#160;        int32_t <a class="code" href="classicu_1_1UCharsTrie_1_1Iterator.html#a959b42ca91824c9da1b611d3e659b2da">getValue</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> value_; }</div>
<div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160; </div>
<div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keyword">private</span>:</div>
<div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;        <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> truncateAndStop() {</div>
<div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;            pos_=<span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;            value_=-1;  <span class="comment">// no real value for str</span></div>
<div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        }</div>
<div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160; </div>
<div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;        <span class="keyword">const</span> char16_t *branchNext(<span class="keyword">const</span> char16_t *pos, int32_t length, <a class="code" href="utypes_8h.html#a3343c1c8a8377277046774691c98d78c">UErrorCode</a> &amp;errorCode);</div>
<div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160; </div>
<div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;        <span class="keyword">const</span> char16_t *uchars_;</div>
<div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        <span class="keyword">const</span> char16_t *pos_;</div>
<div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;        <span class="keyword">const</span> char16_t *initialPos_;</div>
<div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;        int32_t remainingMatchLength_;</div>
<div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;        int32_t initialRemainingMatchLength_;</div>
<div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;        <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> skipValue_;  <span class="comment">// Skip intermediate value which was already delivered.</span></div>
<div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160; </div>
<div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        <a class="code" href="classicu_1_1UnicodeString.html">UnicodeString</a> str_;</div>
<div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;        int32_t maxLength_;</div>
<div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;        int32_t value_;</div>
<div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160; </div>
<div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;        <span class="comment">// The stack stores pairs of integers for backtracking to another</span></div>
<div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;        <span class="comment">// outbound edge of a branch node.</span></div>
<div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;        <span class="comment">// The first integer is an offset from uchars_.</span></div>
<div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;        <span class="comment">// The second integer has the str_.length() from before the node in bits 15..0,</span></div>
<div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        <span class="comment">// and the remaining branch length in bits 31..16.</span></div>
<div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;        <span class="comment">// (We could store the remaining branch length minus 1 in bits 30..16 and not use the sign bit,</span></div>
<div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;        <span class="comment">// but the code looks more confusing that way.)</span></div>
<div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;        UVector32 *stack_;</div>
<div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    };</div>
<div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160; </div>
<div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;<span class="keyword">private</span>:</div>
<div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="keyword">friend</span> <span class="keyword">class </span>UCharsTrieBuilder;</div>
<div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160; </div>
<div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    UCharsTrie(char16_t *adoptUChars, <span class="keyword">const</span> char16_t *trieUChars)</div>
<div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;            : ownedArray_(adoptUChars), uchars_(trieUChars),</div>
<div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;              pos_(uchars_), remainingMatchLength_(-1) {}</div>
<div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160; </div>
<div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <span class="comment">// No assignment operator.</span></div>
<div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    UCharsTrie &amp;operator=(<span class="keyword">const</span> UCharsTrie &amp;other) = <span class="keyword">delete</span>;</div>
<div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160; </div>
<div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <span class="keyword">inline</span> <span class="keywordtype">void</span> stop() {</div>
<div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;        pos_=<span class="keyword">nullptr</span>;</div>
<div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    }</div>
<div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160; </div>
<div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="comment">// Reads a compact 32-bit integer.</span></div>
<div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="comment">// pos is already after the leadUnit, and the lead unit has bit 15 reset.</span></div>
<div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> int32_t readValue(<span class="keyword">const</span> char16_t *pos, int32_t leadUnit) {</div>
<div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;        int32_t value;</div>
<div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;        <span class="keywordflow">if</span>(leadUnit&lt;kMinTwoUnitValueLead) {</div>
<div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;            value=leadUnit;</div>
<div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(leadUnit&lt;kThreeUnitValueLead) {</div>
<div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;            value=((leadUnit-kMinTwoUnitValueLead)&lt;&lt;16)|*pos;</div>
<div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;        } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;            value=(pos[0]&lt;&lt;16)|pos[1];</div>
<div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;        }</div>
<div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;        <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    }</div>
<div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> char16_t *skipValue(<span class="keyword">const</span> char16_t *pos, int32_t leadUnit) {</div>
<div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;        <span class="keywordflow">if</span>(leadUnit&gt;=kMinTwoUnitValueLead) {</div>
<div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;            <span class="keywordflow">if</span>(leadUnit&lt;kThreeUnitValueLead) {</div>
<div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                ++pos;</div>
<div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;                pos+=2;</div>
<div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;            }</div>
<div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;        }</div>
<div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;        <span class="keywordflow">return</span> pos;</div>
<div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    }</div>
<div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> char16_t *skipValue(<span class="keyword">const</span> char16_t *pos) {</div>
<div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;        int32_t leadUnit=*pos++;</div>
<div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;        <span class="keywordflow">return</span> skipValue(pos, leadUnit&amp;0x7fff);</div>
<div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    }</div>
<div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160; </div>
<div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> int32_t readNodeValue(<span class="keyword">const</span> char16_t *pos, int32_t leadUnit) {</div>
<div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;        <span class="comment">// U_ASSERT(kMinValueLead&lt;=leadUnit &amp;&amp; leadUnit&lt;kValueIsFinal);</span></div>
<div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;        int32_t value;</div>
<div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;        <span class="keywordflow">if</span>(leadUnit&lt;kMinTwoUnitNodeValueLead) {</div>
<div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;            value=(leadUnit&gt;&gt;6)-1;</div>
<div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;        } <span class="keywordflow">else</span> <span class="keywordflow">if</span>(leadUnit&lt;kThreeUnitNodeValueLead) {</div>
<div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;            value=(((leadUnit&amp;0x7fc0)-kMinTwoUnitNodeValueLead)&lt;&lt;10)|*pos;</div>
<div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;        } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;            value=(pos[0]&lt;&lt;16)|pos[1];</div>
<div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;        }</div>
<div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;        <span class="keywordflow">return</span> value;</div>
<div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    }</div>
<div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> char16_t *skipNodeValue(<span class="keyword">const</span> char16_t *pos, int32_t leadUnit) {</div>
<div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;        <span class="comment">// U_ASSERT(kMinValueLead&lt;=leadUnit &amp;&amp; leadUnit&lt;kValueIsFinal);</span></div>
<div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        <span class="keywordflow">if</span>(leadUnit&gt;=kMinTwoUnitNodeValueLead) {</div>
<div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;            <span class="keywordflow">if</span>(leadUnit&lt;kThreeUnitNodeValueLead) {</div>
<div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;                ++pos;</div>
<div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;                pos+=2;</div>
<div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;            }</div>
<div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;        }</div>
<div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        <span class="keywordflow">return</span> pos;</div>
<div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;    }</div>
<div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160; </div>
<div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keyword">const</span> char16_t *jumpByDelta(<span class="keyword">const</span> char16_t *pos) {</div>
<div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;        int32_t delta=*pos++;</div>
<div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;        <span class="keywordflow">if</span>(delta&gt;=kMinTwoUnitDeltaLead) {</div>
<div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;            <span class="keywordflow">if</span>(delta==kThreeUnitDeltaLead) {</div>
<div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;                delta=(pos[0]&lt;&lt;16)|pos[1];</div>
<div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;                pos+=2;</div>
<div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;                delta=((delta-kMinTwoUnitDeltaLead)&lt;&lt;16)|*pos++;</div>
<div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;            }</div>
<div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;        }</div>
<div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;        <span class="keywordflow">return</span> pos+delta;</div>
<div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    }</div>
<div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160; </div>
<div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> char16_t *skipDelta(<span class="keyword">const</span> char16_t *pos) {</div>
<div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;        int32_t delta=*pos++;</div>
<div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;        <span class="keywordflow">if</span>(delta&gt;=kMinTwoUnitDeltaLead) {</div>
<div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;            <span class="keywordflow">if</span>(delta==kThreeUnitDeltaLead) {</div>
<div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;                pos+=2;</div>
<div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;            } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;                ++pos;</div>
<div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;            }</div>
<div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;        }</div>
<div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;        <span class="keywordflow">return</span> pos;</div>
<div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    }</div>
<div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160; </div>
<div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <span class="keyword">static</span> <span class="keyword">inline</span> <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> valueResult(int32_t node) {</div>
<div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;        <span class="keywordflow">return</span> (<a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a>)(<a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bda62f2fef78e07bab5f68fa803b581504f">USTRINGTRIE_INTERMEDIATE_VALUE</a>-(node&gt;&gt;15));</div>
<div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    }</div>
<div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160; </div>
<div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;    <span class="comment">// Handles a branch node for both next(uchar) and next(string).</span></div>
<div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> branchNext(<span class="keyword">const</span> char16_t *pos, int32_t length, int32_t uchar);</div>
<div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160; </div>
<div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    <span class="comment">// Requires remainingLength_&lt;0.</span></div>
<div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <a class="code" href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a> nextImpl(<span class="keyword">const</span> char16_t *pos, int32_t uchar);</div>
<div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160; </div>
<div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    <span class="comment">// Helper functions for hasUniqueValue().</span></div>
<div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    <span class="comment">// Recursively finds a unique value (or whether there is not a unique one)</span></div>
<div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;    <span class="comment">// from a branch.</span></div>
<div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> char16_t *findUniqueValueFromBranch(<span class="keyword">const</span> char16_t *pos, int32_t length,</div>
<div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                                                  <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> haveUniqueValue, int32_t &amp;uniqueValue);</div>
<div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;    <span class="comment">// Recursively finds a unique value (or whether there is not a unique one)</span></div>
<div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <span class="comment">// starting from a position on a node lead unit.</span></div>
<div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keyword">static</span> <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> findUniqueValue(<span class="keyword">const</span> char16_t *pos, <a class="code" href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a> haveUniqueValue, int32_t &amp;uniqueValue);</div>
<div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160; </div>
<div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;    <span class="comment">// Helper functions for getNextUChars().</span></div>
<div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    <span class="comment">// getNextUChars() when pos is on a branch node.</span></div>
<div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keyword">static</span> <span class="keywordtype">void</span> getNextBranchUChars(<span class="keyword">const</span> char16_t *pos, int32_t length, Appendable &amp;out);</div>
<div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160; </div>
<div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    <span class="comment">// UCharsTrie data structure</span></div>
<div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    <span class="comment">//</span></div>
<div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    <span class="comment">// The trie consists of a series of char16_t-serialized nodes for incremental</span></div>
<div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <span class="comment">// Unicode string/char16_t sequence matching. (char16_t=16-bit unsigned integer)</span></div>
<div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    <span class="comment">// The root node is at the beginning of the trie data.</span></div>
<div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <span class="comment">//</span></div>
<div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <span class="comment">// Types of nodes are distinguished by their node lead unit ranges.</span></div>
<div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="comment">// After each node, except a final-value node, another node follows to</span></div>
<div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    <span class="comment">// encode match values or continue matching further units.</span></div>
<div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <span class="comment">//</span></div>
<div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="comment">// Node types:</span></div>
<div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    <span class="comment">//  - Final-value node: Stores a 32-bit integer in a compact, variable-length format.</span></div>
<div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <span class="comment">//    The value is for the string/char16_t sequence so far.</span></div>
<div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    <span class="comment">//  - Match node, optionally with an intermediate value in a different compact format.</span></div>
<div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    <span class="comment">//    The value, if present, is for the string/char16_t sequence so far.</span></div>
<div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="comment">//</span></div>
<div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="comment">//  Aside from the value, which uses the node lead unit&#39;s high bits:</span></div>
<div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    <span class="comment">//</span></div>
<div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    <span class="comment">//  - Linear-match node: Matches a number of units.</span></div>
<div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    <span class="comment">//  - Branch node: Branches to other nodes according to the current input unit.</span></div>
<div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="comment">//    The node unit is the length of the branch (number of units to select from)</span></div>
<div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    <span class="comment">//    minus 1. It is followed by a sub-node:</span></div>
<div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;    <span class="comment">//    - If the length is at most kMaxBranchLinearSubNodeLength, then</span></div>
<div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    <span class="comment">//      there are length-1 (key, value) pairs and then one more comparison unit.</span></div>
<div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    <span class="comment">//      If one of the key units matches, then the value is either a final value for</span></div>
<div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <span class="comment">//      the string so far, or a &quot;jump&quot; delta to the next node.</span></div>
<div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    <span class="comment">//      If the last unit matches, then matching continues with the next node.</span></div>
<div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="comment">//      (Values have the same encoding as final-value nodes.)</span></div>
<div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;    <span class="comment">//    - If the length is greater than kMaxBranchLinearSubNodeLength, then</span></div>
<div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    <span class="comment">//      there is one unit and one &quot;jump&quot; delta.</span></div>
<div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;    <span class="comment">//      If the input unit is less than the sub-node unit, then &quot;jump&quot; by delta to</span></div>
<div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;    <span class="comment">//      the next sub-node which will have a length of length/2.</span></div>
<div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="comment">//      (The delta has its own compact encoding.)</span></div>
<div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="comment">//      Otherwise, skip the &quot;jump&quot; delta to the next sub-node</span></div>
<div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="comment">//      which will have a length of length-length/2.</span></div>
<div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160; </div>
<div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;    <span class="comment">// Match-node lead unit values, after masking off intermediate-value bits:</span></div>
<div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160; </div>
<div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="comment">// 0000..002f: Branch node. If node!=0 then the length is node+1, otherwise</span></div>
<div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="comment">// the length is one more than the next unit.</span></div>
<div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160; </div>
<div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <span class="comment">// For a branch sub-node with at most this many entries, we drop down</span></div>
<div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;    <span class="comment">// to a linear search.</span></div>
<div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxBranchLinearSubNodeLength=5;</div>
<div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160; </div>
<div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    <span class="comment">// 0030..003f: Linear-match node, match 1..16 units and continue reading the next node.</span></div>
<div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMinLinearMatch=0x30;</div>
<div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxLinearMatchLength=0x10;</div>
<div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;    <span class="comment">// Match-node lead unit bits 14..6 for the optional intermediate value.</span></div>
<div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <span class="comment">// If these bits are 0, then there is no intermediate value.</span></div>
<div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    <span class="comment">// Otherwise, see the *NodeValue* constants below.</span></div>
<div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMinValueLead=kMinLinearMatch+kMaxLinearMatchLength;  <span class="comment">// 0x0040</span></div>
<div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kNodeTypeMask=kMinValueLead-1;  <span class="comment">// 0x003f</span></div>
<div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160; </div>
<div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <span class="comment">// A final-value node has bit 15 set.</span></div>
<div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kValueIsFinal=0x8000;</div>
<div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160; </div>
<div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    <span class="comment">// Compact value: After testing and masking off bit 15, use the following thresholds.</span></div>
<div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxOneUnitValue=0x3fff;</div>
<div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160; </div>
<div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMinTwoUnitValueLead=kMaxOneUnitValue+1;  <span class="comment">// 0x4000</span></div>
<div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kThreeUnitValueLead=0x7fff;</div>
<div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160; </div>
<div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxTwoUnitValue=((kThreeUnitValueLead-kMinTwoUnitValueLead)&lt;&lt;16)-1;  <span class="comment">// 0x3ffeffff</span></div>
<div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160; </div>
<div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    <span class="comment">// Compact intermediate-value integer, lead unit shared with a branch or linear-match node.</span></div>
<div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxOneUnitNodeValue=0xff;</div>
<div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMinTwoUnitNodeValueLead=kMinValueLead+((kMaxOneUnitNodeValue+1)&lt;&lt;6);  <span class="comment">// 0x4040</span></div>
<div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kThreeUnitNodeValueLead=0x7fc0;</div>
<div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160; </div>
<div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxTwoUnitNodeValue=</div>
<div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;        ((kThreeUnitNodeValueLead-kMinTwoUnitNodeValueLead)&lt;&lt;10)-1;  <span class="comment">// 0xfdffff</span></div>
<div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160; </div>
<div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    <span class="comment">// Compact delta integers.</span></div>
<div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxOneUnitDelta=0xfbff;</div>
<div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMinTwoUnitDeltaLead=kMaxOneUnitDelta+1;  <span class="comment">// 0xfc00</span></div>
<div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kThreeUnitDeltaLead=0xffff;</div>
<div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160; </div>
<div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;    <span class="keyword">static</span> <span class="keyword">const</span> int32_t kMaxTwoUnitDelta=((kThreeUnitDeltaLead-kMinTwoUnitDeltaLead)&lt;&lt;16)-1;  <span class="comment">// 0x03feffff</span></div>
<div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160; </div>
<div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    <span class="comment">// For getState64():</span></div>
<div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;    <span class="comment">// The remainingMatchLength_ is -1..14=(kMaxLinearMatchLength=0x10)-2</span></div>
<div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="comment">// so we need at least 5 bits for that.</span></div>
<div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="comment">// We add 2 to store it as a positive value 1..16=kMaxLinearMatchLength.</span></div>
<div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keyword">static</span> constexpr int32_t kState64RemainingShift = 59;</div>
<div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;    <span class="keyword">static</span> constexpr uint64_t kState64PosMask = (<a class="code" href="umachine_8h.html#a26a7bac63d90ef61175acb9f6fc4f2ca">UINT64_C</a>(1) &lt;&lt; kState64RemainingShift) - 1;</div>
<div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160; </div>
<div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    char16_t *ownedArray_;</div>
<div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160; </div>
<div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    <span class="comment">// Fixed value referencing the UCharsTrie words.</span></div>
<div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keyword">const</span> char16_t *uchars_;</div>
<div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160; </div>
<div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <span class="comment">// Iterator variables.</span></div>
<div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160; </div>
<div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    <span class="comment">// Pointer to next trie unit to read. nullptr if no more matches.</span></div>
<div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="keyword">const</span> char16_t *pos_;</div>
<div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="comment">// Remaining length of a linear-match node, minus 1. Negative if not in such a node.</span></div>
<div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    int32_t remainingMatchLength_;</div>
<div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;};</div>
<div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160; </div>
<div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;U_NAMESPACE_END</div>
<div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160; </div>
<div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* U_SHOW_CPLUSPLUS_API */</span><span class="preprocessor"></span></div>
<div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160; </div>
<div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="preprocessor">#endif  </span><span class="comment">// __UCHARSTRIE_H__</span></div>
<div class="ttc" id="aclassicu_1_1Appendable_html"><div class="ttname"><a href="classicu_1_1Appendable.html">icu::Appendable</a></div><div class="ttdoc">Base class for objects to which Unicode characters and strings can be appended.</div><div class="ttdef"><b>Definition:</b> <a href="appendable_8h_source.html#l00054">appendable.h:54</a></div></div>
<div class="ttc" id="aclassicu_1_1ConstChar16Ptr_html"><div class="ttname"><a href="classicu_1_1ConstChar16Ptr.html">icu::ConstChar16Ptr</a></div><div class="ttdoc">const char16_t * wrapper with implicit conversion from distinct but bit-compatible pointer types.</div><div class="ttdef"><b>Definition:</b> <a href="char16ptr_8h_source.html#l00149">char16ptr.h:149</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html">icu::UCharsTrie::Iterator</a></div><div class="ttdoc">Iterator for all of the (string, value) pairs in a UCharsTrie.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00294">ucharstrie.h:294</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a0bb349c7ac0725ad6a8fb9934e5a0c88"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a0bb349c7ac0725ad6a8fb9934e5a0c88">icu::UCharsTrie::Iterator::Iterator</a></div><div class="ttdeci">Iterator(ConstChar16Ptr trieUChars, int32_t maxStringLength, UErrorCode &amp;errorCode)</div><div class="ttdoc">Iterates from the root of a char16_t-serialized UCharsTrie.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a138e47f25a26068ea5ec3f890f02f551"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a138e47f25a26068ea5ec3f890f02f551">icu::UCharsTrie::Iterator::reset</a></div><div class="ttdeci">Iterator &amp; reset()</div><div class="ttdoc">Resets this iterator to its initial state.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a5eff3b2e30b74555ba2d5de635e6a659"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a5eff3b2e30b74555ba2d5de635e6a659">icu::UCharsTrie::Iterator::hasNext</a></div><div class="ttdeci">UBool hasNext() const</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a8d4ea40dceceeb4e76bff1e8ddfb6e2e"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a8d4ea40dceceeb4e76bff1e8ddfb6e2e">icu::UCharsTrie::Iterator::~Iterator</a></div><div class="ttdeci">~Iterator()</div><div class="ttdoc">Destructor.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a959b42ca91824c9da1b611d3e659b2da"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a959b42ca91824c9da1b611d3e659b2da">icu::UCharsTrie::Iterator::getValue</a></div><div class="ttdeci">int32_t getValue() const</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00366">ucharstrie.h:366</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_a9d8e9a008f19806d8a04bc792d4acdc6"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#a9d8e9a008f19806d8a04bc792d4acdc6">icu::UCharsTrie::Iterator::next</a></div><div class="ttdeci">UBool next(UErrorCode &amp;errorCode)</div><div class="ttdoc">Finds the next (string, value) pair if there is one.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_ae46601c67a7b68f5cb0f039fe17bf2eb"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#ae46601c67a7b68f5cb0f039fe17bf2eb">icu::UCharsTrie::Iterator::getString</a></div><div class="ttdeci">const UnicodeString &amp; getString() const</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00361">ucharstrie.h:361</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1Iterator_html_ae776b67b4946b55390a0f77ab649d42f"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1Iterator.html#ae776b67b4946b55390a0f77ab649d42f">icu::UCharsTrie::Iterator::Iterator</a></div><div class="ttdeci">Iterator(const UCharsTrie &amp;trie, int32_t maxStringLength, UErrorCode &amp;errorCode)</div><div class="ttdoc">Iterates from the current state of the specified UCharsTrie.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1State_html"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1State.html">icu::UCharsTrie::State</a></div><div class="ttdoc">UCharsTrie state object, for saving a trie's current state and resetting the trie back to this state ...</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00138">ucharstrie.h:138</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_1_1State_html_ae46fc1a4c94ea978cafdf8080cd1dc20"><div class="ttname"><a href="classicu_1_1UCharsTrie_1_1State.html#ae46fc1a4c94ea978cafdf8080cd1dc20">icu::UCharsTrie::State::State</a></div><div class="ttdeci">State()</div><div class="ttdoc">Constructs an empty State.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00144">ucharstrie.h:144</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html"><div class="ttname"><a href="classicu_1_1UCharsTrie.html">icu::UCharsTrie</a></div><div class="ttdoc">Light-weight, non-const reader class for a UCharsTrie.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00053">ucharstrie.h:53</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a1015b8eaf4706395dc5223aa83a8cf28"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a1015b8eaf4706395dc5223aa83a8cf28">icu::UCharsTrie::UCharsTrie</a></div><div class="ttdeci">UCharsTrie(ConstChar16Ptr trieUChars)</div><div class="ttdoc">Constructs a UCharsTrie reader instance.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00069">ucharstrie.h:69</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a108d7560b38bb0c161aaa94cd3f9aaf3"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a108d7560b38bb0c161aaa94cd3f9aaf3">icu::UCharsTrie::UCharsTrie</a></div><div class="ttdeci">UCharsTrie(const UCharsTrie &amp;other)</div><div class="ttdoc">Copy constructor, copies the other trie reader object and its state, but not the char16_t array which...</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00085">ucharstrie.h:85</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a18d18bc61acbef5bc3e3ba52c65cb8ea"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a18d18bc61acbef5bc3e3ba52c65cb8ea">icu::UCharsTrie::hasUniqueValue</a></div><div class="ttdeci">UBool hasUniqueValue(int32_t &amp;uniqueValue) const</div><div class="ttdoc">Determines whether all strings reachable from the current state map to the same value.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00275">ucharstrie.h:275</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a228a55129870f5cb3db758d4552ebdea"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a228a55129870f5cb3db758d4552ebdea">icu::UCharsTrie::getState64</a></div><div class="ttdeci">uint64_t getState64() const</div><div class="ttdoc">Returns the state of this trie as a 64-bit integer.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00108">ucharstrie.h:108</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a3a172d407816b7d842d1b65a324ea71b"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a3a172d407816b7d842d1b65a324ea71b">icu::UCharsTrie::reset</a></div><div class="ttdeci">UCharsTrie &amp; reset()</div><div class="ttdoc">Resets this trie to its initial state.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00094">ucharstrie.h:94</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a3ba4cc25bdb8558a1edf6df0c826c832"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a3ba4cc25bdb8558a1edf6df0c826c832">icu::UCharsTrie::resetToState64</a></div><div class="ttdeci">UCharsTrie &amp; resetToState64(uint64_t state)</div><div class="ttdoc">Resets this trie to the saved state.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00127">ucharstrie.h:127</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a632dcd8b5d047f061464b0120154a6c8"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a632dcd8b5d047f061464b0120154a6c8">icu::UCharsTrie::next</a></div><div class="ttdeci">UStringTrieResult next(int32_t uchar)</div><div class="ttdoc">Traverses the trie from the current state for this input char16_t.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a96c3ef677467402a555181bc4f342245"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a96c3ef677467402a555181bc4f342245">icu::UCharsTrie::nextForCodePoint</a></div><div class="ttdeci">UStringTrieResult nextForCodePoint(UChar32 cp)</div><div class="ttdoc">Traverses the trie from the current state for the one or two UTF-16 code units for this input code po...</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_a9c91f2cc690d81cc9428f73f7c6add13"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#a9c91f2cc690d81cc9428f73f7c6add13">icu::UCharsTrie::getValue</a></div><div class="ttdeci">int32_t getValue() const</div><div class="ttdoc">Returns a matching string's value if called immediately after current()/first()/next() returned USTRI...</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00258">ucharstrie.h:258</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_aae53f4950fddaf4496ffa4b6f4fa013a"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#aae53f4950fddaf4496ffa4b6f4fa013a">icu::UCharsTrie::firstForCodePoint</a></div><div class="ttdeci">UStringTrieResult firstForCodePoint(UChar32 cp)</div><div class="ttdoc">Traverses the trie from the initial state for the one or two UTF-16 code units for this input code po...</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_ab09d7b78384a480e7593873659e548aa"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#ab09d7b78384a480e7593873659e548aa">icu::UCharsTrie::current</a></div><div class="ttdeci">UStringTrieResult current() const</div><div class="ttdoc">Determines whether the string so far matches, whether it has a value, and whether another input char1...</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_ab3af26458fd8f46786a22d688989ca7a"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#ab3af26458fd8f46786a22d688989ca7a">icu::UCharsTrie::resetToState</a></div><div class="ttdeci">UCharsTrie &amp; resetToState(const State &amp;state)</div><div class="ttdoc">Resets this trie to the saved state.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00177">ucharstrie.h:177</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_ac59e9b2cbcf8a15d2c444c437fc1e2f1"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#ac59e9b2cbcf8a15d2c444c437fc1e2f1">icu::UCharsTrie::first</a></div><div class="ttdeci">UStringTrieResult first(int32_t uchar)</div><div class="ttdoc">Traverses the trie from the initial state for this input char16_t.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00200">ucharstrie.h:200</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_af18ce47c0f52d6b0fc88a254073315a6"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#af18ce47c0f52d6b0fc88a254073315a6">icu::UCharsTrie::~UCharsTrie</a></div><div class="ttdeci">~UCharsTrie()</div><div class="ttdoc">Destructor.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_af690ab090ef225024fe1235ddf4b7e49"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#af690ab090ef225024fe1235ddf4b7e49">icu::UCharsTrie::next</a></div><div class="ttdeci">UStringTrieResult next(ConstChar16Ptr s, int32_t length)</div><div class="ttdoc">Traverses the trie from the current state for this string.</div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_afd85bebbc60ef572188843a61560d7be"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#afd85bebbc60ef572188843a61560d7be">icu::UCharsTrie::saveState</a></div><div class="ttdeci">const UCharsTrie &amp; saveState(State &amp;state) const</div><div class="ttdoc">Saves the state of this trie.</div><div class="ttdef"><b>Definition:</b> <a href="ucharstrie_8h_source.html#l00160">ucharstrie.h:160</a></div></div>
<div class="ttc" id="aclassicu_1_1UCharsTrie_html_afec229dd9ab38bf25b7a1048d4b2bffb"><div class="ttname"><a href="classicu_1_1UCharsTrie.html#afec229dd9ab38bf25b7a1048d4b2bffb">icu::UCharsTrie::getNextUChars</a></div><div class="ttdeci">int32_t getNextUChars(Appendable &amp;out) const</div><div class="ttdoc">Finds each char16_t which continues the string from the current state.</div></div>
<div class="ttc" id="aclassicu_1_1UMemory_html"><div class="ttname"><a href="classicu_1_1UMemory.html">icu::UMemory</a></div><div class="ttdoc">UMemory is the common ICU base class.</div><div class="ttdef"><b>Definition:</b> <a href="uobject_8h_source.html#l00115">uobject.h:115</a></div></div>
<div class="ttc" id="aclassicu_1_1UnicodeString_html"><div class="ttname"><a href="classicu_1_1UnicodeString.html">icu::UnicodeString</a></div><div class="ttdoc">UnicodeString is a string class that stores Unicode characters directly and provides similar function...</div><div class="ttdef"><b>Definition:</b> <a href="unistr_8h_source.html#l00295">unistr.h:296</a></div></div>
<div class="ttc" id="aumachine_8h_html_a09fff5c3b5a5b015324dc3ec3cf92809"><div class="ttname"><a href="umachine_8h.html#a09fff5c3b5a5b015324dc3ec3cf92809">UChar32</a></div><div class="ttdeci">int32_t UChar32</div><div class="ttdoc">Define UChar32 as a type for single Unicode code points.</div><div class="ttdef"><b>Definition:</b> <a href="umachine_8h_source.html#l00435">umachine.h:435</a></div></div>
<div class="ttc" id="aumachine_8h_html_a26a7bac63d90ef61175acb9f6fc4f2ca"><div class="ttname"><a href="umachine_8h.html#a26a7bac63d90ef61175acb9f6fc4f2ca">UINT64_C</a></div><div class="ttdeci">#define UINT64_C(c)</div><div class="ttdoc">Provides a platform independent way to specify an unsigned 64-bit integer constant.</div><div class="ttdef"><b>Definition:</b> <a href="umachine_8h_source.html#l00219">umachine.h:219</a></div></div>
<div class="ttc" id="aumachine_8h_html_a349ef00011f20ccd1d3b424445681aa5"><div class="ttname"><a href="umachine_8h.html#a349ef00011f20ccd1d3b424445681aa5">UBool</a></div><div class="ttdeci">int8_t UBool</div><div class="ttdoc">The ICU boolean type, a signed-byte integer.</div><div class="ttdef"><b>Definition:</b> <a href="umachine_8h_source.html#l00247">umachine.h:247</a></div></div>
<div class="ttc" id="aunistr_8h_html"><div class="ttname"><a href="unistr_8h.html">unistr.h</a></div><div class="ttdoc">C++ API: Unicode String.</div></div>
<div class="ttc" id="auobject_8h_html"><div class="ttname"><a href="uobject_8h.html">uobject.h</a></div><div class="ttdoc">C++ API: Common ICU base class UObject.</div></div>
<div class="ttc" id="austringtrie_8h_html"><div class="ttname"><a href="ustringtrie_8h.html">ustringtrie.h</a></div><div class="ttdoc">C API: Helper definitions for dictionary trie APIs.</div></div>
<div class="ttc" id="austringtrie_8h_html_a760046451d48a1551ba71162a31365bd"><div class="ttname"><a href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bd">UStringTrieResult</a></div><div class="ttdeci">UStringTrieResult</div><div class="ttdoc">Return values for BytesTrie::next(), UCharsTrie::next() and similar methods.</div><div class="ttdef"><b>Definition:</b> <a href="ustringtrie_8h_source.html#l00035">ustringtrie.h:35</a></div></div>
<div class="ttc" id="austringtrie_8h_html_a760046451d48a1551ba71162a31365bda62f2fef78e07bab5f68fa803b581504f"><div class="ttname"><a href="ustringtrie_8h.html#a760046451d48a1551ba71162a31365bda62f2fef78e07bab5f68fa803b581504f">USTRINGTRIE_INTERMEDIATE_VALUE</a></div><div class="ttdeci">@ USTRINGTRIE_INTERMEDIATE_VALUE</div><div class="ttdoc">The input unit(s) continued a matching string and there is a value for the string so far.</div><div class="ttdef"><b>Definition:</b> <a href="ustringtrie_8h_source.html#l00067">ustringtrie.h:66</a></div></div>
<div class="ttc" id="autypes_8h_html"><div class="ttname"><a href="utypes_8h.html">utypes.h</a></div><div class="ttdoc">Basic definitions for ICU, for both C and C++ APIs.</div></div>
<div class="ttc" id="autypes_8h_html_a3343c1c8a8377277046774691c98d78c"><div class="ttname"><a href="utypes_8h.html#a3343c1c8a8377277046774691c98d78c">UErrorCode</a></div><div class="ttdeci">UErrorCode</div><div class="ttdoc">Standard ICU4C error code type, a substitute for exceptions.</div><div class="ttdef"><b>Definition:</b> <a href="utypes_8h_source.html#l00415">utypes.h:415</a></div></div>
<div class="ttc" id="autypes_8h_html_a559955ec3bc692657c5d8b1c6de8e334"><div class="ttname"><a href="utypes_8h.html#a559955ec3bc692657c5d8b1c6de8e334">U_COMMON_API</a></div><div class="ttdeci">#define U_COMMON_API</div><div class="ttdoc">Set to export library symbols from inside the common library, and to import them from outside.</div><div class="ttdef"><b>Definition:</b> <a href="utypes_8h_source.html#l00300">utypes.h:300</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
</small></address>
</body>
</html>
Back to Directory=ceiIENDB`