HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: //opt/alt/alt-nodejs20/root/usr/share/doc/alt-nodejs20-libicu-doc/utfiterator_8h.html
<!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.14"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ICU 78.3: common/unicode/utfiterator.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">ICU 78.3
   &#160;<span id="projectnumber">78.3</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.14 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_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="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle">
<div class="title">utfiterator.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>C++ header-only API: C++ iterators over Unicode strings (=UTF-8/16/32 if well-formed).  
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;<a class="el" href="utypes_8h_source.html">unicode/utypes.h</a>&quot;</code><br />
<code>#include &lt;iterator&gt;</code><br />
<code>#include &lt;string&gt;</code><br />
<code>#include &lt;string_view&gt;</code><br />
<code>#include &lt;type_traits&gt;</code><br />
<code>#include &quot;<a class="el" href="utf16_8h_source.html">unicode/utf16.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="utf8_8h_source.html">unicode/utf8.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="uversion_8h_source.html">unicode/uversion.h</a>&quot;</code><br />
</div>
<p><a href="utfiterator_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1prv_1_1range__type.html">U_HEADER_ONLY_NAMESPACE::prv::range_type&lt; Range, typename &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1prv_1_1range__type_3_01Range_00_01std_1_1void__t_3_01decltypf5078535dbcf2fa34be202d612eb2ece.html">U_HEADER_ONLY_NAMESPACE::prv::range_type&lt; Range, std::void_t&lt; decltype(std::declval&lt; Range &gt;().begin()), decltype(std::declval&lt; Range &gt;().end())&gt; &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1prv_1_1is__basic__string__view.html">U_HEADER_ONLY_NAMESPACE::prv::is_basic_string_view&lt; T &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1prv_1_1is__basic__string__view_3_01std_1_1basic__string__view_3_01Args_8_8_8_01_4_01_4.html">U_HEADER_ONLY_NAMESPACE::prv::is_basic_string_view&lt; std::basic_string_view&lt; Args... &gt; &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1prv_1_1CodePointsIterator.html">U_HEADER_ONLY_NAMESPACE::prv::CodePointsIterator&lt; CP32, skipSurrogates &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1AllCodePoints.html">U_HEADER_ONLY_NAMESPACE::AllCodePoints&lt; CP32 &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A C++ "range" over all Unicode code points U+0000..U+10FFFF.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1AllCodePoints.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1AllScalarValues.html">U_HEADER_ONLY_NAMESPACE::AllScalarValues&lt; CP32 &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A C++ "range" over all Unicode scalar values U+0000..U+D7FF &amp; U+E000..U+10FFFF.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1AllScalarValues.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeCodeUnits.html">U_HEADER_ONLY_NAMESPACE::UnsafeCodeUnits&lt; CP32, UnitIter, typename &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Result of decoding a code unit sequence for one code point.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeCodeUnits.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1CodeUnits.html">U_HEADER_ONLY_NAMESPACE::CodeUnits&lt; CP32, UnitIter, typename &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Result of validating and decoding a code unit sequence for one code point.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1CodeUnits.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFIterator.html">U_HEADER_ONLY_NAMESPACE::UTFIterator&lt; CP32, behavior, UnitIter, LimitIter, typename &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Validating iterator over the code points in a Unicode string.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1UTFIterator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFStringCodePoints.html">U_HEADER_ONLY_NAMESPACE::UTFStringCodePoints&lt; CP32, behavior, Range &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A C++ "range" for validating iteration over all of the code points of a code unit range.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1UTFStringCodePoints.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1UTFStringCodePointsAdaptor.html">U_HEADER_ONLY_NAMESPACE::UTFStringCodePointsAdaptor&lt; CP32, behavior &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFIterator.html">U_HEADER_ONLY_NAMESPACE::UnsafeUTFIterator&lt; CP32, UnitIter, typename &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Non-validating iterator over the code points in a Unicode string.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFIterator.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFStringCodePoints.html">U_HEADER_ONLY_NAMESPACE::UnsafeUTFStringCodePoints&lt; CP32, Range &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">A C++ "range" for non-validating iteration over all of the code points of a code unit range.  <a href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFStringCodePoints.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFStringCodePointsAdaptor.html">U_HEADER_ONLY_NAMESPACE::UnsafeUTFStringCodePointsAdaptor&lt; CP32 &gt;</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ac9bd38a5248aa5282d2844324be20000"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">UTFIllFormedBehavior</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#ac9bd38a5248aa5282d2844324be20000">UTFIllFormedBehavior</a></td></tr>
<tr class="memdesc:ac9bd38a5248aa5282d2844324be20000"><td class="mdescLeft">&#160;</td><td class="mdescRight">Some defined behaviors for handling ill-formed Unicode strings.  <a href="#ac9bd38a5248aa5282d2844324be20000">More...</a><br /></td></tr>
<tr class="separator:ac9bd38a5248aa5282d2844324be20000"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac94512354a3c3757bd51504e17c42675"><td class="memTemplParams" colspan="2">template&lt;typename Iter &gt; </td></tr>
<tr class="memitem:ac94512354a3c3757bd51504e17c42675"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#ac94512354a3c3757bd51504e17c42675">U_HEADER_ONLY_NAMESPACE::prv::iter_value_t</a> = typename std::iterator_traits&lt; Iter &gt;::value_type</td></tr>
<tr class="separator:ac94512354a3c3757bd51504e17c42675"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a379c0d1e14b3a9a7e7ca33899d8fda6b"><td class="memTemplParams" colspan="2">template&lt;typename Iter &gt; </td></tr>
<tr class="memitem:a379c0d1e14b3a9a7e7ca33899d8fda6b"><td class="memTemplItemLeft" align="right" valign="top">using&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a379c0d1e14b3a9a7e7ca33899d8fda6b">U_HEADER_ONLY_NAMESPACE::prv::iter_difference_t</a> = typename std::iterator_traits&lt; Iter &gt;::difference_type</td></tr>
<tr class="separator:a379c0d1e14b3a9a7e7ca33899d8fda6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ae96b61b479fe4d7b8e525787353d1d46"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">UTFIllFormedBehavior</a> { <a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46a3a3ec2a3f0723ec5bc20765b895509f0">UTF_BEHAVIOR_NEGATIVE</a>, 
<a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46a2e9b1ff0326a69017ff1ea55c9d7137d">UTF_BEHAVIOR_FFFD</a>, 
<a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46a36d5d4b43747b3b7230fcd82daf8fb56">UTF_BEHAVIOR_SURROGATE</a>
 }</td></tr>
