blob: 60d64d6726360b8cb31f670129d78171b45876b9 [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc -->
<title>ThetaUtil (datasketches-java 4.0.0 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../jquery/jquery-3.6.0.min.js"></script>
<script type="text/javascript" src="../../../../jquery/jquery-ui.min.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ThetaUtil (datasketches-java 4.0.0 API)";
}
}
catch(err) {
}
//-->
var data = {"i0":9,"i1":9,"i2":9,"i3":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ThetaUtil.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.apache.datasketches.thetacommon</a></div>
<h2 title="Class ThetaUtil" class="title">Class ThetaUtil</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.datasketches.thetacommon.ThetaUtil</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public final class <span class="typeNameLabel">ThetaUtil</span>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></pre>
<div class="block">Utility methods for the Theta Family of sketches</div>
<dl>
<dt><span class="simpleTagLabel">Author:</span></dt>
<dd>Lee Rhodes</dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Field</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_NOMINAL_ENTRIES">DEFAULT_NOMINAL_ENTRIES</a></span></code></th>
<td class="colLast">
<div class="block">The default nominal entries is provided as a convenience for those cases where the
nominal sketch size in number of entries is not provided.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static long</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#DEFAULT_UPDATE_SEED">DEFAULT_UPDATE_SEED</a></span></code></th>
<td class="colLast">
<div class="block">The seed 9001 used in the sketch update methods is a prime number that
was chosen very early on in experimental testing.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MAX_LG_NOM_LONGS">MAX_LG_NOM_LONGS</a></span></code></th>
<td class="colLast">
<div class="block">The largest Log2 nom entries allowed: 26.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MIN_LG_ARR_LONGS">MIN_LG_ARR_LONGS</a></span></code></th>
<td class="colLast">
<div class="block">The smallest Log2 cache size allowed: 5.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#MIN_LG_NOM_LONGS">MIN_LG_NOM_LONGS</a></span></code></th>
<td class="colLast">
<div class="block">The smallest Log2 nom entries allowed: 4.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#REBUILD_THRESHOLD">REBUILD_THRESHOLD</a></span></code></th>
<td class="colLast">
<div class="block">The hash table rebuild threshold = 15.0/16.0.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#RESIZE_THRESHOLD">RESIZE_THRESHOLD</a></span></code></th>
<td class="colLast">
<div class="block">The resize threshold = 0.5; tuned for speed.</div>
</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkNomLongs(int)">checkNomLongs</a></span>&#8203;(int&nbsp;nomLongs)</code></th>
<td class="colLast">
<div class="block">Checks that the given nomLongs is within bounds and returns the Log2 of the ceiling power of 2
of the given nomLongs.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static short</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#checkSeedHashes(short,short)">checkSeedHashes</a></span>&#8203;(short&nbsp;seedHashA,
short&nbsp;seedHashB)</code></th>
<td class="colLast">
<div class="block">Check if the two seed hashes are equal.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static short</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeSeedHash(long)">computeSeedHash</a></span>&#8203;(long&nbsp;seed)</code></th>
<td class="colLast">
<div class="block">Computes and checks the 16-bit seed hash from the given long seed.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#startingSubMultiple(int,int,int)">startingSubMultiple</a></span>&#8203;(int&nbsp;lgTarget,
int&nbsp;lgRF,
int&nbsp;lgMin)</code></th>
<td class="colLast">
<div class="block">Gets the smallest allowed exponent of 2 that it is a sub-multiple of the target by zero,
one or more resize factors.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang" class="externalLink">Object</a></h3>
<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang" class="externalLink">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang" class="externalLink">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang" class="externalLink">finalize</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang" class="externalLink">getClass</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang" class="externalLink">hashCode</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang" class="externalLink">notify</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll()" title="class or interface in java.lang" class="externalLink">notifyAll</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang" class="externalLink">toString</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang" class="externalLink">wait</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait(long,int)" title="class or interface in java.lang" class="externalLink">wait</a></code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a id="MIN_LG_NOM_LONGS">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MIN_LG_NOM_LONGS</h4>
<pre>public static final&nbsp;int MIN_LG_NOM_LONGS</pre>
<div class="block">The smallest Log2 nom entries allowed: 4.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.MIN_LG_NOM_LONGS">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="MAX_LG_NOM_LONGS">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>MAX_LG_NOM_LONGS</h4>
<pre>public static final&nbsp;int MAX_LG_NOM_LONGS</pre>
<div class="block">The largest Log2 nom entries allowed: 26.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.MAX_LG_NOM_LONGS">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="REBUILD_THRESHOLD">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>REBUILD_THRESHOLD</h4>
<pre>public static final&nbsp;double REBUILD_THRESHOLD</pre>
<div class="block">The hash table rebuild threshold = 15.0/16.0.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.REBUILD_THRESHOLD">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="RESIZE_THRESHOLD">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>RESIZE_THRESHOLD</h4>
<pre>public static final&nbsp;double RESIZE_THRESHOLD</pre>
<div class="block">The resize threshold = 0.5; tuned for speed.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.RESIZE_THRESHOLD">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="DEFAULT_NOMINAL_ENTRIES">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_NOMINAL_ENTRIES</h4>
<pre>public static final&nbsp;int DEFAULT_NOMINAL_ENTRIES</pre>
<div class="block">The default nominal entries is provided as a convenience for those cases where the
nominal sketch size in number of entries is not provided.
A sketch of 4096 entries has a Relative Standard Error (RSE) of +/- 1.56% at a confidence of
68%; or equivalently, a Relative Error of +/- 3.1% at a confidence of 95.4%.
<a href="../../../../resources/dictionary.html#defaultNomEntries">See Default Nominal Entries</a></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.DEFAULT_NOMINAL_ENTRIES">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="DEFAULT_UPDATE_SEED">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>DEFAULT_UPDATE_SEED</h4>
<pre>public static final&nbsp;long DEFAULT_UPDATE_SEED</pre>
<div class="block">The seed 9001 used in the sketch update methods is a prime number that
was chosen very early on in experimental testing. Choosing a seed is somewhat arbitrary, and
the author cannot prove that this particular seed is somehow superior to other seeds. There
was some early Internet discussion that a seed of 0 did not produce as clean avalanche diagrams
as non-zero seeds, but this may have been more related to the MurmurHash2 release, which did
have some issues. As far as the author can determine, MurmurHash3 does not have these problems.
<p>In order to perform set operations on two sketches it is critical that the same hash
function and seed are identical for both sketches, otherwise the assumed 1:1 relationship
between the original source key value and the hashed bit string would be violated. Once
you have developed a history of stored sketches you are stuck with it.
<p><b>WARNING:</b> This seed is used internally by library sketches in different
packages and thus must be declared public. However, this seed value must not be used by library
users with the MurmurHash3 function. It should be viewed as existing for exclusive, private
use by the library.
<p><a href="../../../../resources/dictionary.html#defaultUpdateSeed">See Default Update Seed</a></div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.DEFAULT_UPDATE_SEED">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a id="MIN_LG_ARR_LONGS">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>MIN_LG_ARR_LONGS</h4>
<pre>public static final&nbsp;int MIN_LG_ARR_LONGS</pre>
<div class="block">The smallest Log2 cache size allowed: 5.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../constant-values.html#org.apache.datasketches.thetacommon.ThetaUtil.MIN_LG_ARR_LONGS">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
<!-- ============ METHOD DETAIL ========== -->
<section>
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="checkSeedHashes(short,short)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>checkSeedHashes</h4>
<pre class="methodSignature">public static&nbsp;short&nbsp;checkSeedHashes&#8203;(short&nbsp;seedHashA,
short&nbsp;seedHashB)</pre>
<div class="block">Check if the two seed hashes are equal. If not, throw an SketchesArgumentException.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>seedHashA</code> - the seedHash A</dd>
<dd><code>seedHashB</code> - the seedHash B</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>seedHashA if they are equal</dd>
</dl>
</li>
</ul>
<a id="computeSeedHash(long)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeSeedHash</h4>
<pre class="methodSignature">public static&nbsp;short&nbsp;computeSeedHash&#8203;(long&nbsp;seed)</pre>
<div class="block">Computes and checks the 16-bit seed hash from the given long seed.
The seed hash may not be zero in order to maintain compatibility with older serialized
versions that did not have this concept.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>seed</code> - <a href="../../../../resources/dictionary.html#seed">See Update Hash Seed</a></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the seed hash.</dd>
</dl>
</li>
</ul>
<a id="startingSubMultiple(int,int,int)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>startingSubMultiple</h4>
<pre class="methodSignature">public static&nbsp;int&nbsp;startingSubMultiple&#8203;(int&nbsp;lgTarget,
int&nbsp;lgRF,
int&nbsp;lgMin)</pre>
<div class="block">Gets the smallest allowed exponent of 2 that it is a sub-multiple of the target by zero,
one or more resize factors.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>lgTarget</code> - Log2 of the target size</dd>
<dd><code>lgRF</code> - Log_base2 of Resize Factor.
<a href="../../../../resources/dictionary.html#resizeFactor">See Resize Factor</a></dd>
<dd><code>lgMin</code> - Log2 of the minimum allowed starting size</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The Log2 of the starting size</dd>
</dl>
</li>
</ul>
<a id="checkNomLongs(int)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>checkNomLongs</h4>
<pre class="methodSignature">public static&nbsp;int&nbsp;checkNomLongs&#8203;(int&nbsp;nomLongs)</pre>
<div class="block">Checks that the given nomLongs is within bounds and returns the Log2 of the ceiling power of 2
of the given nomLongs.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>nomLongs</code> - the given number of nominal longs. This can be any value from 16 to
67108864, inclusive.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The Log2 of the ceiling power of 2 of the given nomLongs.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ThetaUtil.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2015&#x2013;2022 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</body>
</html>