<tr class="memdesc:ae96b61b479fe4d7b8e525787353d1d46"><td class="mdescLeft">&#160;</td><td class="mdescRight">Some defined behaviors for handling ill-formed Unicode strings.  <a href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">More...</a><br /></td></tr>
<tr class="separator:ae96b61b479fe4d7b8e525787353d1d46"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a81f9f64c82a3b29389483be3c65c581d"><td class="memTemplParams" colspan="2">template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter , typename LimitIter  = UnitIter&gt; </td></tr>
<tr class="memitem:a81f9f64c82a3b29389483be3c65c581d"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a81f9f64c82a3b29389483be3c65c581d">U_HEADER_ONLY_NAMESPACE::utfIterator</a> (UnitIter start, UnitIter p, LimitIter limit)</td></tr>
<tr class="memdesc:a81f9f64c82a3b29389483be3c65c581d"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFIterator.html" title="Validating iterator over the code points in a Unicode string. ">UTFIterator</a> factory function for start &lt;= p &lt; limit.  <a href="utfiterator_8h.html#a81f9f64c82a3b29389483be3c65c581d">More...</a><br /></td></tr>
<tr class="separator:a81f9f64c82a3b29389483be3c65c581d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70b94948e46469f2252eace654ad2737"><td class="memTemplParams" colspan="2">template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter , typename LimitIter  = UnitIter&gt; </td></tr>
<tr class="memitem:a70b94948e46469f2252eace654ad2737"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a70b94948e46469f2252eace654ad2737">U_HEADER_ONLY_NAMESPACE::utfIterator</a> (UnitIter p, LimitIter limit)</td></tr>
<tr class="memdesc:a70b94948e46469f2252eace654ad2737"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFIterator.html" title="Validating iterator over the code points in a Unicode string. ">UTFIterator</a> factory function for start = p &lt; limit.  <a href="utfiterator_8h.html#a70b94948e46469f2252eace654ad2737">More...</a><br /></td></tr>
<tr class="separator:a70b94948e46469f2252eace654ad2737"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a29e66074fd42156e7cd1928ba3e88860"><td class="memTemplParams" colspan="2">template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter &gt; </td></tr>
<tr class="memitem:a29e66074fd42156e7cd1928ba3e88860"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a29e66074fd42156e7cd1928ba3e88860">U_HEADER_ONLY_NAMESPACE::utfIterator</a> (UnitIter p)</td></tr>
<tr class="memdesc:a29e66074fd42156e7cd1928ba3e88860"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFIterator.html" title="Validating iterator over the code points in a Unicode string. ">UTFIterator</a> factory function for a start or limit sentinel.  <a href="utfiterator_8h.html#a29e66074fd42156e7cd1928ba3e88860">More...</a><br /></td></tr>
<tr class="separator:a29e66074fd42156e7cd1928ba3e88860"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0173fdd0ff9c634956e829eaa5794465"><td class="memTemplParams" colspan="2">template&lt;typename CP32 , typename UnitIter &gt; </td></tr>
<tr class="memitem:a0173fdd0ff9c634956e829eaa5794465"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a0173fdd0ff9c634956e829eaa5794465">U_HEADER_ONLY_NAMESPACE::unsafeUTFIterator</a> (UnitIter iter)</td></tr>
<tr class="memdesc:a0173fdd0ff9c634956e829eaa5794465"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFIterator.html" title="Non-validating iterator over the code points in a Unicode string. ">UnsafeUTFIterator</a> factory function.  <a href="utfiterator_8h.html#a0173fdd0ff9c634956e829eaa5794465">More...</a><br /></td></tr>
<tr class="separator:a0173fdd0ff9c634956e829eaa5794465"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a603cf1c4c624736f3965c0dae31a5c79"><td class="memTemplParams" colspan="2">template&lt;typename Iter &gt; </td></tr>
<tr class="memitem:a603cf1c4c624736f3965c0dae31a5c79"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a603cf1c4c624736f3965c0dae31a5c79">U_HEADER_ONLY_NAMESPACE::prv::forward_iterator</a></td></tr>
<tr class="separator:a603cf1c4c624736f3965c0dae31a5c79"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae75399e99d2481183124f5f96b19b9e1"><td class="memTemplParams" colspan="2">template&lt;typename Iter &gt; </td></tr>
<tr class="memitem:ae75399e99d2481183124f5f96b19b9e1"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#ae75399e99d2481183124f5f96b19b9e1">U_HEADER_ONLY_NAMESPACE::prv::bidirectional_iterator</a></td></tr>
<tr class="separator:ae75399e99d2481183124f5f96b19b9e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb839c10d925301c6dad1daeb23be6d0"><td class="memTemplParams" colspan="2">template&lt;typename Range &gt; </td></tr>
<tr class="memitem:afb839c10d925301c6dad1daeb23be6d0"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">U_HEADER_ONLY_NAMESPACE::prv::range</a> = range_type&lt;Range&gt;::value</td></tr>
<tr class="separator:afb839c10d925301c6dad1daeb23be6d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5296d8e44f40e0d0971832c9897437cb"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a5296d8e44f40e0d0971832c9897437cb"><td class="memTemplItemLeft" align="right" valign="top">constexpr bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a5296d8e44f40e0d0971832c9897437cb">U_HEADER_ONLY_NAMESPACE::prv::is_basic_string_view_v</a> = is_basic_string_view&lt;T&gt;::value</td></tr>
<tr class="separator:a5296d8e44f40e0d0971832c9897437cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a984a43b6a404be5a37425475b5992285"><td class="memTemplParams" colspan="2">template&lt;typename CP32 , UTFIllFormedBehavior behavior&gt; </td></tr>
<tr class="memitem:a984a43b6a404be5a37425475b5992285"><td class="memTemplItemLeft" align="right" valign="top">constexpr UTFStringCodePointsAdaptor&lt; CP32, behavior &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#a984a43b6a404be5a37425475b5992285">U_HEADER_ONLY_NAMESPACE::utfStringCodePoints</a></td></tr>
<tr class="memdesc:a984a43b6a404be5a37425475b5992285"><td class="mdescLeft">&#160;</td><td class="mdescRight">Range adaptor function object returning a <a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UTFStringCodePoints.html" title="A C++ &quot;range&quot; for validating iteration over all of the code points of a code unit range...">UTFStringCodePoints</a> object that represents a "range" of code points in a code unit range, which validates while decoding.  <a href="utfiterator_8h.html#a984a43b6a404be5a37425475b5992285">More...</a><br /></td></tr>
<tr class="separator:a984a43b6a404be5a37425475b5992285"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae761307fb6f808f749d159a0203a7316"><td class="memTemplParams" colspan="2">template&lt;typename CP32 &gt; </td></tr>
<tr class="memitem:ae761307fb6f808f749d159a0203a7316"><td class="memTemplItemLeft" align="right" valign="top">constexpr UnsafeUTFStringCodePointsAdaptor&lt; CP32 &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="utfiterator_8h.html#ae761307fb6f808f749d159a0203a7316">U_HEADER_ONLY_NAMESPACE::unsafeUTFStringCodePoints</a></td></tr>
<tr class="memdesc:ae761307fb6f808f749d159a0203a7316"><td class="mdescLeft">&#160;</td><td class="mdescRight">Range adaptor function object returning an <a class="el" href="classU__HEADER__ONLY__NAMESPACE_1_1UnsafeUTFStringCodePoints.html" title="A C++ &quot;range&quot; for non-validating iteration over all of the code points of a code unit range...">UnsafeUTFStringCodePoints</a> object that represents a "range" of code points in a code unit range.  <a href="utfiterator_8h.html#ae761307fb6f808f749d159a0203a7316">More...</a><br /></td></tr>
<tr class="separator:ae761307fb6f808f749d159a0203a7316"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>C++ header-only API: C++ iterators over Unicode strings (=UTF-8/16/32 if well-formed). </p>
<p>Sample code: </p><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;string_view&gt;</span></div><div class="line"><span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="utypes_8h.html">unicode/utypes.h</a>&quot;</span></div><div class="line"><span class="preprocessor">#include &quot;<a class="code" href="utfiterator_8h.html">unicode/utfiterator.h</a>&quot;</span></div><div class="line"></div><div class="line"><span class="keyword">using</span> icu::header::utfIterator;</div><div class="line"><span class="keyword">using</span> icu::header::utfStringCodePoints;</div><div class="line"><span class="keyword">using</span> icu::header::unsafeUTFIterator;</div><div class="line"><span class="keyword">using</span> icu::header::unsafeUTFStringCodePoints;</div><div class="line"></div><div class="line">int32_t rangeLoop16(std::u16string_view s) {</div><div class="line">    <span class="comment">// We are just adding up the code points for minimal-code demonstration purposes.</span></div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> units : utfStringCodePoints&lt;UChar32, UTF_BEHAVIOR_NEGATIVE&gt;(s)) {</div><div class="line">        sum += units.codePoint();  <span class="comment">// &lt; 0 if ill-formed</span></div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">int32_t loopIterPlusPlus16(std::u16string_view s) {</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(s);</div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.begin(), limit = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.end(); iter != limit;) {</div><div class="line">        sum += (*iter++).codePoint();  <span class="comment">// U+FFFD if ill-formed</span></div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">int32_t backwardLoop16(std::u16string_view s) {</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;UChar32, UTF_BEHAVIOR_SURROGATE&gt;(s);</div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> start = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.begin(), iter = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.end(); start != iter;) {</div><div class="line">        sum += (*--iter).codePoint();  <span class="comment">// surrogate code point if unpaired / ill-formed</span></div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">int32_t reverseLoop8(std::string_view s) {</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(s);</div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.rbegin(), limit = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.rend(); iter != limit; ++iter) {</div><div class="line">        sum += iter-&gt;codePoint();  <span class="comment">// U+FFFD if ill-formed</span></div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">int32_t countCodePoints16(std::u16string_view s) {</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;UChar32, UTF_BEHAVIOR_SURROGATE&gt;(s);</div><div class="line">    <span class="keywordflow">return</span> std::distance(<a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.begin(), <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.end());</div><div class="line">}</div><div class="line"></div><div class="line">int32_t unsafeRangeLoop16(std::u16string_view s) {</div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> units : unsafeUTFStringCodePoints&lt;UChar32&gt;(s)) {</div><div class="line">        sum += units.codePoint();</div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">int32_t unsafeReverseLoop8(std::string_view s) {</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = unsafeUTFStringCodePoints&lt;UChar32&gt;(s);</div><div class="line">    int32_t sum = 0;</div><div class="line">    <span class="keywordflow">for</span> (<span class="keyword">auto</span> iter = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.rbegin(), limit = <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.rend(); iter != limit; ++iter) {</div><div class="line">        sum += iter-&gt;codePoint();</div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> sum;</div><div class="line">}</div><div class="line"></div><div class="line">char32_t firstCodePointOrFFFD16(std::u16string_view s) {</div><div class="line">    <span class="keywordflow">if</span> (s.empty()) { <span class="keywordflow">return</span> 0xfffd; }</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(s);</div><div class="line">    <span class="keywordflow">return</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.begin()-&gt;codePoint();</div><div class="line">}</div><div class="line"></div><div class="line">std::string_view firstSequence8(std::string_view s) {</div><div class="line">    <span class="keywordflow">if</span> (s.empty()) { <span class="keywordflow">return</span> {}; }</div><div class="line">    <span class="keyword">auto</span> <a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a> = utfStringCodePoints&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(s);</div><div class="line">    <span class="keyword">auto</span> units = *(<a class="code" href="utfiterator_8h.html#afb839c10d925301c6dad1daeb23be6d0">range</a>.begin());</div><div class="line">    <span class="keywordflow">if</span> (units.wellFormed()) {</div><div class="line">        <span class="keywordflow">return</span> units.stringView();</div><div class="line">    } <span class="keywordflow">else</span> {</div><div class="line">        <span class="keywordflow">return</span> {};</div><div class="line">    }</div><div class="line">}</div><div class="line"></div><div class="line"><span class="keyword">template</span>&lt;<span class="keyword">typename</span> InputStream&gt;  <span class="comment">// some istream or streambuf</span></div><div class="line">std::u32string cpFromInput(InputStream &amp;in) {</div><div class="line">    <span class="comment">// This is a single-pass input_iterator.</span></div><div class="line">    std::istreambuf_iterator bufIter(in);</div><div class="line">    std::istreambuf_iterator&lt;typename InputStream::char_type&gt; bufLimit;</div><div class="line">    <span class="keyword">auto</span> iter = utfIterator&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(bufIter);</div><div class="line">    <span class="keyword">auto</span> limit = utfIterator&lt;char32_t, UTF_BEHAVIOR_FFFD&gt;(bufLimit);</div><div class="line">    std::u32string s32;</div><div class="line">    <span class="keywordflow">for</span> (; iter != limit; ++iter) {</div><div class="line">        s32.push_back(iter-&gt;codePoint());</div><div class="line">    }</div><div class="line">    <span class="keywordflow">return</span> s32;</div><div class="line">}</div><div class="line"></div><div class="line">std::u32string cpFromStdin() { <span class="keywordflow">return</span> cpFromInput(std::cin); }</div><div class="line">std::u32string cpFromWideStdin() { <span class="keywordflow">return</span> cpFromInput(std::wcin); }</div></div><!-- fragment --> 
<p class="definition">Definition in file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>
</div><h2 class="groupheader">Typedef Documentation</h2>
<a id="file_a379c0d1e14b3a9a7e7ca33899d8fda6b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a379c0d1e14b3a9a7e7ca33899d8fda6b">&#9670;&nbsp;</a></span>iter_difference_t</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Iter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="utfiterator_8h.html#a379c0d1e14b3a9a7e7ca33899d8fda6b">U_HEADER_ONLY_NAMESPACE::prv::iter_difference_t</a> = typedef typename std::iterator_traits&lt;Iter&gt;::difference_type</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="internal"><dt><b><a class="el" href="internal.html#_internal000185">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00203">203</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_ac94512354a3c3757bd51504e17c42675"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_ac94512354a3c3757bd51504e17c42675">&#9670;&nbsp;</a></span>iter_value_t</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Iter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="utfiterator_8h.html#ac94512354a3c3757bd51504e17c42675">U_HEADER_ONLY_NAMESPACE::prv::iter_value_t</a> = typedef typename std::iterator_traits&lt;Iter&gt;::value_type</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="internal"><dt><b><a class="el" href="internal.html#_internal000184">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00199">199</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="ac9bd38a5248aa5282d2844324be20000"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9bd38a5248aa5282d2844324be20000">&#9670;&nbsp;</a></span>UTFIllFormedBehavior</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef enum <a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">UTFIllFormedBehavior</a>  <a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">UTFIllFormedBehavior</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Some defined behaviors for handling ill-formed Unicode strings. </p>
<p>This is a template parameter for UTFIterator and related classes.</p>
<p>When a validating UTFIterator encounters an ill-formed code unit sequence, then CodeUnits.codePoint() is a value according to this parameter.</p>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000025">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>
<dl class="section see"><dt>See also</dt><dd>CodeUnits </dd>
<dd>
UTFIterator </dd>
<dd>
UTFStringCodePoints </dd></dl>

</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ae96b61b479fe4d7b8e525787353d1d46"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae96b61b479fe4d7b8e525787353d1d46">&#9670;&nbsp;</a></span>UTFIllFormedBehavior</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="utfiterator_8h.html#ae96b61b479fe4d7b8e525787353d1d46">UTFIllFormedBehavior</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Some defined behaviors for handling ill-formed Unicode strings. </p>
<p>This is a template parameter for UTFIterator and related classes.</p>
<p>When a validating UTFIterator encounters an ill-formed code unit sequence, then CodeUnits.codePoint() is a value according to this parameter.</p>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000025">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>
<dl class="section see"><dt>See also</dt><dd>CodeUnits </dd>
<dd>
UTFIterator </dd>
<dd>
UTFStringCodePoints </dd></dl>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ae96b61b479fe4d7b8e525787353d1d46a3a3ec2a3f0723ec5bc20765b895509f0"></a>UTF_BEHAVIOR_NEGATIVE&#160;</td><td class="fielddoc"><p>Returns a negative value (-1=U_SENTINEL) instead of a code point. </p>
<p>If the CP32 template parameter for the relevant classes is an unsigned type, then the negative value becomes 0xffffffff=UINT32_MAX.</p>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000026">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>
</td></tr>
<tr><td class="fieldname"><a id="ae96b61b479fe4d7b8e525787353d1d46a2e9b1ff0326a69017ff1ea55c9d7137d"></a>UTF_BEHAVIOR_FFFD&#160;</td><td class="fielddoc"><p>Returns U+FFFD Replacement Character. </p>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000027">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>
</td></tr>
<tr><td class="fieldname"><a id="ae96b61b479fe4d7b8e525787353d1d46a36d5d4b43747b3b7230fcd82daf8fb56"></a>UTF_BEHAVIOR_SURROGATE&#160;</td><td class="fielddoc"><p>UTF-8: Not allowed; UTF-16: returns the unpaired surrogate; UTF-32: returns the surrogate code point, or U+FFFD if out of range. </p>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000028">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>
</td></tr>
</table>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00149">149</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="file_a0173fdd0ff9c634956e829eaa5794465"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a0173fdd0ff9c634956e829eaa5794465">&#9670;&nbsp;</a></span>unsafeUTFIterator()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 , typename UnitIter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">auto U_HEADER_ONLY_NAMESPACE::unsafeUTFIterator </td>
          <td>(</td>
          <td class="paramtype">UnitIter&#160;</td>
          <td class="paramname"><em>iter</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>UnsafeUTFIterator factory function. </p>
<p>Deduces the UnitIter template parameter from the input.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t </td></tr>
    <tr><td class="paramname">UnitIter</td><td>Can usually be omitted/deduced: An iterator (often a pointer) that returns a code unit type: UTF-8: char or char8_t or uint8_t; UTF-16: char16_t or uint16_t or (on Windows) wchar_t; UTF-32: char32_t or UChar32=int32_t or (on Linux) wchar_t </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">iter</td><td>code unit iterator </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>an UnsafeUTFIterator&lt;CP32, UnitIter&gt; for the given code unit iterator or character pointer </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000099">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l02494">2494</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

<p class="reference">References <a class="el" href="utfiterator_8h_source.html#l02494">U_HEADER_ONLY_NAMESPACE::unsafeUTFIterator()</a>.</p>

<p class="reference">Referenced by <a class="el" href="utfiterator_8h_source.html#l02494">U_HEADER_ONLY_NAMESPACE::unsafeUTFIterator()</a>.</p>

</div>
</div>
<a id="file_a81f9f64c82a3b29389483be3c65c581d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a81f9f64c82a3b29389483be3c65c581d">&#9670;&nbsp;</a></span>utfIterator() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter , typename LimitIter  = UnitIter&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">auto U_HEADER_ONLY_NAMESPACE::utfIterator </td>
          <td>(</td>
          <td class="paramtype">UnitIter&#160;</td>
          <td class="paramname"><em>start</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">UnitIter&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">LimitIter&#160;</td>
          <td class="paramname"><em>limit</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>UTFIterator factory function for start &lt;= p &lt; limit. </p>
<p>Deduces the UnitIter and LimitIter template parameters from the inputs. Only enabled if UnitIter is a (multi-pass) forward_iterator or better.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t </td></tr>
    <tr><td class="paramname">behavior</td><td>How to handle ill-formed Unicode strings </td></tr>
    <tr><td class="paramname">UnitIter</td><td>Can usually be omitted/deduced: An iterator (often a pointer) that returns a code unit type: UTF-8: char or char8_t or uint8_t; UTF-16: char16_t or uint16_t or (on Windows) wchar_t; UTF-32: char32_t or UChar32=int32_t or (on Linux) wchar_t </td></tr>
    <tr><td class="paramname">LimitIter</td><td>Either the same as UnitIter, or an iterator sentinel type. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">start</td><td>start code unit iterator </td></tr>
    <tr><td class="paramname">p</td><td>current-position code unit iterator </td></tr>
    <tr><td class="paramname">limit</td><td>limit (exclusive-end) code unit iterator. When using a code unit sentinel (UnitIter≠LimitIter), then that sentinel also works as a sentinel for the code point iterator. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a UTFIterator&lt;CP32, behavior, UnitIter&gt; for the given code unit iterators or character pointers </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000067">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l01696">1696</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

<p class="reference">References <a class="el" href="utfiterator_8h_source.html#l01696">U_HEADER_ONLY_NAMESPACE::utfIterator()</a>.</p>

<p class="reference">Referenced by <a class="el" href="utfiterator_8h_source.html#l01696">U_HEADER_ONLY_NAMESPACE::utfIterator()</a>.</p>

</div>
</div>
<a id="file_a70b94948e46469f2252eace654ad2737"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a70b94948e46469f2252eace654ad2737">&#9670;&nbsp;</a></span>utfIterator() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter , typename LimitIter  = UnitIter&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">auto U_HEADER_ONLY_NAMESPACE::utfIterator </td>
          <td>(</td>
          <td class="paramtype">UnitIter&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">LimitIter&#160;</td>
          <td class="paramname"><em>limit</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>UTFIterator factory function for start = p &lt; limit. </p>
<p>Deduces the UnitIter and LimitIter template parameters from the inputs.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t </td></tr>
    <tr><td class="paramname">behavior</td><td>How to handle ill-formed Unicode strings </td></tr>
    <tr><td class="paramname">UnitIter</td><td>Can usually be omitted/deduced: An iterator (often a pointer) that returns a code unit type: UTF-8: char or char8_t or uint8_t; UTF-16: char16_t or uint16_t or (on Windows) wchar_t; UTF-32: char32_t or UChar32=int32_t or (on Linux) wchar_t </td></tr>
    <tr><td class="paramname">LimitIter</td><td>Either the same as UnitIter, or an iterator sentinel type. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>start and current-position code unit iterator </td></tr>
    <tr><td class="paramname">limit</td><td>limit (exclusive-end) code unit iterator. When using a code unit sentinel (UnitIter≠LimitIter), then that sentinel also works as a sentinel for the code point iterator. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a UTFIterator&lt;CP32, behavior, UnitIter&gt; for the given code unit iterators or character pointers </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000068">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l01723">1723</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

<p class="reference">References <a class="el" href="utfiterator_8h_source.html#l01696">U_HEADER_ONLY_NAMESPACE::utfIterator()</a>.</p>

</div>
</div>
<a id="file_a29e66074fd42156e7cd1928ba3e88860"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a29e66074fd42156e7cd1928ba3e88860">&#9670;&nbsp;</a></span>utfIterator() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 , UTFIllFormedBehavior behavior, typename UnitIter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">auto U_HEADER_ONLY_NAMESPACE::utfIterator </td>
          <td>(</td>
          <td class="paramtype">UnitIter&#160;</td>
          <td class="paramname"><em>p</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>UTFIterator factory function for a start or limit sentinel. </p>
<p>Deduces the UnitIter template parameter from the input. Requires UnitIter to be copyable.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t </td></tr>
    <tr><td class="paramname">behavior</td><td>How to handle ill-formed Unicode strings </td></tr>
    <tr><td class="paramname">UnitIter</td><td>Can usually be omitted/deduced: An iterator (often a pointer) that returns a code unit type: UTF-8: char or char8_t or uint8_t; UTF-16: char16_t or uint16_t or (on Windows) wchar_t; UTF-32: char32_t or UChar32=int32_t or (on Linux) wchar_t </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">p</td><td>code unit iterator. When using a code unit sentinel, then that sentinel also works as a sentinel for the code point iterator. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a UTFIterator&lt;CP32, behavior, UnitIter&gt; for the given code unit iterator or character pointer </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000069">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l01753">1753</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

<p class="reference">References <a class="el" href="utfiterator_8h_source.html#l01696">U_HEADER_ONLY_NAMESPACE::utfIterator()</a>.</p>

</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="file_ae75399e99d2481183124f5f96b19b9e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_ae75399e99d2481183124f5f96b19b9e1">&#9670;&nbsp;</a></span>bidirectional_iterator</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Iter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool U_HEADER_ONLY_NAMESPACE::prv::bidirectional_iterator</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div><div class="line">    std::is_base_of_v&lt;</div><div class="line">        std::bidirectional_iterator_tag,</div><div class="line">        <span class="keyword">typename</span> std::iterator_traits&lt;Iter&gt;::iterator_category&gt;</div></div><!-- fragment --><dl class="internal"><dt><b><a class="el" href="internal.html#_internal000187">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00214">214</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_a603cf1c4c624736f3965c0dae31a5c79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a603cf1c4c624736f3965c0dae31a5c79">&#9670;&nbsp;</a></span>forward_iterator</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Iter &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool U_HEADER_ONLY_NAMESPACE::prv::forward_iterator</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div><div class="line">    std::is_base_of_v&lt;</div><div class="line">        std::forward_iterator_tag,</div><div class="line">        <span class="keyword">typename</span> std::iterator_traits&lt;Iter&gt;::iterator_category&gt;</div></div><!-- fragment --><dl class="internal"><dt><b><a class="el" href="internal.html#_internal000186">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00207">207</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_a5296d8e44f40e0d0971832c9897437cb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a5296d8e44f40e0d0971832c9897437cb">&#9670;&nbsp;</a></span>is_basic_string_view_v</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool U_HEADER_ONLY_NAMESPACE::prv::is_basic_string_view_v = is_basic_string_view&lt;T&gt;::value</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="internal"><dt><b><a class="el" href="internal.html#_internal000193">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00244">244</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_afb839c10d925301c6dad1daeb23be6d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_afb839c10d925301c6dad1daeb23be6d0">&#9670;&nbsp;</a></span>range</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Range &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr bool U_HEADER_ONLY_NAMESPACE::prv::range = range_type&lt;Range&gt;::value</td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="internal"><dt><b><a class="el" href="internal.html#_internal000190">Internal:</a></b></dt><dd>Do not use.</dd></dl>
<p>This API is for internal use only. </p>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l00232">232</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_ae761307fb6f808f749d159a0203a7316"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_ae761307fb6f808f749d159a0203a7316">&#9670;&nbsp;</a></span>unsafeUTFStringCodePoints</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr UnsafeUTFStringCodePointsAdaptor&lt;CP32&gt; U_HEADER_ONLY_NAMESPACE::unsafeUTFStringCodePoints</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Range adaptor function object returning an UnsafeUTFStringCodePoints object that represents a "range" of code points in a code unit range. </p>
<p>The string must be well-formed. Deduces the Range template parameter from the input, taking into account the value category: the code units will be referenced if possible, and moved if necessary.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t </td></tr>
    <tr><td class="paramname">Range</td><td>A C++ "range" of Unicode UTF-8/16/32 code units </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">unitRange</td><td>input range </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>an UnsafeUTFStringCodePoints&lt;CP32, Range&gt; for the given unitRange </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000101">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l02666">2666</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
<a id="file_a984a43b6a404be5a37425475b5992285"></a>
<h2 class="memtitle"><span class="permalink"><a href="#file_a984a43b6a404be5a37425475b5992285">&#9670;&nbsp;</a></span>utfStringCodePoints</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename CP32 , UTFIllFormedBehavior behavior&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">constexpr UTFStringCodePointsAdaptor&lt;CP32, behavior&gt; U_HEADER_ONLY_NAMESPACE::utfStringCodePoints</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Range adaptor function object returning a UTFStringCodePoints object that represents a "range" of code points in a code unit range, which validates while decoding. </p>
<p>Deduces the Range template parameter from the input, taking into account the value category: the code units will be referenced if possible, and moved if necessary.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">CP32</td><td>Code point type: UChar32 (=int32_t) or char32_t or uint32_t; should be signed if UTF_BEHAVIOR_NEGATIVE </td></tr>
    <tr><td class="paramname">behavior</td><td>How to handle ill-formed Unicode strings </td></tr>
    <tr><td class="paramname">Range</td><td>A C++ "range" of Unicode UTF-8/16/32 code units </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">unitRange</td><td>input range </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>a UTFStringCodePoints&lt;CP32, behavior, Range&gt; for the given unitRange </dd></dl>
<dl class="draft"><dt><b><a class="el" href="draft.html#_draft000071">Draft:</a></b></dt><dd>This API may be changed in the future versions and was introduced in ICU 78 </dd></dl>

<p class="definition">Definition at line <a class="el" href="utfiterator_8h_source.html#l01934">1934</a> of file <a class="el" href="utfiterator_8h_source.html">utfiterator.h</a>.</p>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.14
</small></address>
</body>
</html>